Sha256: 05b09512d6f7f47b3ad56564eccd199988bc5454586abcfb9ab59ce36894134c
Contents?: true
Size: 1.86 KB
Versions: 1
Compression:
Stored size: 1.86 KB
Contents
class Shoes module Swt module Common module Clickable attr_accessor :click_listener # object = self is there for compatibility reasons for now # it's for link (defined in text.rb) and the listener is added in the # swt/text_block.rb ... moving it around would be too hard now def clickable(object = self, block) add_listener_for object, ::Swt::SWT::MouseDown, block end def click(&block) add_listener_for ::Swt::SWT::MouseDown, block end def release(&block) add_listener_for ::Swt::SWT::MouseUp, block end private def add_listener_for(swt_object = self, event, block) # dsl objects take care of in bounds checking etc. dsl_object = swt_object.dsl listener = ClickListener.new(dsl_object, block) swt_object.click_listener = listener app.add_clickable_element dsl_object app.add_listener event, listener end def remove_listener_for(swt_object = self, event) dsl_object = swt_object.dsl app.clickable_elements.delete(dsl_object) app.remove_listener ::Swt::SWT::MouseDown, swt_object.click_listener app.remove_listener ::Swt::SWT::MouseUp, swt_object.click_listener end class ClickListener include ::Swt::Widgets::Listener def initialize(clickable_object, block) @clickable_object = clickable_object @block = block end def handleEvent(mouse_event) if @clickable_object.in_bounds?(mouse_event.x, mouse_event.y) eval_block mouse_event end end def eval_block(mouse_event) @block.call mouse_event.button, mouse_event.x, mouse_event.y end end end end end end
Version data entries
1 entries across 1 versions & 1 rubygems
Version | Path |
---|---|
shoes-4.0.0.pre1 | lib/shoes/swt/common/clickable.rb |