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]