[gtk+/wip/alexl/broadway4: 94/96] broadway: Handle cairo nodes
- From: Alexander Larsson <alexl src gnome org>
- To: commits-list gnome org
- Cc: 
- Subject: [gtk+/wip/alexl/broadway4: 94/96] broadway: Handle cairo nodes
- Date: Thu, 23 Nov 2017 09:54:10 +0000 (UTC)
commit 12d3cd8f29504b35c7bdf794b3dc8abf03f3f0f0
Author: Alexander Larsson <alexl redhat com>
Date:   Wed Nov 22 23:42:29 2017 +0100
    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.
 gsk/gskbroadwayrenderer.c |   19 +++++++++++++++++++
 1 files changed, 19 insertions(+), 0 deletions(-)
---
diff --git a/gsk/gskbroadwayrenderer.c b/gsk/gskbroadwayrenderer.c
index ab62813..0ed849c 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;
[
Date Prev][
Date Next]   [
Thread Prev][
Thread Next]   
[
Thread Index]
[
Date Index]
[
Author Index]