summaryrefslogtreecommitdiff
path: root/gsk/gskbroadwayrenderer.c
diff options
context:
space:
mode:
authorAlexander Larsson <alexl@redhat.com>2017-11-22 23:42:29 +0100
committerAlexander Larsson <alexl@redhat.com>2017-11-23 10:48:29 +0100
commit12d3cd8f29504b35c7bdf794b3dc8abf03f3f0f0 (patch)
treebd50a7ab03f0b1368e68426f95db2758715de0d1 /gsk/gskbroadwayrenderer.c
parent4d1eca0d57b855b2a8d29d2076615938eca34ba9 (diff)
downloadgtk+-12d3cd8f29504b35c7bdf794b3dc8abf03f3f0f0.tar.gz
broadway: Handle cairo nodes
This means we can directly upload these as textures, rather than create a new surface and draw it into that. We still have to upload, but there isn't a lot we can do about this as for these nodes we generally redraw everything each time.
Diffstat (limited to 'gsk/gskbroadwayrenderer.c')
-rw-r--r--gsk/gskbroadwayrenderer.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/gsk/gskbroadwayrenderer.c b/gsk/gskbroadwayrenderer.c
index ab6281350e..0ed849ca69 100644
--- a/gsk/gskbroadwayrenderer.c
+++ b/gsk/gskbroadwayrenderer.c
@@ -492,6 +492,25 @@ gsk_broadway_renderer_add_node (GskRenderer *self,
}
return;
+ case GSK_CAIRO_NODE:
+ {
+ const cairo_surface_t *surface = gsk_cairo_node_peek_surface (node);
+ GdkTexture *texture;
+ guint32 texture_id;
+
+ texture = gdk_texture_new_for_surface ((cairo_surface_t *)surface);
+ g_ptr_array_add (node_textures, g_object_ref (texture)); /* Transfers ownership to node_textures */
+ texture_id = gdk_broadway_display_ensure_texture (display, texture);
+
+ add_uint32 (nodes, BROADWAY_NODE_TEXTURE);
+ add_float (nodes, node->bounds.origin.x);
+ add_float (nodes, node->bounds.origin.y);
+ add_float (nodes, node->bounds.size.width);
+ add_float (nodes, node->bounds.size.height);
+ add_uint32 (nodes, texture_id);
+ }
+ return;
+
case GSK_CONTAINER_NODE:
{
guint i;