diff options
author | Alexander Larsson <alexl@redhat.com> | 2017-11-22 23:42:29 +0100 |
---|---|---|
committer | Alexander Larsson <alexl@redhat.com> | 2017-11-23 10:48:29 +0100 |
commit | 12d3cd8f29504b35c7bdf794b3dc8abf03f3f0f0 (patch) | |
tree | bd50a7ab03f0b1368e68426f95db2758715de0d1 /gsk/gskbroadwayrenderer.c | |
parent | 4d1eca0d57b855b2a8d29d2076615938eca34ba9 (diff) | |
download | gtk+-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.c | 19 |
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; |