module Rabbit::Renderer::Display::ButtonHandler
Constants
- BUTTON_PRESS_ACCEPTING_TIME
- ButtonPressEvent
- ButtonReleaseEvent
Public Class Methods
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 25 def initialize(*args, &block) super init_button_handler end
Calls superclass method
Private Instance Methods
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 212 def add_button_handler(handler=nil, &block) handler ||= Proc.new(&block) @button_handler.push(handler) end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 217 def call_button_handler until @button_handler.empty? clear_button_handler if @button_handler.pop.call end end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 36 def clear_button_handler @button_handler = [] end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 178 def handle_button_middle_single_click(event, release_event) unless release_event.state.alt_mask? add_button_handler do popdown_menu @canvas.activate("PreviousSlide") true end end end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 195 def handle_button_primary_double_click(event, release_event) add_button_handler do if @canvas.index_mode? index = @canvas.current_slide.slide_number(@canvas, event.x, event.y) if index @canvas.activate("ToggleIndexMode") @canvas.activate("JumpToSlide", GLib::Variant.new(index, "i")) end true else false end end end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 163 def handle_button_primary_single_click(event, release_event) if release_event.state.control_mask? add_button_handler do toggle_menu(release_event.x, release_event.y) true end elsif !release_event.state.alt_mask? add_button_handler do popdown_menu @canvas.activate("NextSlide") true end end end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 137 def handle_button_release(event, last_button_press_event) button_types = { 1 => "primary", 2 => "middle", 3 => "secondary", 5 => "primary", 4 => "middle", } click_types = { Gdk::EventType::BUTTON_PRESS => "single_click", Gdk::EventType::BUTTON2_PRESS => "double_click", } button_type = button_types[event.button] click_type = click_types[last_button_press_event.event_type] if button_type and click_type handler = "handle_button_#{button_type}_#{click_type}" if respond_to?(handler, true) __send__(handler, last_button_press_event, event) start_button_handler return true end end false end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 188 def handle_button_secondary_single_click(event, release_event) add_button_handler do toggle_menu(release_event.x, release_event.y) true end end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 31 def init_button_handler @button_handing = false clear_button_handler end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 60 def set_button_event(widget) ["primary", "middle", "secondary"].each do |button_type| click = Gtk::GestureClick.new click.name = "rabbit-click-#{button_type}" click.button = Gdk.const_get("BUTTON_#{button_type.upcase}") last_button_press_event = nil click.signal_connect(:pressed) do |_, n_presses, x, y| last_button_press_event = ButtonPressEvent.new(click.current_button, n_presses, x, y, click.current_event_state) call_hook_procs(@button_press_hook_procs, last_button_press_event) end click.signal_connect(:released) do |_, n_presses, x, y| event = ButtonReleaseEvent.new(click.current_button, n_presses, x, y, click.current_event_state) if last_button_press_event handled = call_hook_procs(@button_release_hook_procs, event, last_button_press_event) unless handled click_type = nil case n_presses when 1 click_type = "single_click" when 2 click_type = "double_click" if button_type == "primary" end if click_type handler = "handle_button_#{button_type}_#{click_type}" __send__(handler, last_button_press_event, event) start_button_handler end end else clear_button_handler end end widget.add_controller(click) end end
Source
# File lib/rabbit/renderer/display/button-handler.rb, line 223 def start_button_handler if @button_handling @button_event_coming = true else @button_handling = true @button_event_coming = false GLib::Timeout.add(BUTTON_PRESS_ACCEPTING_TIME) do if @button_event_coming GLib::Timeout.add(BUTTON_PRESS_ACCEPTING_TIME) do call_button_handler @button_handling = false false end else call_button_handler @button_handling = false end false end end end