diff options
| author | Alex Valavanis <valavanisalex@gmail.com> | 2012-06-09 22:30:41 +0000 |
|---|---|---|
| committer | Alex Valavanis <valavanisalex@gmail.com> | 2012-06-09 22:30:41 +0000 |
| commit | 9c34d431683bae0078f7f4cdae9da9026f0c783b (patch) | |
| tree | 0d35cb005d36b037aa43d28c3c1321eec75ebe01 /src/display/sp-canvas.cpp | |
| parent | Gtk+ 3 drawing fixes for PDF input dialogs (diff) | |
| download | inkscape-9c34d431683bae0078f7f4cdae9da9026f0c783b.tar.gz inkscape-9c34d431683bae0078f7f4cdae9da9026f0c783b.zip | |
Gtk+ 3 drawing in sp-canvas
(bzr r11482)
Diffstat (limited to 'src/display/sp-canvas.cpp')
| -rw-r--r-- | src/display/sp-canvas.cpp | 26 |
1 files changed, 25 insertions, 1 deletions
diff --git a/src/display/sp-canvas.cpp b/src/display/sp-canvas.cpp index d53394593..a44e9eef8 100644 --- a/src/display/sp-canvas.cpp +++ b/src/display/sp-canvas.cpp @@ -290,7 +290,11 @@ public: * * @todo FIXME: function allways retruns false. */ +#if GTK_CHECK_VERSION(3,0,0) + static gboolean handleDraw(GtkWidget *widget, cairo_t *cr); +#else static gint handleExpose(GtkWidget *widget, GdkEventExpose *event); +#endif /** * The canvas widget's keypress callback. @@ -1233,8 +1237,10 @@ void SPCanvasImpl::classInit(SPCanvasClass *klass) #if GTK_CHECK_VERSION(3,0,0) widget_class->get_preferred_width = SPCanvasImpl::getPreferredWidth; widget_class->get_preferred_height = SPCanvasImpl::getPreferredHeight; + widget_class->draw = SPCanvasImpl::handleDraw; #else widget_class->size_request = SPCanvasImpl::sizeRequest; + widget_class->expose_event = SPCanvasImpl::handleExpose; #endif widget_class->size_allocate = SPCanvasImpl::sizeAllocate; @@ -1242,7 +1248,6 @@ void SPCanvasImpl::classInit(SPCanvasClass *klass) widget_class->button_release_event = SPCanvasImpl::button; widget_class->motion_notify_event = SPCanvasImpl::handleMotion; widget_class->scroll_event = SPCanvasImpl::handleScroll; - widget_class->expose_event = SPCanvasImpl::handleExpose; widget_class->key_press_event = SPCanvasImpl::handleKeyEvent; widget_class->key_release_event = SPCanvasImpl::handleKeyEvent; widget_class->enter_notify_event = SPCanvasImpl::handleCrossing; @@ -2110,6 +2115,23 @@ void SPCanvas::endForcedFullRedraws() forced_redraw_limit = -1; } +#if GTK_CHECK_VERSION(3,0,0) + +//TODO: This could probably be done much more efficiently +gboolean SPCanvasImpl::handleDraw(GtkWidget *widget, cairo_t *cr) { + SPCanvas *canvas = SP_CANVAS(widget); + gint width = gtk_widget_get_allocated_width(widget); + gint height = gtk_widget_get_allocated_height(widget); + + Geom::IntRect r = Geom::IntRect::from_xywh( + canvas->x0, canvas->y0, + width, height); + + canvas->requestRedraw(r.left(), r.top(), r.right(), r.bottom()); + + return FALSE; +} +#else gint SPCanvasImpl::handleExpose(GtkWidget *widget, GdkEventExpose *event) { SPCanvas *canvas = SP_CANVAS(widget); @@ -2157,6 +2179,8 @@ gint SPCanvasImpl::handleExpose(GtkWidget *widget, GdkEventExpose *event) return FALSE; } } +#endif + gint SPCanvasImpl::handleKeyEvent(GtkWidget *widget, GdkEventKey *event) { |
