diff options
Diffstat (limited to 'tk8.6/library/demos/square')
-rw-r--r-- | tk8.6/library/demos/square | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tk8.6/library/demos/square b/tk8.6/library/demos/square new file mode 100644 index 0000000..6ce91b8 --- /dev/null +++ b/tk8.6/library/demos/square @@ -0,0 +1,60 @@ +#!/bin/sh +# the next line restarts using wish \ +exec wish "$0" ${1+"$@"} + +# square -- +# This script generates a demo application containing only a "square" +# widget. It's only usable in the "tktest" application or if Tk has +# been compiled with tkSquare.c. This demo arranges the following +# bindings for the widget: +# +# Button-1 press/drag: moves square to mouse +# "a": toggle size animation on/off + +package require Tk ;# We use Tk generally, and... +package require Tktest ;# ... we use the square widget too. + +square .s +pack .s -expand yes -fill both +wm minsize . 1 1 + +bind .s <1> {center %x %y} +bind .s <B1-Motion> {center %x %y} +bind .s a animate +focus .s + +# The procedure below centers the square on a given position. + +proc center {x y} { + set a [.s size] + .s position [expr {$x-($a/2)}] [expr {$y-($a/2)}] +} + +# The procedures below provide a simple form of animation where +# the box changes size in a pulsing pattern: larger, smaller, larger, +# and so on. + +set inc 0 +proc animate {} { + global inc + if {$inc == 0} { + set inc 3 + timer + } else { + set inc 0 + } +} + +proc timer {} { + global inc + set s [.s size] + if {$inc == 0} return + if {$s >= 40} {set inc -3} + if {$s <= 10} {set inc 3} + .s size [expr {$s+$inc}] + after 30 timer +} + +# Local Variables: +# mode: tcl +# End: |