Fix fallback render nodes

We were allocating a surface thats big enough for the clip, and
we were setting the transform for that, but then GtkContainer
was overriding the transform with the one for the allocation.
Also, we were drawing at the clip position, not the allocation
position.
This commit is contained in:
Matthias Clasen 2016-08-04 01:05:14 -04:00 committed by Emmanuele Bassi
parent 7b204b0eea
commit e7c7932d72

View File

@ -15849,10 +15849,12 @@ gtk_widget_get_render_node (GtkWidget *widget,
graphene_point3d_t tmp;
graphene_rect_t bounds;
GtkAllocation clip;
GtkAllocation alloc;
gtk_widget_get_clip (widget, &clip);
gtk_widget_get_allocation (widget, &alloc);
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));
graphene_matrix_init_translate (&m, graphene_point3d_init (&tmp, alloc.x, alloc.y, 0.f));
/* Compatibility mode: if the widget does not have a render node, we draw
* using gtk_widget_draw() on a temporary node
@ -15862,6 +15864,7 @@ gtk_widget_get_render_node (GtkWidget *widget,
GskRenderNode *tmp;
cairo_t *cr;
char *str;
graphene_point3d_t p;
str = g_strconcat ("Fallback<", G_OBJECT_TYPE_NAME (widget), ">", NULL);
@ -15870,6 +15873,8 @@ gtk_widget_get_render_node (GtkWidget *widget,
gsk_render_node_set_bounds (tmp, &bounds);
gsk_render_node_set_transform (tmp, &m);
cr = gsk_render_node_get_draw_context (tmp);
cairo_translate (cr, alloc.x - clip.x, alloc.y - clip.y);
gsk_render_node_set_offset (tmp, graphene_point3d_init (&p, clip.x - alloc.x, clip.y - alloc.y, 0.f));
gtk_widget_draw (widget, cr);