forked from AuroraMiddleware/gtk
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:
parent
7b204b0eea
commit
e7c7932d72
@ -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);
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user