[dia/cairo-port: 52/53] Resolve an annoying gtk2 vs 3 ABI issue that was causing a blank canvas
- From: Zander <zbrown src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [dia/cairo-port: 52/53] Resolve an annoying gtk2 vs 3 ABI issue that was causing a blank canvas
- Date: Sat, 11 May 2019 15:36:38 +0000 (UTC)
commit 6830485cee2f3194cc62aa7678e38b7ceb130000
Author: Zander Brown <zbrown gnome org>
Date: Sat May 11 16:25:56 2019 +0100
Resolve an annoying gtk2 vs 3 ABI issue that was causing a blank canvas
app/interface.c | 16 ++++++++++------
lib/renderer/diacairo-interactive.c | 30 +++++++++++++++++++++++++++++-
2 files changed, 39 insertions(+), 7 deletions(-)
---
diff --git a/app/interface.c b/app/interface.c
index 8111f896..381448d1 100644
--- a/app/interface.c
+++ b/app/interface.c
@@ -387,12 +387,16 @@ canvas_configure_event (GtkWidget *widget,
static gboolean
canvas_expose_event (GtkWidget *widget,
- GdkEventExpose *event,
- DDisplay *ddisp)
+ GdkEventExpose *event,
+ DDisplay *ddisp)
{
GSList *l;
Rectangle *r, totrect;
DiaInteractiveRendererInterface *renderer;
+ GtkAllocation alloc;
+ cairo_t *ctx;
+
+ ctx = gdk_cairo_create (gtk_widget_get_window (widget));
g_return_val_if_fail (ddisp->renderer != NULL, FALSE);
@@ -435,10 +439,10 @@ canvas_expose_event (GtkWidget *widget,
ddisplay_render_pixmap(ddisp, &totrect);
}
- dia_interactive_renderer_paint (ddisp->renderer,
- ctx,
- gtk_widget_get_allocated_width (widget),
- gtk_widget_get_allocated_height (widget));
+ gtk_widget_get_allocation (widget, &alloc);
+
+ dia_interactive_renderer_paint (ddisp->renderer, ctx,
+ alloc.width, alloc.height);
return FALSE;
}
diff --git a/lib/renderer/diacairo-interactive.c b/lib/renderer/diacairo-interactive.c
index 0c77f751..1ae3ffd4 100644
--- a/lib/renderer/diacairo-interactive.c
+++ b/lib/renderer/diacairo-interactive.c
@@ -344,6 +344,30 @@ dia_cairo_interactive_renderer_get_type (void)
return object_type;
}
+/*
+ * Taken from gtk-3-24 as gtk2 gdk_cairo_region uses GdkRegion
+ *
+ * TODO: Use gtk3 implementation
+ */
+static void
+_gdk_cairo_region (cairo_t *cr,
+ const cairo_region_t *region)
+{
+ cairo_rectangle_int_t box;
+ gint n_boxes, i;
+
+ g_return_if_fail (cr != NULL);
+ g_return_if_fail (region != NULL);
+
+ n_boxes = cairo_region_num_rectangles (region);
+
+ for (i = 0; i < n_boxes; i++)
+ {
+ cairo_region_get_rectangle (region, i, &box);
+ cairo_rectangle (cr, box.x, box.y, box.width, box.height);
+ }
+}
+
static void
begin_render(DiaRenderer *self, const Rectangle *update)
{
@@ -351,11 +375,15 @@ begin_render(DiaRenderer *self, const Rectangle *update)
DiaCairoRenderer *base_renderer = DIA_CAIRO_RENDERER (self);
g_return_if_fail (base_renderer->cr == NULL);
+ if (base_renderer->surface) {
+ cairo_surface_destroy (base_renderer->surface);
+ base_renderer->surface = NULL;
+ }
base_renderer->cr = cairo_create (renderer->surface);
/* Setup clipping for this sequence of render operations */
/* Must be done before the scaling because the clip is in pixel coords */
- gdk_cairo_region (base_renderer->cr, renderer->clip_region);
+ _gdk_cairo_region (base_renderer->cr, renderer->clip_region);
cairo_clip(base_renderer->cr);
cairo_scale (base_renderer->cr, *renderer->zoom_factor, *renderer->zoom_factor);
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]