Canvas pixel painting

"Elfo" <[email protected]> wrote in comp.lang.tcl:

Here you have a sample... it's a very simple application for paint. I used an image in a canvas widget... I'm not sure it's the best way to do it... but it works (I use 8.4a2 version of Tcl/Tk and Win2000).


 set t .demo
 destroy $t
 toplevel $t

 set _paint(top) $t
 set _paint(width) 800
 set _paint(height) 600

 set _paint(bg) white
 set _paint(color) black

 # Canvas

 set _paint(can) [canvas $t.c \
    -width $_paint(width) \
    -height $_paint(height) \
    -background $_paint(bg) \
    ]

 grid $_paint(can) -row 0 -column 0

 # Image

 set _paint(image) [image create photo \
    -width $_paint(width) \
    -height $_paint(height) \
    -palette 256/256/256 \
    ]

 # Canvas image item

 set _paint(image_id) [$_paint(can) create image \
    0 0 \
    -anchor nw \
    -image $_paint(image) \
    ]

 # Paint pixel at a X,Y coord

 proc Paint {x y} {
    global _paint

    if {$x >= 0 && $y >= 0} {
        $_paint(image) put $_paint(color) \
            -to $x $y \
                [expr {$x + 1}] [expr {$y + 1}]
    }
 }

 bind $_paint(can) <1> {Paint %x %y}
 bind $_paint(can) <B1-Motion> {Paint %x %y}

 # Button 3 will select a new paint color

 proc ChangeColor {} {
    global _paint
    set _paint(color) [tk_chooseColor]
    raise $_paint(top)
 }

 bind $_paint(can) <3> {ChangeColor}

if 0 {

 Asier Burgoa González
 [email protected]

 Éniac, Sistemas Informáticos S.A.
 LOGROÑO (La Rioja) SPAIN
 +34 941 28 28 28

}