diff options
author | Emmanuele Bassi <ebassi@gnome.org> | 2016-07-05 11:58:44 +0100 |
---|---|---|
committer | Emmanuele Bassi <ebassi@gnome.org> | 2016-07-05 11:58:44 +0100 |
commit | 4470d7d26949c96599a998b86ba92f07022524d4 (patch) | |
tree | 87fc3c783da7782c9ae13e773e4523aebc3c69bf | |
parent | d810989cfd166e843843adbe44d9dfb35e607f3f (diff) | |
download | gtk+-4470d7d26949c96599a998b86ba92f07022524d4.tar.gz |
Ensure that render nodes are translated
The clip rectangle may have non-zero offsets, so we need to ensure that
the GskRenderNode associated to the rendered area is translated by those
same offsets.
-rw-r--r-- | gtk/gtkwidget.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/gtk/gtkwidget.c b/gtk/gtkwidget.c index e0e3086e40..90e0f2616e 100644 --- a/gtk/gtkwidget.c +++ b/gtk/gtkwidget.c @@ -17465,19 +17465,23 @@ gtk_widget_get_render_node (GtkWidget *widget, { GtkWidgetClass *klass = GTK_WIDGET_GET_CLASS (widget); GskRenderNode *node; + graphene_matrix_t m; + graphene_point3d_t tmp; + graphene_rect_t bounds; + GtkAllocation clip; + + gtk_widget_get_clip (widget, &clip); + graphene_rect_init (&bounds, 0, 0, clip.width, clip.height); + graphene_matrix_init_translate (&m, graphene_point3d_init (&tmp, clip.x, clip.y, 0.f)); if (klass->get_render_node == NULL) { GskRenderNode *tmp; - graphene_rect_t bounds; - GtkAllocation clip; cairo_t *cr; - gtk_widget_get_clip (widget, &clip); - graphene_rect_init (&bounds, clip.x, clip.y, clip.width, clip.height); - tmp = gsk_render_node_new (); gsk_render_node_set_bounds (tmp, &bounds); + gsk_render_node_set_transform (tmp, &m); cr = gsk_render_node_get_draw_context (tmp); gtk_widget_draw (widget, cr); @@ -17494,16 +17498,12 @@ gtk_widget_get_render_node (GtkWidget *widget, g_signal_has_handler_pending (widget, widget_signals[DRAW], 0, FALSE)) { GskRenderNode *tmp; - graphene_rect_t bounds; - GtkAllocation clip; gboolean result; cairo_t *cr; - gtk_widget_get_clip (widget, &clip); - graphene_rect_init (&bounds, clip.x, clip.y, clip.width, clip.height); - tmp = gsk_render_node_new (); gsk_render_node_set_bounds (tmp, &bounds); + gsk_render_node_set_transform (tmp, &m); cr = gsk_render_node_get_draw_context (tmp); if (g_signal_has_handler_pending (widget, widget_signals[DRAW], 0, FALSE)) |