[gtk/modern-testsuite: 8/9] tests: Update rendernode test to use textures




commit cb0e32ebc926def1616cc9f82bead7615d46ad7a
Author: Benjamin Otte <otte redhat com>
Date:   Wed Sep 15 17:21:24 2021 +0200

    tests: Update rendernode test to use textures

 tests/rendernode.c | 39 +++++++++++++++++++++------------------
 1 file changed, 21 insertions(+), 18 deletions(-)
---
diff --git a/tests/rendernode.c b/tests/rendernode.c
index d0e3230663..c1cbd65e39 100644
--- a/tests/rendernode.c
+++ b/tests/rendernode.c
@@ -49,6 +49,7 @@ main(int argc, char **argv)
   gsize len;
   int run;
   GOptionContext *context;
+  GdkTexture *texture;
 
   context = g_option_context_new ("NODE-FILE PNG-FILE");
   g_option_context_add_main_entries (context, options, NULL);
@@ -109,9 +110,16 @@ main(int argc, char **argv)
     {
       graphene_rect_t bounds;
       cairo_t *cr;
+      int width, height, stride;
+      guchar *pixels;
 
       gsk_render_node_get_bounds (node, &bounds);
-      surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, ceil (bounds.size.width), ceil 
(bounds.size.height));
+      width = ceil (bounds.size.width);
+      height = ceil (bounds.size.height);
+      stride = width * 4;
+      pixels = g_malloc0_n (stride, height);
+
+      surface = cairo_image_surface_create_for_data (pixels, CAIRO_FORMAT_ARGB32, width, height, stride);
       cr = cairo_create (surface);
 
       cairo_translate (cr, - bounds.origin.x, - bounds.origin.y);
@@ -132,12 +140,19 @@ main(int argc, char **argv)
         }
 
       cairo_destroy (cr);
+      cairo_surface_destroy (surface);
+
+      bytes = g_bytes_new_take (pixels, stride * height);
+      texture = gdk_memory_texture_new (width, height,
+                                        GDK_MEMORY_DEFAULT,
+                                        bytes,
+                                        stride);
+      g_bytes_unref (bytes);
     }
   else
     {
       GskRenderer *renderer;
       GdkSurface *window;
-      GdkTexture *texture = NULL;
 
       window = gdk_surface_new_toplevel (gdk_display_get_default());
       renderer = gsk_renderer_new_for_surface (window);
@@ -153,15 +168,7 @@ main(int argc, char **argv)
             g_print ("Run %u: Rendered using %s in %.4gs\n", run, G_OBJECT_TYPE_NAME (renderer), (double) 
(end - start) / G_USEC_PER_SEC);
         }
 
-      surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
-                                            gdk_texture_get_width (texture),
-                                            gdk_texture_get_height (texture));
-      gdk_texture_download (texture,
-                            cairo_image_surface_get_data (surface),
-                            cairo_image_surface_get_stride (surface));
-      cairo_surface_mark_dirty (surface);
       gsk_renderer_unrealize (renderer);
-      g_object_unref (texture);
       g_object_unref (window);
       g_object_unref (renderer);
     }
@@ -170,19 +177,15 @@ main(int argc, char **argv)
 
   if (argc > 2)
     {
-      cairo_status_t status;
-      
-      status = cairo_surface_write_to_png (surface, argv[2]);
-
-      if (status != CAIRO_STATUS_SUCCESS)
+      if (!gdk_texture_save_to_png (texture, argv[2]))
         {
-          cairo_surface_destroy (surface);
-          g_print ("Failed to save PNG file: %s\n", cairo_status_to_string (status));
+          g_object_unref (texture);
+          g_print ("Failed to save PNG file\n");
           return 1;
         }
     }
 
-  cairo_surface_destroy (surface);
+  g_object_unref (texture);
 
   return 0;
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]