home *** CD-ROM | disk | FTP | other *** search
/ Practical Programming in Tcl & Tk (4th Edition) / TCLBOOK4.BIN / pc / exsource.old / 35_8.tcl < prev    next >
Text File  |  2003-04-15  |  843b  |  40 lines

  1. #
  2. # Example 35-8
  3. # A canvas stroke drawing example.
  4. #
  5.  
  6. proc StrokeInit {} {
  7.     canvas .c ; pack .c
  8.     bind .c <Button-1> {StrokeBegin %W %x %y}
  9.     bind .c <B1-Motion> {Stroke %W %x %y}
  10.     bind .c <ButtonRelease-1> {StrokeEnd %W %x %y}
  11. }
  12. proc StrokeBegin { w x y } {
  13.     global stroke
  14.     catch {unset stroke}
  15.     set stroke(N) 0
  16.     set stroke(0) [list $x $y]
  17. }
  18. proc Stroke { w x y } {
  19.     global stroke
  20.     set coords $stroke($stroke(N))
  21.     lappend coords $x $y
  22.     incr stroke(N)
  23.     set stroke($stroke(N)) [list $x $y]
  24.     # eval gets the coordinates into individual arguments
  25.     eval {$w create line} $coords {-tag segments}
  26. }
  27. proc StrokeEnd { w x y } {
  28.     global stroke
  29.     set coords {}
  30.     for {set i 0} {$i <= $stroke(N)} {incr i} {
  31.         append coords $stroke($i) " "
  32.     }
  33.     $w delete segments
  34.     eval {$w create line} $coords \
  35.         {-tag line -joinstyle round -smooth true -arrow last}
  36. }
  37.  
  38.  
  39.  
  40.