# Preprost program za risanje

import tkinter

class Slikar():
    """Grafična aplikacija za risanje."""

    def __init__(self, glavnoOkno):
        # Glavni menu
        glavniMenu = tkinter.Menu(glavnoOkno)
        glavnoOkno.config(menu=glavniMenu) # Dodamo glavni menu v okno

        # Podmenu za urejanje
        menuUredi = tkinter.Menu(glavniMenu)
        glavniMenu.add_cascade(label="Uredi", menu=menuUredi)
        menuUredi.add_cascade(label="Zbriši sliko",
                              command=self.zbrisiSliko)
        menuUredi.add_cascade(label="Modre črte",
                              command=self.modreCrte)
        menuUredi.add_cascade(label="Rdeč krogec",
                              command=self.rdecKrogec)

        # Področje za risanje
        self.platno = tkinter.Canvas(glavnoOkno,
                                     width=640, height=480)
        self.platno.grid(row=0, column=0, columnspan=3)
        self.platno.bind('<B1-Motion>', self.risi)
        self.platno.bind('<ButtonRelease-1>', self.spustiGumb)

        # Vnos za debelino črte
        napis = tkinter.Label(glavnoOkno, text="Debelina črte")
        napis.grid(row=1, column=0)
        self.vnos = tkinter.Entry(glavnoOkno)
        self.vnos.grid(row=1, column=1)
        gumb = tkinter.Button(glavnoOkno, text="Nastavi",
                              command=self.debelinaCrte)
        gumb.grid(row=1, column=2)
        
        # Krogec
        self.platno.create_oval(10, 10, 50, 100, fill="blue", tag='krogec')

        # Zadnja pozicija miške
        self.miska = None

        # Debelina črte
        self.debelina = 1

        # Aktiviramo animacijo krogca cez 1000 ms
        self.platno.after(1000, self.premakniKrogec)


    def debelinaCrte(self):
        self.debelina = int(self.vnos.get())

    def premakniKrogec(self):
        if self.miska is not None:
            # Trenutne koordinate krogca
            (x1, y1, x2, y2) = self.platno.coords('krogec')
            x_krog = (x1 + x2) / 2
            y_krog = (y1 + y2) / 2
            (x_mis, y_mis) = self.miska
            # Enotski vektor od krogca do miške
            dx = 0.05 * (x_mis - x_krog)
            dy = 0.05 * (y_mis - y_krog)
            # Nove koordinate krogca
            self.platno.coords('krogec',
                              x1+dx, y1+dy, x2+dx, y2+dy)
        self.platno.after(100, self.premakniKrogec)

    def zbrisiSliko(self):
        self.platno.delete('crta')

    def modreCrte(self):
        self.platno.itemconfig('crta', fill='blue')

    def rdecKrogec(self):
        self.platno.itemconfig('krogec', fill='red')

    def spustiGumb(self, dogodek):
        self.miska = None

    def risi(self, dogodek):
        # Narišemo črto od self.miska do (x2,y2)
        (x2,y2) = (dogodek.x, dogodek.y)
        if self.miska is not None:
            (x1,y1) = self.miska
            self.platno.create_line(x1, y1, x2, y2,
                                    width=self.debelina,
                                    tag='crta')
        # Zapomnimo si, kje je miska v tem trenutku
        self.miska = (x2, y2)
        

if __name__ == "__main__":
    # Naredimo glavno okno in nastavimo ime
    glavno = tkinter.Tk()
    glavno.title("Slikar")

    # Naredimo objekt razreda Gui in ga spravimo v spremenljivko,
    # sicer bo Python mislil, da je objekt neuporabljen in ga bo pobrisal
    # iz pomnilnika.
    aplikacija = Slikar(glavno)

    # Kontrolo prepustimo glavnemu oknu. Funkcija mainloop neha
    # delovati, ko okno zapremo.
    glavno.mainloop()
