1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00
ruby--ruby/ext/tk/sample/demos-en/square
nagai 75362fbd47 * (IMPORTANT BUG FIX) scan of event keywords doesn't work on recent
versions of Tck/Tk
* (bug fix) initialize error of instance variable on TkComposite
* (bug fix) initialize error on encoding-system on MultiTkIp
* (bug fix) trouble on destroying widgets
* (new) add JP and EN version of Ruby/Tk widget demos


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4249 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
2003-07-31 20:52:40 +00:00

74 lines
1.4 KiB
Ruby

#!/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<TkWindow
def create_self
tk_call 'square', path
end
def size(amount=nil)
if amount
tk_send 'size', amount
else
number(tk_send 'size')
end
end
def position(x,y)
tk_send 'position', x, y
end
end
$s = TkSquare.new{
pack('expand'=>'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