ホールドされたときに、リール/スロット(少し重なり合っている)の側にホバーしている小さなウィンドウを作成する、rect/slotをセットアップしたい。ホバーとメニューとボタン
小さなメニューにいくつかのボタンを合わせたいと思います。小さなメニューが元のrect/slotよりも長く(幅が広い)、多くのボタンに合うようにしたいのですが、これはslot.hoverを使用できないことを意味します。 rectにあるボタンにはrectが...何か助けてくれますか?
ホールドされたときに、リール/スロット(少し重なり合っている)の側にホバーしている小さなウィンドウを作成する、rect/slotをセットアップしたい。ホバーとメニューとボタン
小さなメニューにいくつかのボタンを合わせたいと思います。小さなメニューが元のrect/slotよりも長く(幅が広い)、多くのボタンに合うようにしたいのですが、これはslot.hoverを使用できないことを意味します。 rectにあるボタンにはrectが...何か助けてくれますか?
ボタンの上にあるときだけでなく、スロットの上にあるときに、その矩形を開いて表示できるようにするために、何か追加のものを使う必要があるように聞こえます。
これは何かの上にメニューを保持する必要があります。
ここでは、これを達成するために必要なロジックを示す例を示します。あなたはこれらのメニューの束を持っていた場合、それは明らかに手に負えなくなります。ここ
Shoes.app :title => "Test", :width => 1000, :height => 600 do
@menu_hover = false
@zone_hover = false
@menu = nil
@zone = stack :width => 200, :height => 100 do
background '#DFA'
end
@zone.hover do
@zone_hover = true
app.append do
break if not @menu.nil?
@menu = stack :width => 230, :height => 35, :top => 50, :left => 150 do
background '#F00'
flow :margin => 5 do
button 'OK'
button 'Cancel'
button 'Ponies!'
end
end
@menu.hover {@menu_hover = true}
@menu.leave do
@menu_hover = false
break if @menu.nil? or @menu_hover or @zone_hover
@menu.remove
@menu = nil
end
end
end
@zone.leave do
@zone_hover = false
break if @menu.nil? or @menu_hover or @zone_hover
@menu.remove
@menu = nil
end
end
は靴を拡張し、上記溶液のリフです::スタックとシューズ::アプリケーションクラスがにhover?
メソッドを追加します(私は彼らがデフォルトでサポートすべきだと思います)。あなたのケースでは、代わりにカスタムウィジェットを作成することを検討しますが、これは使用可能な構造の種類を示しています。
class Shoes::Stack
def hover?
@hover ||= false
end
alias_method :default_hover, :hover
alias_method :default_leave, :leave
def hover(*args, &block)
new_block = lambda { @hover = true; block.call }
default_hover(*args, &new_block)
end
def leave(*args, &block)
new_block = lambda { @hover = false; block.call }
default_leave(*args, &new_block)
end
end
class Shoes::App
alias_method :default_stack, :stack
def stack(*args, &block)
s = default_stack(*args, &block)
s.hover {}
s.leave {}
s
end
end
Shoes.app :title => "Test", :width => 1000, :height => 600 do
@menu = nil
@zone = stack :width => 200, :height => 100 do
background '#DFA'
end
@zone.hover do
app.append do
break if not @menu.nil?
@menu = stack :width => 230, :height => 35, :top => 50, :left => 150 do
background '#F00'
flow :margin => 5 do
button 'OK'
button 'Cancel'
button 'Ponies!'
end
end
@menu.leave do
break if @menu.nil? or @menu.hover? or @zone.hover?
@menu.remove
@menu = nil
end
end
end
@zone.leave do
break if @menu.nil? or @menu.hover? or @zone.hover?
@menu.remove
@menu = nil
end
end