class Rabbit::Renderer::Display::ClutterEmbed
Attributes
filename[RW]
Public Class Methods
new(canvas)
click to toggle source
Calls superclass method
Rabbit::Renderer::Display::Magnifier::new
# File lib/rabbit/renderer/display/clutter-embed.rb, line 63 def initialize(canvas) @recreate_id = nil @need_reload_theme = false super @filename = nil init_clutter_embed end
priority()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 40 def priority 0 end
Public Instance Methods
attach_to(window, container=nil)
click to toggle source
Calls superclass method
Rabbit::Renderer::Display::Magnifier#attach_to
# File lib/rabbit/renderer/display/clutter-embed.rb, line 211 def attach_to(window, container=nil) super init_menu add_widgets_to_container(@container) widget.show attach_menu(@window) attach_key(@window) end
cache_all_slides()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 246 def cache_all_slides end
clear_slide()
click to toggle source
Calls superclass method
# File lib/rabbit/renderer/display/clutter-embed.rb, line 82 def clear_slide super redraw end
detach()
click to toggle source
Calls superclass method
Rabbit::Renderer::Display::Base#detach
# File lib/rabbit/renderer/display/clutter-embed.rb, line 221 def detach detach_key(@window) detach_menu(@window) widget.hide unless @window.destroyed? remove_widgets_from_container(@container) end super end
display?()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 198 def display? true end
index_mode_off()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 170 def index_mode_off restore_cursor(:index) end
index_mode_on()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 165 def index_mode_on keep_cursor(:index) update_cursor(nil, true) end
post_apply_theme()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 99 def post_apply_theme recreate_actors end
post_fullscreen()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 87 def post_fullscreen update_cursor(:blank, true) end
post_iconify()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 96 def post_iconify end
post_move(old_index, index)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 103 def post_move(old_index, index) update_title update_menu old_actor = retrieve_actor(old_index) old_actor.hide if old_actor actor = retrieve_actor(index) if actor and !hiding? actor.content.set_size(actor.width, actor.height) actor.show actor.raise_top if old_actor transition = @canvas.slides[index].transition transition_method = "transition_#{transition}" if transition and respond_to?(transition_method, true) send(transition_method, old_actor, actor, old_index, index) end end end end
post_move_in_slide(old_index, index)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 124 def post_move_in_slide(old_index, index) actor = retrieve_actor(nil, old_index) actor.hide if actor actor = retrieve_actor(nil, index) if actor and !hiding? actor.content.set_size(actor.width, actor.height) actor.show actor.raise_top end end
post_parse()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 138 def post_parse clear_button_handler update_title update_menu if @need_reload_theme @need_reload_theme = false reload_theme end end
post_to_pixbuf(canceled)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 162 def post_to_pixbuf(canceled) end
post_toggle_index_mode()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 151 def post_toggle_index_mode recreate_actors end
post_unfullscreen()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 91 def post_unfullscreen update_cursor(nil, true) update_menu end
pre_parse()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 135 def pre_parse end
pre_to_pixbuf(slide_size)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 155 def pre_to_pixbuf(slide_size) end
pre_toggle_index_mode()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 148 def pre_toggle_index_mode end
redraw()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 75 def redraw actor = current_actor # TODO: We need more work for periodical redraw actor.content.invalidate if actor widget.queue_draw end
reload_theme(&callback)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 202 def reload_theme(&callback) if @canvas.applying? @need_reload_theme = true else callback ||= Utils.process_pending_events_proc @canvas.activate("ReloadTheme", &callback) end end
reset_adjustment()
click to toggle source
Calls superclass method
# File lib/rabbit/renderer/display/clutter-embed.rb, line 232 def reset_adjustment super @actors.each do |slide_actors| slide_actors.each do |actor| actor.x = 0 actor.y = 0 actor.set_scale(1, 1) actor.set_rotation(Clutter::X_AXIS, 0, 0, 0, 0) actor.set_rotation(Clutter::Y_AXIS, 0, 0, 0, 0) actor.set_rotation(Clutter::Z_AXIS, 0, 0, 0, 0) end end end
to_pixbufing(i)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 158 def to_pixbufing(i) true end
toggle_blackout()
click to toggle source
Calls superclass method
Rabbit::Renderer::Display::Base#toggle_blackout
# File lib/rabbit/renderer/display/clutter-embed.rb, line 186 def toggle_blackout super if blackouting? @stage.color = Clutter::Color.parse("black") current_actor.hide else reset_stage_color current_actor.show end redraw end
toggle_whiteout()
click to toggle source
Calls superclass method
Rabbit::Renderer::Display::Base#toggle_whiteout
# File lib/rabbit/renderer/display/clutter-embed.rb, line 174 def toggle_whiteout super if whiteouting? @stage.color = Clutter::Color.parse("white") current_actor.hide else reset_stage_color current_actor.show end redraw end
widget()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 71 def widget @embed end
Private Instance Methods
add_widgets_to_container(container)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 250 def add_widgets_to_container(container) container.add(@embed) end
configured(x, y, w, h)
click to toggle source
Calls superclass method
Rabbit::Renderer::Display::Search#configured
# File lib/rabbit/renderer/display/clutter-embed.rb, line 326 def configured(x, y, w, h) super recreate_actors end
configured_after(widget, event)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 337 def configured_after(widget, event) @real_width = event.width @real_height = event.height @size_dirty = true reload_theme if @drawable false end
current_actor()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 466 def current_actor retrieve_actor end
depth()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 293 def depth @embed.window.depth end
draw_nth_slide(index=nil, index_in_slide=nil)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 297 def draw_nth_slide(index=nil, index_in_slide=nil) index ||= @canvas.current_index slide = @canvas.slides[index] if slide old_index_in_slide = slide.drawing_index slide.drawing_index = index_in_slide if index_in_slide begin slide.draw(@canvas, true) slide.draw(@canvas, false) ensure slide.drawing_index = old_index_in_slide end end end
grab()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 528 def grab @embed.grab_add Gdk.pointer_grab(@embed.window, false, Gdk::EventMask::BUTTON_PRESS_MASK | Gdk::EventMask::BUTTON_RELEASE_MASK | Gdk::EventMask::SCROLL_MASK | Gdk::EventMask::POINTER_MOTION_MASK, nil, nil, Gdk::CURRENT_TIME) end
init_clutter_embed()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 268 def init_clutter_embed @embed = ClutterGtk::Embed.new @embed.can_focus = true @stage = @embed.stage reset_stage_color set_map set_draw set_configure_event_after event_mask = Gdk::EventMask::BUTTON_PRESS_MASK event_mask |= Gdk::EventMask::BUTTON_RELEASE_MASK event_mask |= Gdk::EventMask::BUTTON1_MOTION_MASK event_mask |= Gdk::EventMask::BUTTON2_MOTION_MASK event_mask |= Gdk::EventMask::BUTTON3_MOTION_MASK @embed.add_events(event_mask) set_key_press_event(@embed) set_button_event(@embed) set_motion_notify_event set_scroll_event end
init_color()
click to toggle source
Calls superclass method
# File lib/rabbit/renderer/display/clutter-embed.rb, line 258 def init_color super init_engine_color end
init_dpi()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 263 def init_dpi @x_dpi = ScreenInfo.screen_x_resolution @y_dpi = ScreenInfo.screen_y_resolution end
pointer()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 544 def pointer window, x, y, mask = @embed.window.pointer [x, y, mask] end
recreate_actors()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 470 def recreate_actors if @recreate_id GLib::Source.remove(@recreate_id) @recreate_id = nil end index = nil index_in_slide = 0 @actors = [] @stage.remove_all @recreate_id = GLib::Idle.add do i = index || @canvas.current_index slide_actors = @actors[i] || [] actor = slide_actors[index_in_slide] slide = @canvas.slides[i] if actor.nil? canvas = Clutter::Canvas.new canvas.signal_connect(:draw, i, index_in_slide) do |_, context, _width, _height, _i, _index_in_slide| init_context(context) draw_nth_slide(_i, _index_in_slide) finish_context end actor = Clutter::Actor.new actor.instance_variable_set(:@c, canvas) actor.content = canvas actor.set_size(@real_width, @real_height) @actors[i] ||= [] @actors[i][index_in_slide] = actor @stage.add_child(actor) current_index_in_slide = index_in_slide == slide.drawing_index if index.nil? and current_index_in_slide and !hiding? canvas.set_size(@real_width, @real_height) actor.show actor.raise_top Utils.process_pending_events_proc.call else actor.hide end end slide = @canvas.slides[i] if slide and slide.last?(index_in_slide) index = -1 if index.nil? index += 1 index_in_slide = 0 have_next = index < @canvas.slide_size else index_in_slide += 1 have_next = true end unless have_next @recreate_id = nil end have_next end end
remove_widgets_from_container(container)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 254 def remove_widgets_from_container(container) container.remove(@embed) end
reset_stage_color()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 289 def reset_stage_color @stage.color = Clutter::Color.parse("black") end
retrieve_actor(index=nil, index_in_slide=nil)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 453 def retrieve_actor(index=nil, index_in_slide=nil) index ||= index || @canvas.current_index slide_actors = @actors[index] return nil if slide_actors.nil? if index_in_slide.nil? slide = @canvas.slides[index] return nil if slide.nil? index_in_slide = slide.drawing_index end slide_actors[index_in_slide] end
set_configure_event_after()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 331 def set_configure_event_after @embed.signal_connect_after("configure_event") do |widget, event| configured_after(widget, event) end end
set_draw()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 319 def set_draw @embed.signal_connect("draw") do |widget, context| reload_source false end end
set_map()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 312 def set_map @embed.signal_connect("map") do |widget, event| set_drawable(widget.window) false end end
set_motion_notify_event()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 345 def set_motion_notify_event @embed.signal_connect("motion_notify_event") do |widget, event| call_hook_procs(@motion_notify_hook_procs, event) end begin_x = nil begin_y = nil prev_x = nil prev_y = nil start_time = nil handled = false scale = 1.0 axis_x = 0.5 axis_y = 0.5 add_button_press_hook do |event| handled = false start_time = event.time begin_x = prev_x = event.x begin_y = prev_y = event.y false end add_motion_notify_hook do |event| state = event.state if state.button2_mask? handled = true processed = true x = event.x.to_f y = event.y.to_f w = width.to_f h = height.to_f actor = current_actor if state.control_mask? scale += (y - prev_y) / (h / 4) actor.x = (actor.width / 2) * (1 - scale) actor.y = (actor.height / 2) * (1 - scale) actor.set_scale(scale, scale) elsif state.shift_mask? angle_x, = actor.get_rotation(Clutter::X_AXIS) angle_y, = actor.get_rotation(Clutter::Y_AXIS) angle_z, = actor.get_rotation(Clutter::Z_AXIS) delta_x = prev_x - x delta_y = y - prev_y if delta_x.abs < 3 or delta_y.abs < 3 if delta_y.abs > delta_x.abs angle_x += delta_y else angle_y += delta_x end else delta_z = Math.sqrt(delta_x ** 2 + delta_y ** 2) delta_z *= (delta_x / delta_x) * (delta_y / delta_y) angle_z += delta_z end actor.set_rotation(Clutter::X_AXIS, angle_x, 0, actor.height * axis_y, 0) actor.set_rotation(Clutter::Y_AXIS, angle_y, actor.width * axis_x, 0, 0) actor.set_rotation(Clutter::Z_AXIS, angle_z, actor.width * axis_x, actor.height * axis_y, 0) else processed = false end if processed and event.time > start_time + 100 start_time = event.time end end prev_x = x prev_y = y false end add_button_release_hook do |event, last_button_press_event| handled end end
set_scroll_event()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 435 def set_scroll_event @embed.signal_connect("scroll_event") do |widget, event| handled = call_hook_procs(@scroll_hook_procs, event) unless handled handled = true case event.direction when Gdk::ScrollDirection::UP @canvas.activate("PreviousSlide") when Gdk::ScrollDirection::DOWN @canvas.activate("NextSlide") else handled = false end end handled end end
transition_small_and_slide_out(old_actor, actor, old_index, index)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 574 def transition_small_and_slide_out(old_actor, actor, old_index, index) old_actor.show old_actor.raise_top n = 180 half = 90 scale = 1 GLib::Timeout.add(1000 / n) do if n > half old_actor.x = (old_actor.width / 2) * (1 - scale) old_actor.y = (old_actor.height / 2) * (1 - scale) old_actor.set_scale(scale, scale) scale -= 0.5 / half else delta = old_actor.width / half delta *= -1 if old_index < index old_actor.x += delta end n -= 1 if n.zero? old_actor.hide old_actor.x = 0 old_actor.y = 0 old_actor.set_scale(1, 1) actor.show end not n.zero? end end
transition_turn_over(old_actor, actor, old_index, index)
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 549 def transition_turn_over(old_actor, actor, old_index, index) old_actor.show old_actor.raise_top n = 90 if old_index > index angle_sign = -1 x = old_actor.width else angle_sign = 1 x = 0 end GLib::Timeout.add(1000 / n) do angle = (n - 90) * angle_sign old_actor.set_rotation(Clutter::Y_AXIS, angle, x, 0, 0) n -= 1 if n.zero? old_actor.hide old_actor.set_rotation(Clutter::Y_AXIS, 0, 0, 0, 0) actor.show end not n.zero? end end
ungrab()
click to toggle source
# File lib/rabbit/renderer/display/clutter-embed.rb, line 539 def ungrab @embed.grab_remove Gdk.pointer_ungrab(Gdk::CURRENT_TIME) end