summaryrefslogtreecommitdiff
path: root/tests/rendernode.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2016-12-22 18:58:55 +0100
committerBenjamin Otte <otte@redhat.com>2016-12-23 08:11:01 +0100
commitb0d5224de578dad2b0ca225cd2c8b3f640b2a14c (patch)
treec57c5eb3fcb5348f9b4170059997dda42e61d389 /tests/rendernode.c
parent6c5679314742f33076c46398583baff5ed4a1902 (diff)
downloadgtk+-b0d5224de578dad2b0ca225cd2c8b3f640b2a14c.tar.gz
tests: Use gsk_renderer_render_texture()
Only keep the version that calls gsk_render_node_draw() if people specify the --fallback option. The actual renderer selection works just as for regular GTK. The easiest way to influence it is setting the GSK_RENDERER environment variable.
Diffstat (limited to 'tests/rendernode.c')
-rw-r--r--tests/rendernode.c45
1 files changed, 37 insertions, 8 deletions
diff --git a/tests/rendernode.c b/tests/rendernode.c
index 70be90db6a..c7d4ed1c95 100644
--- a/tests/rendernode.c
+++ b/tests/rendernode.c
@@ -1,16 +1,17 @@
#include <gtk/gtk.h>
+static gboolean fallback = FALSE;
+
static GOptionEntry options[] = {
+ { "fallback", '\0', 0, G_OPTION_ARG_NONE, &fallback, "Draw node without a renderer", NULL },
{ NULL }
};
int
main(int argc, char **argv)
{
- graphene_rect_t bounds;
cairo_surface_t *surface;
GskRenderNode *node;
- cairo_t *cr;
GError *error = NULL;
GBytes *bytes;
char *contents;
@@ -45,14 +46,42 @@ main(int argc, char **argv)
return 1;
}
- gsk_render_node_get_bounds (node, &bounds);
- surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, ceil (bounds.size.width), ceil (bounds.size.height));
- cr = cairo_create (surface);
+ if (fallback)
+ {
+ graphene_rect_t bounds;
+ cairo_t *cr;
+
+ gsk_render_node_get_bounds (node, &bounds);
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32, ceil (bounds.size.width), ceil (bounds.size.height));
+ cr = cairo_create (surface);
- cairo_translate (cr, - bounds.origin.x, - bounds.origin.y);
- gsk_render_node_draw (node, cr);
+ cairo_translate (cr, - bounds.origin.x, - bounds.origin.y);
+ gsk_render_node_draw (node, cr);
+
+ cairo_destroy (cr);
+ }
+ else
+ {
+ GskRenderer *renderer;
+ GdkWindow *window;
+ GskTexture *texture;
+
+ window = gdk_window_new_toplevel (gdk_display_get_default(), 0, 10 , 10);
+ renderer = gsk_renderer_new_for_window (window);
+
+ texture = gsk_renderer_render_texture (renderer, node, NULL);
+ surface = cairo_image_surface_create (CAIRO_FORMAT_ARGB32,
+ gsk_texture_get_width (texture),
+ gsk_texture_get_height (texture));
+ gsk_texture_download (texture,
+ cairo_image_surface_get_data (surface),
+ cairo_image_surface_get_stride (surface));
+ cairo_surface_mark_dirty (surface);
+ gsk_texture_unref (texture);
+ g_object_unref (window);
+ g_object_unref (renderer);
+ }
- cairo_destroy (cr);
gsk_render_node_unref (node);
if (cairo_surface_write_to_png (surface, argv[2]))