lib/rabbit/renderer/display/drawing-area-primitive.rb in rabbit-2.2.1 vs lib/rabbit/renderer/display/drawing-area-primitive.rb in rabbit-3.0.0
- old
+ new
@@ -22,16 +22,25 @@
clear_compiled_slides
init_drawing_area
end
def attach_to(window, container=nil)
- init_gl(@area)
super
+
+ set_configure_event
+
+ init_gl(@area)
end
def detach
finalize_gl
+
+ if !@window.destroyed? and @configure_signal_id
+ @window.signal_handler_disconnect(@configure_signal_id)
+ @configure_signal_id = nil
+ end
+
super
end
def widget
@area
@@ -130,29 +139,18 @@
end
end
def mapped(widget)
set_drawable(widget.window)
- prepare_renderer(@drawable)
end
def set_draw
- stop_events = false
- if @area.class.signals.include?("draw")
- @area.signal_connect("draw") do |widget, context|
- init_context(context)
- draw(widget)
- finish_renderer
- stop_events
- end
- else
- @area.signal_connect("expose_event") do |widget, event|
- init_renderer(@drawable)
- draw(widget)
- finish_renderer
- stop_events
- end
+ @area.signal_connect("draw") do |widget, context|
+ init_context(context)
+ draw(widget)
+ finish_renderer
+ Gdk::Event::PROPAGATE
end
end
def draw(widget)
draw_current_slide
@@ -168,10 +166,24 @@
@canvas.logger.warn($!)
end
end
end
+ def set_configure_event
+ id = @window.signal_connect("configure_event") do |widget, event|
+ configured(event.x, event.y, event.width, event.height)
+ false
+ end
+ @configure_signal_id = id
+ end
+
+ def configured(x, y, w, h)
+ @real_width = @drawable.width
+ @real_height = @drawable.height
+ @size_dirty = true
+ end
+
def set_configure_event_after
prev_x = prev_y = prev_width = prev_height = nil
@area.signal_connect_after("configure_event") do |widget, event|
prev_x ||= event.x
prev_y ||= event.y
@@ -188,10 +200,11 @@
false
end
end
def configured_after(widget, event)
+ update_size(event.width, event.height)
reload_theme if @drawable
end
def reload_theme(&callback)
callback ||= Utils.process_pending_events_proc
@@ -214,22 +227,22 @@
@compiled_slides[slide] = true
slide.draw(@canvas, true)
end
def grab
- Gtk.grab_add(@area)
+ @area.grab_add
Gdk.pointer_grab(@area.window, false,
Gdk::EventMask::BUTTON_PRESS_MASK |
Gdk::EventMask::BUTTON_RELEASE_MASK |
Gdk::EventMask::SCROLL_MASK |
Gdk::EventMask::POINTER_MOTION_MASK,
nil, nil,
- Gdk::Event::CURRENT_TIME)
+ Gdk::CURRENT_TIME)
end
def ungrab
- Gtk.grab_remove(@area)
- Gdk.pointer_ungrab(Gdk::Event::CURRENT_TIME)
+ @area.grab_remove
+ Gdk.pointer_ungrab(Gdk::CURRENT_TIME)
end
def pointer
window, x, y, mask = @area.window.pointer
[x, y, mask]