diff options
author | Benjamin Otte <otte@redhat.com> | 2016-12-23 08:08:17 +0100 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2016-12-23 08:11:01 +0100 |
commit | af6e7cc169254bdaf81fb480aa19484cbf702126 (patch) | |
tree | 2c4f738ef4bf19c45b6dcc80b936db438e489765 | |
parent | 4bb0c70c11c4b2af65bc66ca8a8d1c8cecbb7e92 (diff) | |
download | gtk+-af6e7cc169254bdaf81fb480aa19484cbf702126.tar.gz |
tests: Add rendernode-create-tests
Little tool that creates a bunch of test files to throw add the
rendernode binary.
They should really be part of a testsuite, but we have none, so OI just
put them here.
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/rendernode-create-tests.c | 211 |
2 files changed, 213 insertions, 0 deletions
diff --git a/tests/Makefile.am b/tests/Makefile.am index e6bff0a459..71a44795d9 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -28,6 +28,7 @@ endif noinst_PROGRAMS = $(TEST_PROGS) \ rendernode \ + rendernode-create-tests \ overlayscroll \ syncscroll \ animated-resizing \ @@ -163,6 +164,7 @@ noinst_PROGRAMS += testerrors endif rendernode_DEPENDENCIES = $(TEST_DEPS) +rendernode_create_tests_DEPENDENCIES = $(TEST_DEPS) animated_resizing_DEPENDENCIES = $(TEST_DEPS) animated_revealing_DEPENDENCIES = $(TEST_DEPS) flicker_DEPENDENCIES = $(TEST_DEPS) diff --git a/tests/rendernode-create-tests.c b/tests/rendernode-create-tests.c new file mode 100644 index 0000000000..7442c55523 --- /dev/null +++ b/tests/rendernode-create-tests.c @@ -0,0 +1,211 @@ +#include <gtk/gtk.h> + +#include <math.h> + +static void +hsv_to_rgb (GdkRGBA *rgba, + gdouble h, + gdouble s, + gdouble v) +{ + gdouble hue, saturation, value; + gdouble f, p, q, t; + + rgba->alpha = 1.0; + + if ( s == 0.0) + { + rgba->red = v; + rgba->green = v; + rgba->blue = v; /* heh */ + } + else + { + hue = h * 6.0; + saturation = s; + value = v; + + if (hue == 6.0) + hue = 0.0; + + f = hue - (int) hue; + p = value * (1.0 - saturation); + q = value * (1.0 - saturation * f); + t = value * (1.0 - saturation * (1.0 - f)); + + switch ((int) hue) + { + case 0: + rgba->red = value; + rgba->green = t; + rgba->blue = p; + break; + + case 1: + rgba->red = q; + rgba->green = value; + rgba->blue = p; + break; + + case 2: + rgba->red = p; + rgba->green = value; + rgba->blue = t; + break; + + case 3: + rgba->red = p; + rgba->green = q; + rgba->blue = value; + break; + + case 4: + rgba->red = t; + rgba->green = p; + rgba->blue = value; + break; + + case 5: + rgba->red = value; + rgba->green = p; + rgba->blue = q; + break; + + default: + g_assert_not_reached (); + } + } +} + +GskRenderNode * +rounded_borders (guint n) +{ + GskRenderNode *nodes[n]; + GskRenderNode *container; + GskRoundedRect outline; + float widths[4]; + GdkRGBA colors[4]; + guint i; + + for (i = 0; i < n; i++) + { + outline.bounds.size.width = g_random_int_range (20, 1000); + outline.bounds.origin.x = g_random_int_range (0, 1000 - outline.bounds.size.width); + outline.bounds.size.height = g_random_int_range (20, 1000); + outline.bounds.origin.y = g_random_int_range (0, 1000 - outline.bounds.size.height); + outline.corner[0].width = outline.corner[0].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + outline.corner[1].width = outline.corner[1].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + outline.corner[2].width = outline.corner[2].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + outline.corner[3].width = outline.corner[3].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + widths[0] = widths[1] = widths[2] = widths[3] = g_random_int_range (0, 5); + hsv_to_rgb (&colors[0], g_random_double (), 1.0, 1.0); + colors[3] = colors[2] = colors[1] = colors[0]; + nodes[i] = gsk_border_node_new (&outline, widths, colors); + } + + container = gsk_container_node_new (nodes, n); + + for (i = 0; i < n; i++) + gsk_render_node_unref (nodes[i]); + + return container; +} + +GskRenderNode * +rounded_backgrounds (guint n) +{ + GskRenderNode *nodes[n]; + GskRenderNode *container, *texture; + GskRoundedRect outline; + GdkRGBA color; + guint i; + + for (i = 0; i < n; i++) + { + outline.bounds.size.width = g_random_int_range (20, 100); + outline.bounds.origin.x = g_random_int_range (0, 1000 - outline.bounds.size.width); + outline.bounds.size.height = g_random_int_range (20, 100); + outline.bounds.origin.y = g_random_int_range (0, 1000 - outline.bounds.size.height); + outline.corner[0].width = outline.corner[0].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + outline.corner[1].width = outline.corner[1].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + outline.corner[2].width = outline.corner[2].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + outline.corner[3].width = outline.corner[3].height = 10 - (int) sqrt (g_random_int_range (0, 100)); + hsv_to_rgb (&color, g_random_double (), g_random_double_range (0.15, 0.4), g_random_double_range (0.6, 0.85)); + color.alpha = g_random_double_range (0.5, 0.75); + texture = gsk_color_node_new (&color, &outline.bounds); + nodes[i] = gsk_rounded_clip_node_new (texture, &outline); + } + + container = gsk_container_node_new (nodes, n); + + for (i = 0; i < n; i++) + gsk_render_node_unref (nodes[i]); + + return container; +} + +GskRenderNode * +colors (guint n) +{ + GskRenderNode *nodes[10 * n]; + GskRenderNode *container; + graphene_rect_t bounds; + GdkRGBA color; + guint i; + + for (i = 0; i < 10 * n; i++) + { + bounds.size.width = g_random_int_range (20, 100); + bounds.origin.x = g_random_int_range (0, 1000 - bounds.size.width); + bounds.size.height = g_random_int_range (20, 100); + bounds.origin.y = g_random_int_range (0, 1000 - bounds.size.height); + hsv_to_rgb (&color, g_random_double (), g_random_double_range (0.15, 0.4), g_random_double_range (0.6, 0.85)); + color.alpha = g_random_double_range (0.5, 0.75); + nodes[i] = gsk_color_node_new (&color, &bounds); + } + + container = gsk_container_node_new (nodes, 10 * n); + + for (i = 0; i < 10 * n; i++) + gsk_render_node_unref (nodes[i]); + + return container; +} + +int +main (int argc, char **argv) +{ + static const struct { + const char *name; + GskRenderNode * (* func) (guint n); + } functions[] = { + { "colors.node", colors }, + { "rounded-borders.node", rounded_borders }, + { "rounded-backgrounds.node", rounded_backgrounds }, + }; + GError *error = NULL; + GskRenderNode *node; + guint i, n; + + gtk_init (&argc, &argv); + + if (argc > 1) + n = atoi (argv[1]); + else + n = 100000; + + for (i = 0; i < G_N_ELEMENTS (functions); i++) + { + node = functions[i].func (n); + if (!gsk_render_node_write_to_file (node, functions[i].name, &error)) + { + g_print ("Error writing \"%s\": %s\n", functions[i].name, error->message); + g_clear_error (&error); + return 1; + } + gsk_render_node_unref (node); + g_print ("Created test file \"%s\".\n", functions[i].name); + } + + return 0; +} |