[gtk/wip/otte/menu: 884/888] rendernodeparser: Handle empty Cairo nodes
- From: Benjamin Otte <otte src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/otte/menu: 884/888] rendernodeparser: Handle empty Cairo nodes
- Date: Wed, 29 May 2019 19:02:37 +0000 (UTC)
commit 8c4517cf7518619b7511045eb3efe3e28a810a6b
Author: Benjamin Otte <otte redhat com>
Date: Wed May 29 05:48:38 2019 +0200
rendernodeparser: Handle empty Cairo nodes
Cairo nodes can contain a NULL surface if they have never been drawn to.
Make this the default Cairo node.
gsk/gskrendernodeparser.c | 58 +++++++++++++-------------
testsuite/gsk/compare/empty-cairo.png | Bin 153 -> 1340 bytes
testsuite/gsk/nodeparser/empty-cairo.ref.node | 2 -
3 files changed, 30 insertions(+), 30 deletions(-)
---
diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c
index 6dc1d19448..4cdf70f630 100644
--- a/gsk/gskrendernodeparser.c
+++ b/gsk/gskrendernodeparser.c
@@ -1065,32 +1065,31 @@ parse_cairo_node (GtkCssParser *parser)
{ "script", parse_script, clear_surface, &surface }
};
GskRenderNode *node;
- cairo_t *cr;
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
node = gsk_cairo_node_new (&bounds);
- cr = gsk_cairo_node_get_draw_context (node);
-
if (surface != NULL)
{
+ cairo_t *cr = gsk_cairo_node_get_draw_context (node);
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
+ cairo_destroy (cr);
}
else if (pixels != NULL)
{
+ cairo_t *cr = gsk_cairo_node_get_draw_context (node);
surface = gdk_texture_download_surface (pixels);
cairo_set_source_surface (cr, surface, 0, 0);
cairo_paint (cr);
+ cairo_destroy (cr);
}
else
{
- gdk_cairo_set_source_rgba (cr, &GDK_RGBA ("FF00CC"));
- cairo_paint (cr);
+ /* do nothing */
}
- cairo_destroy (cr);
g_clear_object (&pixels);
g_clear_pointer (&surface, cairo_surface_destroy);
@@ -2380,36 +2379,39 @@ render_node_print (Printer *p,
start_node (p, "cairo");
append_rect_param (p, "bounds", &node->bounds);
- array = g_byte_array_new ();
- cairo_surface_write_to_png_stream (surface, cairo_write_array, array);
- b64 = g_base64_encode (array->data, array->len);
+ if (surface != NULL)
+ {
+ array = g_byte_array_new ();
+ cairo_surface_write_to_png_stream (surface, cairo_write_array, array);
+ b64 = g_base64_encode (array->data, array->len);
- _indent (p);
- g_string_append_printf (p->str, "pixels: url(\"data:image/png;base64,%s\");\n", b64);
+ _indent (p);
+ g_string_append_printf (p->str, "pixels: url(\"data:image/png;base64,%s\");\n", b64);
- g_free (b64);
- g_byte_array_free (array, TRUE);
+ g_free (b64);
+ g_byte_array_free (array, TRUE);
#ifdef CAIRO_HAS_SCRIPT_SURFACE
- if (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_RECORDING)
- {
- cairo_device_t *script;
+ if (cairo_surface_get_type (surface) == CAIRO_SURFACE_TYPE_RECORDING)
+ {
+ cairo_device_t *script;
- array = g_byte_array_new ();
- script = cairo_script_create_for_stream (cairo_write_array, array);
+ array = g_byte_array_new ();
+ script = cairo_script_create_for_stream (cairo_write_array, array);
- if (cairo_script_from_recording_surface (script, surface) == CAIRO_STATUS_SUCCESS)
- {
- b64 = g_base64_encode (array->data, array->len);
- _indent (p);
- g_string_append_printf (p->str, "script: url(\"data:;base64,%s\");\n", b64);
- g_free (b64);
- }
+ if (cairo_script_from_recording_surface (script, surface) == CAIRO_STATUS_SUCCESS)
+ {
+ b64 = g_base64_encode (array->data, array->len);
+ _indent (p);
+ g_string_append_printf (p->str, "script: url(\"data:;base64,%s\");\n", b64);
+ g_free (b64);
+ }
- cairo_device_destroy (script);
- g_byte_array_free (array, TRUE);
- }
+ cairo_device_destroy (script);
+ g_byte_array_free (array, TRUE);
+ }
#endif
+ }
end_node (p);
}
diff --git a/testsuite/gsk/compare/empty-cairo.png b/testsuite/gsk/compare/empty-cairo.png
index 3a032a391b..b4dff4c12f 100644
Binary files a/testsuite/gsk/compare/empty-cairo.png and b/testsuite/gsk/compare/empty-cairo.png differ
diff --git a/testsuite/gsk/nodeparser/empty-cairo.ref.node b/testsuite/gsk/nodeparser/empty-cairo.ref.node
index 4dca846961..841560aaa9 100644
--- a/testsuite/gsk/nodeparser/empty-cairo.ref.node
+++ b/testsuite/gsk/nodeparser/empty-cairo.ref.node
@@ -1,5 +1,3 @@
cairo {
bounds: 0 0 50 50;
- pixels:
url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAADIAAAAyCAIAAACRXR/mAAAABmJLR0QA/wD/AP+gvaeTAAAATklEQVRYhe3OMQHAIADAMJh/aXgCA3t6wZEoyNxjjfd8twP/tAqtQqvQKrQKrUKr0Cq0Cq1Cq9AqtAqtQqvQKrQKrUKr0Cq0Cq1Cq9AqDsEHAi9RKkB7AAAAAElFTkSuQmCC");
- script:
url("data:;base64,JSFDYWlyb1NjcmlwdAo8PCAvY29udGVudCAvL0NPTE9SX0FMUEhBIC93aWR0aCA1MCAvaGVpZ2h0IDUwID4+IHN1cmZhY2UgY29udGV4dAoxIDAgMC44IHJnYiBzZXQtc291cmNlCnBhaW50CnBvcAo=");
}
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]