From: RedShift [email protected]
Subject: Ruby draw fullscreen windows
Date: Mon, 17 Apr 2006 19:28:42 +0900
Message-ID: [email protected]
I still need one thing though, something to draw windows with. Like GTK,
QT, TK, etc…
In the case of Ruby/Tk,
Easily skinnable would be nice.
Maybe, Tile extension is useful for customizable skin.
It should also be easy to
control by keyboard, the goal of the GUI is that it can be used with
only four arrow keys (up, down, left, right) and an enter button.
For example,
require ‘tk’
btag = TkBindTag.new
widgets = (0…4).collect{|y|
f = TkFrame.new.pack
(0…6).collect{|x|
b = TkButton.new(f, :text=>“(#{x},#{y})”,
:command=>proc{puts “press (#{x},#{y})”},
:takefocus=>true).pack(:side=>:left)
b.bindtags_unshift(btag)
b.instance_variable_set(‘@coords’, [x, y])
b
}
}
btag.bind(‘Return’, proc{|w| w.invoke}, ‘%W’)
btag.bind(‘FocusIn’, proc{|w| w.state(‘active’)}, ‘%W’)
btag.bind(‘FocusOut’, proc{|w| w.state(‘normal’)}, ‘%W’)
btag.bind(‘Left’, proc{|w|
x, y = w.instance_variable_get(‘@coords’)
size = widgets[y].size
widgets[y][(x+size-1)%size].focus
}, ‘%W’)
btag.bind(‘Right’, proc{|w|
x, y = w.instance_variable_get(‘@coords’)
size = widgets[y].size
widgets[y][(x+1)%size].focus
}, ‘%W’)
btag.bind(‘Up’, proc{|w|
x, y = w.instance_variable_get(‘@coords’)
size = widgets.size
widgets[(y+size-1)%size][x].focus
}, ‘%W’)
btag.bind(‘Down’, proc{|w|
x, y = w.instance_variable_get(‘@coords’)
size = widgets.size
widgets[(y+1)%size][x].focus
}, ‘%W’)
widgets[0][0].focus
Tk.mainloop
And it
should be able to draw windows fullscreen without borders. Any suggestions?
For example,
requrie ‘tk’
TkButton.new(:text=>‘quit’, :command=>proc{exit}).pack
r = Tk.root
r.withdraw
r.overrideredirect = true
r.deiconify
r.geometry = “#{r.winfo_screenwidth}x#{r.winfo_screenheight}+0+0”
Tk.mainloop
On windows, “Tk.root.state = ‘zoomed’” is useful.