# -*- coding: utf-8 -*-
"""
マウスでお絵かき（黒のみ，線を連結する版）
"""

import tkinter as tk


# Canvasクラスを改造
class MyCanvas(tk.Canvas):
    # 元の引数はほぼ捨てになるが，気にしない
    def __init__(self, master):
        # 最低限の引数でインスタンスを生成
        super().__init__(master, width=400, height=300, bg="white")
        # ペンの設定をインスタンスに持たせる
        self.pen_fill    = "black"
        self.pen_outline = "black"
        self.pen_width   = "3.0"
        self.pen_type    = "line"
        self.item_id     = None
        self.points      = []

    # マウスの左ボタンを押した際
    def b1_press(self, event:tk.Event):
        # 線を描くモードの時は，長さ0の線を生成し，そのidを保持
        if self.pen_type == "line":
            self.points  = [event.x, event.y, event.x, event.y]  # 生成用のとりあえず
            self.item_id = self.create_line(self.points, fill=self.pen_fill, width=self.pen_width)
            self.points  = [event.x, event.y]  # 始点のみ

    # マウスの左ボタンでドラッグした際
    def b1_drag(self, event:tk.Event):
        # 線を描くモードの時は，座標列を追加して図形を修正
        if self.pen_type == "line":
            self.points += [event.x, event.y]
            self.coords(self.item_id, self.points)

    # マウスの右ボタンでドラッグした際
    def b3_drag(self, event:tk.Event):
        r = 5
        # カーソル周辺（±r）の図形を削除
        item = self.find_overlapping(event.x-r, event.y-r, event.x+r, event.y+r)
        self.delete(item)


def main():
    base = tk.Tk()
    base.title("$u_id")

    # 改造版Canvasを生成・配置
    canvas = MyCanvas(base)
    canvas.pack()

    # イベントハンドラの設定
    canvas.bind("<Button-1>",  canvas.b1_press)
    canvas.bind("<B1-Motion>", canvas.b1_drag)
    canvas.bind("<B3-Motion>", canvas.b3_drag)

    base.mainloop()  # GUIを待機


if __name__ == "__main__":
    main()
