{
/* these are the events we want to know about */
add_events (Gdk::BUTTON_PRESS_MASK | Gdk::BUTTON_RELEASE_MASK | Gdk::POINTER_MOTION_MASK |
- Gdk::SCROLL_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK);
+ Gdk::SCROLL_MASK | Gdk::ENTER_NOTIFY_MASK | Gdk::LEAVE_NOTIFY_MASK |
+ Gdk::KEY_PRESS_MASK | Gdk::KEY_RELEASE_MASK);
}
void
/* draw background color */
- draw_context->save ();
draw_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height);
- draw_context->clip ();
- draw_context->set_operator (Cairo::OPERATOR_SOURCE);
+ draw_context->clip_preserve ();
set_source_rgba (draw_context, _bg_color);
- draw_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height);
draw_context->fill ();
- draw_context->restore ();
/* render canvas */
render (Rect (ev->area.x, ev->area.y, ev->area.x + ev->area.width, ev->area.y + ev->area.height), draw_context);
-#ifdef USE_CAIRO_IMAGE_SURFACE_FOR_GTK_CANVAS
+#ifdef USE_CAIRO_IMAGE_SURFACE
/* now blit our private surface back to the GDK one */
window_context->rectangle (ev->area.x, ev->area.y, ev->area.width, ev->area.height);
return deliver_event (reinterpret_cast<GdkEvent*>(©));
}
+/** Handler for GDK key press events.
+ * @param ev Event.
+ * @return true if the event was handled.
+ */
+bool
+GtkCanvas::on_key_press_event (GdkEventKey* ev)
+{
+ DEBUG_TRACE (PBD::DEBUG::CanvasEvents, "canvas key press\n");
+ return deliver_event (reinterpret_cast<GdkEvent*>(ev));
+}
+
+/** Handler for GDK key release events.
+ * @param ev Event.
+ * @return true if the event was handled.
+ */
+bool
+GtkCanvas::on_key_release_event (GdkEventKey* ev)
+{
+ DEBUG_TRACE (PBD::DEBUG::CanvasEvents, "canvas key release\n");
+ return deliver_event (reinterpret_cast<GdkEvent*>(ev));
+}
+
/** Handler for GDK button press events.
* @param ev Event.
* @return true if the event was handled.