#!/usr/bin/env ruby # square -- # This script generates a demo application containing only # a "square" widget. It's only usable if Tk has been compiled # with tkSquare.c and with the -DSQUARE_DEMO compiler switch. # This demo arranges the following bindings for the widget: # # Button-1 press/drag: moves square to mouse # "a": toggle size animation on/off # require 'tk' require 'tkafter' class TkSquare'yes', 'fill'=>'both') bind('1', proc{|x,y| center(x,y)}, '%s %y') bind('B1-Motion', proc{|x,y| center(x,y)}, '%s %y') bind('a', proc{animate}) focus } TkRoot.new.minsize(1,1) # The procedure below centers the square on a given position. def center(x,y) a = $s.size $s.position(x-(a/2), y-(a/2)) end # The procedures below provide a simple form of animation where # the box changes size in a pulsing pattern: larger, smaller, larger, # and so on. $inc = 0 def timer_proc a = $s.size return if $inc == 0 $inc = -3 if a >= 40 $inc = 3 if a <= 10 $s.size(a+$inc) end $timer = TkAfter.new(30, -1, proc{timer_proc}) def animate if $inc == 0 $inc = 3 $timer.start else $inc = 0 $timer.stop end end Tk.mainloop