summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte.benjamin@googlemail.com>2019-05-21 05:22:41 +0000
committerBenjamin Otte <otte.benjamin@googlemail.com>2019-05-21 05:22:41 +0000
commit321a21015ecc88dd51be2f665ea25cbc374e5c26 (patch)
tree00d04d06c9bae44974bd91c70b4112e8abacab10
parentfc2dc82b708dd550bdaac180779dbb97333a654e (diff)
parent63a8144e1ad02b8660d1041b7853af9a14eba92e (diff)
downloadgtk+-321a21015ecc88dd51be2f665ea25cbc374e5c26.tar.gz
Merge branch 'wip/otte/for-master' into 'master'
Wip/otte/for master See merge request GNOME/gtk!860
-rw-r--r--gdk/gdkrgbaprivate.h11
-rw-r--r--gsk/gl/gskglrenderer.c20
-rw-r--r--gsk/gskrendernode.c28
-rw-r--r--gsk/gskrendernode.h9
-rw-r--r--gsk/gskrendernodeimpl.c53
-rw-r--r--gsk/gskrendernodeparser.c817
-rw-r--r--gsk/gskrendernodeparserprivate.h1
-rw-r--r--gsk/meson.build2
-rw-r--r--gsk/vulkan/gskvulkancolortextpipeline.c7
-rw-r--r--gsk/vulkan/gskvulkancolortextpipelineprivate.h3
-rw-r--r--gsk/vulkan/gskvulkanrenderpass.c6
-rw-r--r--gsk/vulkan/gskvulkantextpipeline.c7
-rw-r--r--gsk/vulkan/gskvulkantextpipelineprivate.h3
-rw-r--r--gtk/gtksnapshot.c3
-rw-r--r--gtk/inspector/recorder.c5
-rw-r--r--tests/rendernode-create-tests.c2
-rw-r--r--testsuite/gsk/compare-render.c39
-rw-r--r--testsuite/gsk/compare/empty-blend.node1
-rw-r--r--testsuite/gsk/compare/empty-blend.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/compare/empty-blur.node20
-rw-r--r--testsuite/gsk/compare/empty-blur.pngbin0 -> 167 bytes
-rw-r--r--testsuite/gsk/compare/empty-border.node1
-rw-r--r--testsuite/gsk/compare/empty-border.pngbin0 -> 169 bytes
-rw-r--r--testsuite/gsk/compare/empty-clip.node1
-rw-r--r--testsuite/gsk/compare/empty-clip.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/compare/empty-color-matrix.node1
-rw-r--r--testsuite/gsk/compare/empty-color-matrix.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/compare/empty-color.node1
-rw-r--r--testsuite/gsk/compare/empty-color.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/compare/empty-container.node8
-rw-r--r--testsuite/gsk/compare/empty-container.pngbin0 -> 86 bytes
-rw-r--r--testsuite/gsk/compare/empty-cross-fade.node9
-rw-r--r--testsuite/gsk/compare/empty-cross-fade.pngbin0 -> 105 bytes
-rw-r--r--testsuite/gsk/compare/empty-debug.node1
-rw-r--r--testsuite/gsk/compare/empty-debug.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/compare/empty-inset-shadow.node1
-rw-r--r--testsuite/gsk/compare/empty-inset-shadow.pngbin0 -> 164 bytes
-rw-r--r--testsuite/gsk/compare/empty-linear-gradient.node1
-rw-r--r--testsuite/gsk/compare/empty-linear-gradient.pngbin0 -> 203 bytes
-rw-r--r--testsuite/gsk/compare/empty-opacity.node9
-rw-r--r--testsuite/gsk/compare/empty-opacity.pngbin0 -> 105 bytes
-rw-r--r--testsuite/gsk/compare/empty-outset-shadow.node1
-rw-r--r--testsuite/gsk/compare/empty-outset-shadow.pngbin0 -> 168 bytes
-rw-r--r--testsuite/gsk/compare/empty-repeat.node1
-rw-r--r--testsuite/gsk/compare/empty-repeat.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/compare/empty-rounded-clip.node1
-rw-r--r--testsuite/gsk/compare/empty-rounded-clip.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/compare/empty-shadow.node1
-rw-r--r--testsuite/gsk/compare/empty-shadow.pngbin0 -> 181 bytes
-rw-r--r--testsuite/gsk/compare/empty-text.node1
-rw-r--r--testsuite/gsk/compare/empty-text.pngbin0 -> 405 bytes
-rw-r--r--testsuite/gsk/compare/empty-texture.node12
-rw-r--r--testsuite/gsk/compare/empty-texture.pngbin0 -> 197 bytes
-rw-r--r--testsuite/gsk/compare/empty-transform.node1
-rw-r--r--testsuite/gsk/compare/empty-transform.pngbin0 -> 153 bytes
-rw-r--r--testsuite/gsk/meson.build138
-rw-r--r--testsuite/gsk/node-parser.c343
-rw-r--r--testsuite/gsk/nodeparser/blend.node (renamed from testsuite/gsk/serializedeserialize/blend.node)0
-rw-r--r--testsuite/gsk/nodeparser/blend.ref.node24
-rw-r--r--testsuite/gsk/nodeparser/border.node (renamed from testsuite/gsk/serializedeserialize/border.node)0
-rw-r--r--testsuite/gsk/nodeparser/border.ref.node4
-rw-r--r--testsuite/gsk/nodeparser/color.node (renamed from testsuite/gsk/serializedeserialize/color.node)0
-rw-r--r--testsuite/gsk/nodeparser/color.ref.node4
-rw-r--r--testsuite/gsk/nodeparser/crash1.errors3
-rw-r--r--testsuite/gsk/nodeparser/crash1.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/crash2.errors3
-rw-r--r--testsuite/gsk/nodeparser/crash2.ref.node10
-rw-r--r--testsuite/gsk/nodeparser/crash3.ref.node17
-rw-r--r--testsuite/gsk/nodeparser/crash4.errors1
-rw-r--r--testsuite/gsk/nodeparser/crash4.ref.node7
-rw-r--r--testsuite/gsk/nodeparser/debug.node (renamed from testsuite/gsk/serializedeserialize/debug.node)3
-rw-r--r--testsuite/gsk/nodeparser/empty-blend.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-blend.ref.node10
-rw-r--r--testsuite/gsk/nodeparser/empty-blur.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-blur.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/empty-border.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-border.ref.node3
-rw-r--r--testsuite/gsk/nodeparser/empty-clip.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-clip.ref.node7
-rw-r--r--testsuite/gsk/nodeparser/empty-color-matrix.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-color-matrix.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/empty-color.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-color.ref.node4
-rw-r--r--testsuite/gsk/nodeparser/empty-container.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-container.ref.node0
-rw-r--r--testsuite/gsk/nodeparser/empty-cross-fade.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-cross-fade.ref.node10
-rw-r--r--testsuite/gsk/nodeparser/empty-debug.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-debug.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/empty-inset-shadow.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-inset-shadow.ref.node3
-rw-r--r--testsuite/gsk/nodeparser/empty-linear-gradient.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-linear-gradient.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/empty-opacity.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-opacity.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/empty-outset-shadow.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-outset-shadow.ref.node3
-rw-r--r--testsuite/gsk/nodeparser/empty-repeat.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-repeat.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/empty-rounded-clip.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-rounded-clip.ref.node7
-rw-r--r--testsuite/gsk/nodeparser/empty-shadow.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-shadow.ref.node7
-rw-r--r--testsuite/gsk/nodeparser/empty-text.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-text.ref.node4
-rw-r--r--testsuite/gsk/nodeparser/empty-texture.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-texture.ref.node4
-rw-r--r--testsuite/gsk/nodeparser/empty-transform.node1
-rw-r--r--testsuite/gsk/nodeparser/empty-transform.ref.node6
-rw-r--r--testsuite/gsk/nodeparser/rounded-rect.node (renamed from testsuite/gsk/serializedeserialize/rounded-rect.node)0
-rw-r--r--testsuite/gsk/nodeparser/rounded-rect.ref.node63
-rw-r--r--testsuite/gsk/nodeparser/shadow.node (renamed from testsuite/gsk/serializedeserialize/shadow.node)0
-rw-r--r--testsuite/gsk/nodeparser/shadow.ref.node7
-rw-r--r--testsuite/gsk/nodeparser/testswitch.node (renamed from testsuite/gsk/serializedeserialize/testswitch.node)226
-rw-r--r--testsuite/gsk/nodeparser/widgetfactory.node (renamed from testsuite/gsk/serializedeserialize/widgetfactory.node)1529
-rw-r--r--testsuite/gsk/serialize-deserialize.c58
116 files changed, 2193 insertions, 1464 deletions
diff --git a/gdk/gdkrgbaprivate.h b/gdk/gdkrgbaprivate.h
index 58470e04c9..5126f57355 100644
--- a/gdk/gdkrgbaprivate.h
+++ b/gdk/gdkrgbaprivate.h
@@ -24,6 +24,17 @@
#include "gtk/css/gtkcssparserprivate.h"
+#define _GDK_RGBA_DECODE(c) ((unsigned)(((c) >= 'A' && (c) <= 'F') ? ((c)-'A'+10) : \
+ ((c) >= 'a' && (c) <= 'f') ? ((c)-'a'+10) : \
+ ((c) >= '0' && (c) <= '9') ? ((c)-'0') : \
+ -1))
+#define _GDK_RGBA_SELECT_COLOR(_str, index3, index6) _GDK_RGBA_DECODE (sizeof(_str) <= 4 ? (_str)[index3] : (_str)[index6])
+#define GDK_RGBA(str) ((GdkRGBA) {\
+ ((_GDK_RGBA_SELECT_COLOR(str, 0, 0) << 4) | _GDK_RGBA_SELECT_COLOR(str, 0, 1)) / 255., \
+ ((_GDK_RGBA_SELECT_COLOR(str, 1, 2) << 4) | _GDK_RGBA_SELECT_COLOR(str, 1, 3)) / 255., \
+ ((_GDK_RGBA_SELECT_COLOR(str, 2, 4) << 4) | _GDK_RGBA_SELECT_COLOR(str, 2, 5)) / 255., \
+ ((sizeof(str) % 4 == 1) ? ((_GDK_RGBA_SELECT_COLOR(str, 3, 6) << 4) | _GDK_RGBA_SELECT_COLOR(str, 3, 7)) : 0xFF) / 255 })
+
gboolean gdk_rgba_parser_parse (GtkCssParser *parser,
GdkRGBA *rgba);
diff --git a/gsk/gl/gskglrenderer.c b/gsk/gl/gskglrenderer.c
index 1a9f20bf02..99e1cacfbe 100644
--- a/gsk/gl/gskglrenderer.c
+++ b/gsk/gl/gskglrenderer.c
@@ -527,8 +527,9 @@ render_text_node (GskGLRenderer *self,
guint num_glyphs = gsk_text_node_get_num_glyphs (node);
int i;
int x_position = 0;
- float x = gsk_text_node_get_x (node) + builder->dx;
- float y = gsk_text_node_get_y (node) + builder->dy;
+ const graphene_point_t *offset = gsk_text_node_get_offset (node);
+ float x = offset->x + builder->dx;
+ float y = offset->y + builder->dy;
/* If the font has color glyphs, we don't need to recolor anything */
if (!force_color && font_has_color_glyphs (font))
@@ -2605,11 +2606,16 @@ gsk_gl_renderer_add_render_ops (GskGLRenderer *self,
break;
case GSK_DEBUG_NODE:
- ops_push_debug_group (builder, gsk_debug_node_get_message (node));
- gsk_gl_renderer_add_render_ops (self,
- gsk_debug_node_get_child (node),
- builder);
- ops_pop_debug_group (builder);
+ {
+ const char *message = gsk_debug_node_get_message (node);
+ if (message)
+ ops_push_debug_group (builder, message);
+ gsk_gl_renderer_add_render_ops (self,
+ gsk_debug_node_get_child (node),
+ builder);
+ if (message)
+ ops_pop_debug_group (builder);
+ }
break;
case GSK_COLOR_NODE:
diff --git a/gsk/gskrendernode.c b/gsk/gskrendernode.c
index 1b1dd2d78f..2e4753a2e0 100644
--- a/gsk/gskrendernode.c
+++ b/gsk/gskrendernode.c
@@ -311,34 +311,6 @@ gsk_render_node_diff (GskRenderNode *node1,
#define GSK_RENDER_NODE_SERIALIZATION_ID "GskRenderNode"
/**
- * gsk_render_node_serialize:
- * @node: a #GskRenderNode
- *
- * Serializes the @node for later deserialization via
- * gsk_render_node_deserialize(). No guarantees are made about the format
- * used other than that the same version of GTK+ will be able to deserialize
- * the result of a call to gsk_render_node_serialize() and
- * gsk_render_node_deserialize() will correctly reject files it cannot open
- * that were created with previous versions of GTK+.
- *
- * The intended use of this functions is testing, benchmarking and debugging.
- * The format is not meant as a permanent storage format.
- *
- * Returns: a #GBytes representing the node.
- **/
-GBytes *
-gsk_render_node_serialize (GskRenderNode *node)
-{
- GBytes *result;
- char *str;
-
- str = gsk_render_node_serialize_to_string (node);
- result = g_bytes_new_take (str, strlen (str));
-
- return result;
-}
-
-/**
* gsk_render_node_write_to_file:
* @node: a #GskRenderNode
* @filename: the file to save it to.
diff --git a/gsk/gskrendernode.h b/gsk/gskrendernode.h
index b1ae30785e..cdb59a46f4 100644
--- a/gsk/gskrendernode.h
+++ b/gsk/gskrendernode.h
@@ -292,10 +292,9 @@ GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_text_node_new (PangoFont *font,
PangoGlyphString *glyphs,
const GdkRGBA *color,
- float x,
- float y);
+ const graphene_point_t *offset);
GDK_AVAILABLE_IN_ALL
-const PangoFont * gsk_text_node_peek_font (GskRenderNode *node);
+PangoFont * gsk_text_node_peek_font (GskRenderNode *node);
GDK_AVAILABLE_IN_ALL
guint gsk_text_node_get_num_glyphs (GskRenderNode *node);
GDK_AVAILABLE_IN_ALL
@@ -303,9 +302,7 @@ const PangoGlyphInfo *gsk_text_node_peek_glyphs (GskRenderNode
GDK_AVAILABLE_IN_ALL
const GdkRGBA * gsk_text_node_peek_color (GskRenderNode *node);
GDK_AVAILABLE_IN_ALL
-float gsk_text_node_get_x (GskRenderNode *node);
-GDK_AVAILABLE_IN_ALL
-float gsk_text_node_get_y (GskRenderNode *node);
+const graphene_point_t *gsk_text_node_get_offset (GskRenderNode *node);
GDK_AVAILABLE_IN_ALL
GskRenderNode * gsk_blur_node_new (GskRenderNode *child,
diff --git a/gsk/gskrendernodeimpl.c b/gsk/gskrendernodeimpl.c
index a5f0c03c73..d0a24ed463 100644
--- a/gsk/gskrendernodeimpl.c
+++ b/gsk/gskrendernodeimpl.c
@@ -3429,8 +3429,7 @@ struct _GskTextNode
PangoFont *font;
GdkRGBA color;
- double x;
- double y;
+ graphene_point_t offset;
guint num_glyphs;
PangoGlyphInfo glyphs[];
@@ -3464,7 +3463,7 @@ gsk_text_node_draw (GskRenderNode *node,
cairo_save (cr);
gdk_cairo_set_source_rgba (cr, &self->color);
- cairo_translate (cr, self->x, self->y);
+ cairo_translate (cr, self->offset.x, self->offset.y);
pango_cairo_show_glyph_string (cr, self->font, &glyphs);
cairo_restore (cr);
@@ -3480,8 +3479,7 @@ gsk_text_node_diff (GskRenderNode *node1,
if (self1->font == self2->font &&
gdk_rgba_equal (&self1->color, &self2->color) &&
- self1->x == self2->x &&
- self1->y == self2->y &&
+ graphene_point_equal (&self1->offset, &self2->offset) &&
self1->num_glyphs == self2->num_glyphs)
{
guint i;
@@ -3523,8 +3521,7 @@ static const GskRenderNodeClass GSK_TEXT_NODE_CLASS = {
* @font: the #PangoFont containing the glyphs
* @glyphs: the #PangoGlyphString to render
* @color: the foreground color to render with
- * @x: the x coordinate at which to put the baseline
- * @y: the y coordinate at wihch to put the baseline
+ * @offset: offset of the baseline
*
* Creates a render node that renders the given glyphs,
* Note that @color may not be used if the font contains
@@ -3533,11 +3530,10 @@ static const GskRenderNodeClass GSK_TEXT_NODE_CLASS = {
* Returns: (nullable): a new text node, or %NULL
*/
GskRenderNode *
-gsk_text_node_new (PangoFont *font,
- PangoGlyphString *glyphs,
- const GdkRGBA *color,
- float x,
- float y)
+gsk_text_node_new (PangoFont *font,
+ PangoGlyphString *glyphs,
+ const GdkRGBA *color,
+ const graphene_point_t *offset)
{
GskTextNode *self;
PangoRectangle ink_rect;
@@ -3553,14 +3549,13 @@ gsk_text_node_new (PangoFont *font,
self->font = g_object_ref (font);
self->color = *color;
- self->x = x;
- self->y = y;
+ self->offset = *offset;
self->num_glyphs = glyphs->num_glyphs;
memcpy (self->glyphs, glyphs->glyphs, sizeof (PangoGlyphInfo) * glyphs->num_glyphs);
graphene_rect_init (&self->render_node.bounds,
- x + ink_rect.x - 1,
- y + ink_rect.y - 1,
+ offset->x + ink_rect.x - 1,
+ offset->y + ink_rect.y - 1,
ink_rect.width + 2,
ink_rect.height + 2);
@@ -3577,7 +3572,7 @@ gsk_text_node_peek_color (GskRenderNode *node)
return &self->color;
}
-const PangoFont *
+PangoFont *
gsk_text_node_peek_font (GskRenderNode *node)
{
GskTextNode *self = (GskTextNode *) node;
@@ -3607,24 +3602,14 @@ gsk_text_node_peek_glyphs (GskRenderNode *node)
return self->glyphs;
}
-float
-gsk_text_node_get_x (GskRenderNode *node)
-{
- GskTextNode *self = (GskTextNode *) node;
-
- g_return_val_if_fail (GSK_IS_RENDER_NODE_TYPE (node, GSK_TEXT_NODE), 0.0);
-
- return (float)self->x;
-}
-
-float
-gsk_text_node_get_y (GskRenderNode *node)
+const graphene_point_t *
+gsk_text_node_get_offset (GskRenderNode *node)
{
GskTextNode *self = (GskTextNode *) node;
- g_return_val_if_fail (GSK_IS_RENDER_NODE_TYPE (node, GSK_TEXT_NODE), 0.0);
+ g_return_val_if_fail (GSK_IS_RENDER_NODE_TYPE (node, GSK_TEXT_NODE), NULL);
- return (float)self->y;
+ return &self->offset;
}
/*** GSK_BLUR_NODE ***/
@@ -3681,6 +3666,7 @@ blur_once (cairo_surface_t *src,
r += c1[0];
g += c1[1];
b += c1[2];
+ a += c1[3];
}
p_dest_row = p_dest;
for (x = 0; x < width; x++)
@@ -3689,6 +3675,7 @@ blur_once (cairo_surface_t *src,
p_dest_row[0] = div_kernel_size[r];
p_dest_row[1] = div_kernel_size[g];
p_dest_row[2] = div_kernel_size[b];
+ p_dest_row[3] = div_kernel_size[a];
p_dest_row += n_channels;
/* the pixel to add to the kernel */
@@ -3707,6 +3694,7 @@ blur_once (cairo_surface_t *src,
r += c1[0] - c2[0];
g += c1[1] - c2[1];
b += c1[2] - c2[2];
+ a += c1[3] - c2[3];
}
p_src += src_rowstride;
@@ -3730,6 +3718,7 @@ blur_once (cairo_surface_t *src,
r += c1[0];
g += c1[1];
b += c1[2];
+ a += c1[3];
}
p_dest_col = p_dest;
@@ -3740,6 +3729,7 @@ blur_once (cairo_surface_t *src,
p_dest_col[0] = div_kernel_size[r];
p_dest_col[1] = div_kernel_size[g];
p_dest_col[2] = div_kernel_size[b];
+ p_dest_col[3] = div_kernel_size[a];
p_dest_col += dest_rowstride;
/* the pixel to add to the kernel */
@@ -3757,6 +3747,7 @@ blur_once (cairo_surface_t *src,
r += c1[0] - c2[0];
g += c1[1] - c2[1];
b += c1[2] - c2[2];
+ a += c1[3] - c2[3];
}
p_src += n_channels;
diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c
index e0b881310d..ab7b3bd2a8 100644
--- a/gsk/gskrendernodeparser.c
+++ b/gsk/gskrendernodeparser.c
@@ -1,3 +1,25 @@
+/*
+ * Copyright © 2019 Benjamin Otte
+ * Timm Bäder
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * Authors: Benjamin Otte <otte@gnome.org>
+ * Timm Bäder <mail@baedert.org>
+ */
+
+#include "config.h"
#include "gskrendernodeparserprivate.h"
@@ -8,8 +30,8 @@
#include "gdk/gdkrgbaprivate.h"
#include "gdk/gdktextureprivate.h"
#include <gtk/css/gtkcss.h>
-#include "gtk/css/gtkcssparserprivate.h"
#include "gtk/css/gtkcssdataurlprivate.h"
+#include "gtk/css/gtkcssparserprivate.h"
typedef struct _Declaration Declaration;
@@ -319,17 +341,59 @@ clear_stops (gpointer inout_stops)
}
static gboolean
+parse_float4 (GtkCssParser *parser,
+ gpointer out_floats)
+{
+ float *floats = (float *) out_floats;
+ double d[4];
+ int i;
+
+ for (i = 0; i < 4 && !gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_EOF); i ++)
+ {
+ if (!gtk_css_parser_consume_number (parser, &d[i]))
+ return FALSE;
+ }
+ if (i == 0)
+ {
+ gtk_css_parser_error_syntax (parser, "Expected a color");
+ return FALSE;
+ }
+ for (; i < 4; i++)
+ {
+ d[i] = d[(i - 1) >> 1];
+ }
+
+ for (i = 0; i < 4; i++)
+ {
+ floats[i] = d[i];
+ }
+
+ return TRUE;
+}
+
+static gboolean
parse_colors4 (GtkCssParser *parser,
gpointer out_colors)
{
- GdkRGBA *colors = (GdkRGBA *)out_colors;
+ GdkRGBA colors[4];
int i;
- for (i = 0; i < 4; i ++)
+ for (i = 0; i < 4 && !gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_EOF); i ++)
{
if (!gdk_rgba_parser_parse (parser, &colors[i]))
return FALSE;
}
+ if (i == 0)
+ {
+ gtk_css_parser_error_syntax (parser, "Expected a color");
+ return FALSE;
+ }
+ for (; i < 4; i++)
+ {
+ colors[i] = colors[(i - 1) >> 1];
+ }
+
+ memcpy (out_colors, colors, sizeof (GdkRGBA) * 4);
return TRUE;
}
@@ -340,9 +404,9 @@ parse_shadows (GtkCssParser *parser,
{
GArray *shadows = out_shadows;
- for (;;)
+ do
{
- GskShadow shadow = { {0, 0, 0, 1}, 0, 0, 0 };
+ GskShadow shadow = { GDK_RGBA("000000"), 0, 0, 0 };
double dx = 0, dy = 0, radius = 0;
if (!gdk_rgba_parser_parse (parser, &shadow.color))
@@ -352,22 +416,21 @@ parse_shadows (GtkCssParser *parser,
gtk_css_parser_error_value (parser, "Expected shadow x offset");
if (!gtk_css_parser_consume_number (parser, &dy))
- gtk_css_parser_error_value (parser, "Expected shadow x offset");
+ gtk_css_parser_error_value (parser, "Expected shadow y offset");
- if (!gtk_css_parser_consume_number (parser, &radius))
- gtk_css_parser_error_value (parser, "Expected shadow blur radius");
+ if (gtk_css_parser_has_number (parser))
+ {
+ if (!gtk_css_parser_consume_number (parser, &radius))
+ gtk_css_parser_error_value (parser, "Expected shadow blur radius");
+ }
shadow.dx = dx;
shadow.dy = dy;
shadow.radius = radius;
g_array_append_val (shadows, shadow);
-
- if (gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_COMMA))
- gtk_css_parser_skip (parser);
- else
- break;
}
+ while (gtk_css_parser_try_token (parser, GTK_CSS_TOKEN_COMMA));
return TRUE;
}
@@ -419,21 +482,15 @@ parse_blend_mode (GtkCssParser *parser,
return FALSE;
}
-static gboolean
-parse_font (GtkCssParser *parser,
- gpointer out_font)
+static PangoFont *
+font_from_string (const char *string)
{
- const GtkCssToken *token;
PangoFontDescription *desc;
PangoFontMap *font_map;
PangoContext *context;
PangoFont *font;
- token = gtk_css_parser_get_token (parser);
- if (!gtk_css_token_is (token, GTK_CSS_TOKEN_STRING))
- return FALSE;
-
- desc = pango_font_description_from_string (token->string.string);
+ desc = pango_font_description_from_string (string);
font_map = pango_cairo_font_map_get_default ();
context = pango_font_map_create_context (font_map);
font = pango_font_map_load_font (font_map, context, desc);
@@ -441,10 +498,86 @@ parse_font (GtkCssParser *parser,
pango_font_description_free (desc);
g_object_unref (context);
+ return font;
+}
+
+#define MIN_ASCII_GLYPH 32
+#define MAX_ASCII_GLYPH 127 /* exclusive */
+#define N_ASCII_GLYPHS (MAX_ASCII_GLYPH - MIN_ASCII_GLYPH)
+
+static PangoGlyphString *
+create_ascii_glyphs (PangoFont *font)
+{
+ PangoLanguage *language = pango_language_from_string ("en_US"); /* just pick one */
+ PangoCoverage *coverage;
+ PangoAnalysis not_a_hack = {
+ .shape_engine = pango_font_find_shaper (font, language, MIN_ASCII_GLYPH), /* never changes */
+ .lang_engine = NULL, /* unused by pango_shape() */
+ .font = font,
+ .level = 0,
+ .gravity = PANGO_GRAVITY_SOUTH,
+ .flags = 0,
+ .script = PANGO_SCRIPT_COMMON,
+ .language = language,
+ .extra_attrs = NULL
+ };
+ PangoGlyphString *result, *glyph_string;
+ guint i;
+
+ coverage = pango_font_get_coverage (font, language);
+ for (i = MIN_ASCII_GLYPH; i < MAX_ASCII_GLYPH; i++)
+ {
+ if (!pango_coverage_get (coverage, i))
+ break;
+ }
+ pango_coverage_unref (coverage);
+ if (i < MAX_ASCII_GLYPH)
+ return NULL;
+
+ result = pango_glyph_string_new ();
+ pango_glyph_string_set_size (result, N_ASCII_GLYPHS);
+ glyph_string = pango_glyph_string_new ();
+ for (i = MIN_ASCII_GLYPH; i < MAX_ASCII_GLYPH; i++)
+ {
+ pango_shape ((char[2]) { i, 0 },
+ 1,
+ &not_a_hack,
+ glyph_string);
+ if (glyph_string->num_glyphs != 1)
+ {
+ pango_glyph_string_free (glyph_string);
+ pango_glyph_string_free (result);
+ return NULL;
+ }
+ result->glyphs[i - MIN_ASCII_GLYPH] = glyph_string->glyphs[0];
+ }
+
+ pango_glyph_string_free (glyph_string);
+
+ return result;
+}
+
+static gboolean
+parse_font (GtkCssParser *parser,
+ gpointer out_font)
+{
+ PangoFont *font;
+ char *s;
+
+ s = gtk_css_parser_consume_string (parser);
+ if (s == NULL)
+ return FALSE;
+
+ font = font_from_string (s);
+ if (font == NULL)
+ {
+ gtk_css_parser_error_syntax (parser, "This font does not exist.");
+ return FALSE;
+ }
+
*((PangoFont**)out_font) = font;
- /* Skip font name token */
- gtk_css_parser_consume_token (parser);
+ g_free (s);
return TRUE;
}
@@ -459,49 +592,64 @@ static gboolean
parse_glyphs (GtkCssParser *parser,
gpointer out_glyphs)
{
- GArray *glyphs;
PangoGlyphString *glyph_string;
- int i;
- glyphs = g_array_new (FALSE, TRUE, sizeof (double[5]));
+ glyph_string = pango_glyph_string_new ();
- for (;;)
+ do
{
- double values[5];
+ PangoGlyphInfo gi = { 0, { 0, 0, 0}, { 1 } };
+ double d, d2;
+ int i;
- /* We have 5 numbers per glyph */
- for (i = 0; i < 5; i ++)
+ if (gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_STRING))
{
- if (!gtk_css_parser_consume_number (parser, &values[i]))
- return FALSE;
- }
-
- g_array_append_val (glyphs, values);
+ char *s = gtk_css_parser_consume_string (parser);
- if (gtk_css_parser_has_token (parser, GTK_CSS_TOKEN_COMMA))
- gtk_css_parser_skip (parser);
+ for (i = 0; s[i] != 0; i++)
+ {
+ if (s[i] < MIN_ASCII_GLYPH || s[i] >= MAX_ASCII_GLYPH)
+ {
+ gtk_css_parser_error_value (parser, "Unsupported character %d in string", i);
+ }
+ gi.glyph = PANGO_GLYPH_INVALID_INPUT - MAX_ASCII_GLYPH + s[i];
+ pango_glyph_string_set_size (glyph_string, glyph_string->num_glyphs + 1);
+ glyph_string->glyphs[glyph_string->num_glyphs - 1] = gi;
+ }
+ }
else
- break;
- }
-
- glyph_string = pango_glyph_string_new ();
- pango_glyph_string_set_size (glyph_string, glyphs->len);
+ {
+ if (!gtk_css_parser_consume_integer (parser, &i) ||
+ !gtk_css_parser_consume_number (parser, &d))
+ {
+ pango_glyph_string_free (glyph_string);
+ return FALSE;
+ }
+ gi.glyph = i;
+ gi.geometry.width = (int) (d * PANGO_SCALE);
- for (i = 0; i < glyphs->len; i ++)
- {
- PangoGlyphInfo g;
- double *v = (double *)(glyphs->data + (i * sizeof (double) * 5));
+ if (gtk_css_parser_has_number (parser))
+ {
+ if (!gtk_css_parser_consume_number (parser, &d) ||
+ !gtk_css_parser_consume_number (parser, &d2))
+ {
+ pango_glyph_string_free (glyph_string);
+ return FALSE;
+ }
+ gi.geometry.x_offset = (int) (d * PANGO_SCALE);
+ gi.geometry.y_offset = (int) (d2 * PANGO_SCALE);
- g.glyph = (guint)v[0];
- g.geometry.width = (int)v[1];
- g.geometry.x_offset = (int)v[2];
- g.geometry.y_offset = (int)v[3];
- g.attr.is_cluster_start = (int)v[4];
+ if (gtk_css_parser_try_ident (parser, "same-cluster"))
+ gi.attr.is_cluster_start = 0;
+ else
+ gi.attr.is_cluster_start = 1;
+ }
- glyph_string->glyphs[i] = g;
+ pango_glyph_string_set_size (glyph_string, glyph_string->num_glyphs + 1);
+ glyph_string->glyphs[glyph_string->num_glyphs - 1] = gi;
+ }
}
-
- g_array_free (glyphs, TRUE);
+ while (gtk_css_parser_try_token (parser, GTK_CSS_TOKEN_COMMA));
*((PangoGlyphString **)out_glyphs) = glyph_string;
@@ -621,10 +769,16 @@ parse_declarations (GtkCssParser *parser,
}
static GskRenderNode *
+create_default_render_node (void)
+{
+ return gsk_color_node_new (&GDK_RGBA("FF00CC"), &GRAPHENE_RECT_INIT (0, 0, 50, 50));
+}
+
+static GskRenderNode *
parse_color_node (GtkCssParser *parser)
{
- graphene_rect_t bounds = GRAPHENE_RECT_INIT (0, 0, 0, 0);
- GdkRGBA color = { 0, 0, 0, 1 };
+ graphene_rect_t bounds = GRAPHENE_RECT_INIT (0, 0, 50, 50);
+ GdkRGBA color = GDK_RGBA("FF00CC");
const Declaration declarations[] = {
{ "bounds", parse_rect, NULL, &bounds },
{ "color", parse_color, NULL, &color },
@@ -638,9 +792,9 @@ parse_color_node (GtkCssParser *parser)
static GskRenderNode *
parse_linear_gradient_node (GtkCssParser *parser)
{
- graphene_rect_t bounds = GRAPHENE_RECT_INIT (0, 0, 0, 0);
+ graphene_rect_t bounds = GRAPHENE_RECT_INIT (0, 0, 50, 50);
graphene_point_t start = GRAPHENE_POINT_INIT (0, 0);
- graphene_point_t end = GRAPHENE_POINT_INIT (0, 0);
+ graphene_point_t end = GRAPHENE_POINT_INIT (0, 50);
GArray *stops = NULL;
const Declaration declarations[] = {
{ "bounds", parse_rect, NULL, &bounds },
@@ -653,8 +807,12 @@ parse_linear_gradient_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (stops == NULL)
{
- gtk_css_parser_error_syntax (parser, "No color stops given");
- return NULL;
+ GskColorStop from = { 0.0, GDK_RGBA("AAFF00") };
+ GskColorStop to = { 1.0, GDK_RGBA("FF00CC") };
+
+ stops = g_array_new (FALSE, FALSE, sizeof (GskColorStop));
+ g_array_append_val (stops, from);
+ g_array_append_val (stops, to);
}
result = gsk_linear_gradient_node_new (&bounds, &start, &end, (GskColorStop *) stops->data, stops->len);
@@ -667,8 +825,8 @@ parse_linear_gradient_node (GtkCssParser *parser)
static GskRenderNode *
parse_inset_shadow_node (GtkCssParser *parser)
{
- GskRoundedRect outline = GSK_ROUNDED_RECT_INIT (0, 0, 0, 0);
- GdkRGBA color = { 0, 0, 0, 1 };
+ GskRoundedRect outline = GSK_ROUNDED_RECT_INIT (0, 0, 50, 50);
+ GdkRGBA color = GDK_RGBA("000000");
double dx = 1, dy = 1, blur = 0, spread = 0;
const Declaration declarations[] = {
{ "outline", parse_rounded_rect, NULL, &outline },
@@ -687,24 +845,24 @@ parse_inset_shadow_node (GtkCssParser *parser)
static GskRenderNode *
parse_border_node (GtkCssParser *parser)
{
- GskRoundedRect outline = GSK_ROUNDED_RECT_INIT (0, 0, 0, 0);
- graphene_rect_t widths = GRAPHENE_RECT_INIT (0, 0, 0, 0);
- GdkRGBA colors[4] = { { 0, 0, 0, 0 }, {0, 0, 0, 0}, {0, 0, 0, 0}, { 0, 0, 0, 0 } };
+ GskRoundedRect outline = GSK_ROUNDED_RECT_INIT (0, 0, 50, 50);
+ float widths[4] = { 1, 1, 1, 1 };
+ GdkRGBA colors[4] = { GDK_RGBA("000"), GDK_RGBA("000"), GDK_RGBA("000"), GDK_RGBA("000") };
const Declaration declarations[] = {
{ "outline", parse_rounded_rect, NULL, &outline },
- { "widths", parse_rect, NULL, &widths },
+ { "widths", parse_float4, NULL, &widths },
{ "colors", parse_colors4, NULL, &colors }
};
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
- return gsk_border_node_new (&outline, (float*)&widths, colors);
+ return gsk_border_node_new (&outline, widths, colors);
}
static GskRenderNode *
parse_texture_node (GtkCssParser *parser)
{
- graphene_rect_t bounds = GRAPHENE_RECT_INIT (0, 0, 0, 0);
+ graphene_rect_t bounds = GRAPHENE_RECT_INIT (0, 0, 50, 50);
GdkTexture *texture = NULL;
const Declaration declarations[] = {
{ "bounds", parse_rect, NULL, &bounds },
@@ -716,8 +874,21 @@ parse_texture_node (GtkCssParser *parser)
if (texture == NULL)
{
- gtk_css_parser_error_syntax (parser, "Missing \"texture\" property definition");
- return NULL;
+ static const guint32 pixels[100] = {
+ 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0, 0, 0, 0, 0,
+ 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0, 0, 0, 0, 0,
+ 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0, 0, 0, 0, 0,
+ 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0, 0, 0, 0, 0,
+ 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC,
+ 0, 0, 0, 0, 0, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC,
+ 0, 0, 0, 0, 0, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC,
+ 0, 0, 0, 0, 0, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC,
+ 0, 0, 0, 0, 0, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC, 0xFFFF00CC };
+ GBytes *bytes = g_bytes_new_static ((guchar *) pixels, 400);
+
+ texture = gdk_memory_texture_new (10, 10, GDK_MEMORY_DEFAULT, bytes, 40);
+ g_bytes_unref (bytes);
}
node = gsk_texture_node_new (texture, &bounds);
@@ -729,8 +900,8 @@ parse_texture_node (GtkCssParser *parser)
static GskRenderNode *
parse_outset_shadow_node (GtkCssParser *parser)
{
- GskRoundedRect outline = GSK_ROUNDED_RECT_INIT (0, 0, 0, 0);
- GdkRGBA color = { 0, 0, 0, 1 };
+ GskRoundedRect outline = GSK_ROUNDED_RECT_INIT (0, 0, 50, 50);
+ GdkRGBA color = GDK_RGBA("000000");
double dx = 1, dy = 1, blur = 0, spread = 0;
const Declaration declarations[] = {
{ "outline", parse_rounded_rect, NULL, &outline },
@@ -759,11 +930,8 @@ parse_transform_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- gsk_transform_unref (transform);
- return NULL;
- }
+ child = create_default_render_node ();
+
/* This is very much cheating, isn't it? */
if (transform == NULL)
transform = gsk_transform_new ();
@@ -780,7 +948,7 @@ static GskRenderNode *
parse_opacity_node (GtkCssParser *parser)
{
GskRenderNode *child = NULL;
- double opacity = 1.0;
+ double opacity = 0.5;
const Declaration declarations[] = {
{ "opacity", parse_double, NULL, &opacity },
{ "child", parse_node, clear_node, &child },
@@ -789,10 +957,7 @@ parse_opacity_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
result = gsk_opacity_node_new (child, opacity);
@@ -818,10 +983,7 @@ parse_color_matrix_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
graphene_vec4_init (&offset,
offset_rect.origin.x, offset_rect.origin.y,
@@ -851,16 +1013,10 @@ parse_cross_fade_node (GtkCssParser *parser)
GskRenderNode *result;
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
- if (start == NULL || end == NULL)
- {
- if (start == NULL)
- gtk_css_parser_error_syntax (parser, "Missing \"start\" property definition");
- if (end == NULL)
- gtk_css_parser_error_syntax (parser, "Missing \"end\" property definition");
- g_clear_pointer (&start, gsk_render_node_unref);
- g_clear_pointer (&end, gsk_render_node_unref);
- return NULL;
- }
+ if (start == NULL)
+ start = gsk_color_node_new (&GDK_RGBA("AAFF00"), &GRAPHENE_RECT_INIT (0, 0, 50, 50));
+ if (end == NULL)
+ end = create_default_render_node ();
result = gsk_cross_fade_node_new (start, end, progress);
@@ -884,16 +1040,10 @@ parse_blend_node (GtkCssParser *parser)
GskRenderNode *result;
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
- if (bottom == NULL || top == NULL)
- {
- if (bottom == NULL)
- gtk_css_parser_error_syntax (parser, "Missing \"bottom\" property definition");
- if (top == NULL)
- gtk_css_parser_error_syntax (parser, "Missing \"top\" property definition");
- g_clear_pointer (&bottom, gsk_render_node_unref);
- g_clear_pointer (&top, gsk_render_node_unref);
- return NULL;
- }
+ if (bottom == NULL)
+ bottom = gsk_color_node_new (&GDK_RGBA("AAFF00"), &GRAPHENE_RECT_INIT (0, 0, 50, 50));
+ if (top == NULL)
+ top = create_default_render_node ();
result = gsk_blend_node_new (bottom, top, mode);
@@ -919,10 +1069,7 @@ parse_repeat_node (GtkCssParser *parser)
parse_result = parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
if (!(parse_result & (1 << 1)))
gsk_render_node_get_bounds (child, &bounds);
@@ -936,18 +1083,49 @@ parse_repeat_node (GtkCssParser *parser)
return result;
}
+static gboolean
+unpack_glyphs (PangoFont *font,
+ PangoGlyphString *glyphs)
+{
+ PangoGlyphString *ascii = NULL;
+ guint i;
+
+ for (i = 0; i < glyphs->num_glyphs; i++)
+ {
+ PangoGlyph glyph = glyphs->glyphs[i].glyph;
+
+ if (glyph < PANGO_GLYPH_INVALID_INPUT - MAX_ASCII_GLYPH ||
+ glyph >= PANGO_GLYPH_INVALID_INPUT)
+ continue;
+
+ glyph = glyph - (PANGO_GLYPH_INVALID_INPUT - MAX_ASCII_GLYPH) - MIN_ASCII_GLYPH;
+
+ if (ascii == NULL)
+ {
+ ascii = create_ascii_glyphs (font);
+ if (ascii == NULL)
+ return FALSE;
+ }
+
+ glyphs->glyphs[i].glyph = ascii->glyphs[glyph].glyph;
+ glyphs->glyphs[i].geometry.width = ascii->glyphs[glyph].geometry.width;
+ }
+
+ g_clear_pointer (&ascii, pango_glyph_string_free);
+
+ return TRUE;
+}
+
static GskRenderNode *
parse_text_node (GtkCssParser *parser)
{
PangoFont *font = NULL;
- double x = 0;
- double y = 0;
- GdkRGBA color = { 0, 0, 0, 1 };
+ graphene_point_t offset = GRAPHENE_POINT_INIT (0, 0);
+ GdkRGBA color = GDK_RGBA("000000");
PangoGlyphString *glyphs = NULL;
const Declaration declarations[] = {
{ "font", parse_font, clear_font, &font },
- { "x", parse_double, NULL, &x },
- { "y", parse_double, NULL, &y },
+ { "offset", parse_point, NULL, &offset },
{ "color", parse_color, NULL, &color },
{ "glyphs", parse_glyphs, clear_glyphs, &glyphs }
};
@@ -955,14 +1133,48 @@ parse_text_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
- if (!font || !glyphs)
- return NULL;
+ if (font == NULL)
+ {
+ font = font_from_string ("Cantarell 11");
+ g_assert (font);
+ }
- result = gsk_text_node_new (font, glyphs, &color, x, y);
+ if (!glyphs)
+ {
+ const char *text = "Hello";
+ PangoGlyphInfo gi = { 0, { 0, 0, 0}, { 1 } };
+ guint i;
+
+ glyphs = pango_glyph_string_new ();
+ pango_glyph_string_set_size (glyphs, strlen (text));
+ for (i = 0; i < strlen (text); i++)
+ {
+ gi.glyph = PANGO_GLYPH_INVALID_INPUT - MAX_ASCII_GLYPH + text[i];
+ glyphs->glyphs[i] = gi;
+ }
+ }
+
+ if (!unpack_glyphs (font, glyphs))
+ {
+ gtk_css_parser_error_value (parser, "Given font cannot decode the glyph text");
+ result = NULL;
+ }
+ else
+ {
+ result = gsk_text_node_new (font, glyphs, &color, &offset);
+ if (result == NULL)
+ {
+ gtk_css_parser_error_value (parser, "Glyphs result in empty text");
+ }
+ }
g_object_unref (font);
pango_glyph_string_free (glyphs);
+ /* return anything, whatever, just not NULL */
+ if (result == NULL)
+ result = create_default_render_node ();
+
return result;
}
@@ -970,7 +1182,7 @@ static GskRenderNode *
parse_blur_node (GtkCssParser *parser)
{
GskRenderNode *child = NULL;
- double blur_radius = 0.0;
+ double blur_radius = 1.0;
const Declaration declarations[] = {
{ "blur", parse_double, NULL, &blur_radius },
{ "child", parse_node, clear_node, &child },
@@ -979,10 +1191,7 @@ parse_blur_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
result = gsk_blur_node_new (child, blur_radius);
@@ -994,22 +1203,22 @@ parse_blur_node (GtkCssParser *parser)
static GskRenderNode *
parse_clip_node (GtkCssParser *parser)
{
- graphene_rect_t clip = GRAPHENE_RECT_INIT (0, 0, 0, 0);
+ GskRoundedRect clip = GSK_ROUNDED_RECT_INIT (0, 0, 50, 50);
GskRenderNode *child = NULL;
const Declaration declarations[] = {
- { "clip", parse_rect, NULL, &clip },
+ { "clip", parse_rounded_rect, NULL, &clip },
{ "child", parse_node, clear_node, &child },
};
GskRenderNode *result;
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
- result = gsk_clip_node_new (child, &clip);
+ if (gsk_rounded_rect_is_rectilinear (&clip))
+ result = gsk_clip_node_new (child, &clip.bounds);
+ else
+ result = gsk_rounded_clip_node_new (child, &clip);
gsk_render_node_unref (child);
@@ -1019,7 +1228,7 @@ parse_clip_node (GtkCssParser *parser)
static GskRenderNode *
parse_rounded_clip_node (GtkCssParser *parser)
{
- GskRoundedRect clip = GSK_ROUNDED_RECT_INIT (0, 0, 0, 0);
+ GskRoundedRect clip = GSK_ROUNDED_RECT_INIT (0, 0, 50, 50);
GskRenderNode *child = NULL;
const Declaration declarations[] = {
{ "clip", parse_rounded_rect, NULL, &clip },
@@ -1029,10 +1238,7 @@ parse_rounded_clip_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
result = gsk_rounded_clip_node_new (child, &clip);
@@ -1054,15 +1260,12 @@ parse_shadow_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
if (shadows->len == 0)
{
- gtk_css_parser_error_syntax (parser, "Need at least one shadow");
- return child;
+ GskShadow default_shadow = { GDK_RGBA("000000"), 1, 1, 0 };
+ g_array_append_val (shadows, default_shadow);
}
result = gsk_shadow_node_new (child, (GskShadow *)shadows->data, shadows->len);
@@ -1086,10 +1289,7 @@ parse_debug_node (GtkCssParser *parser)
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
- {
- gtk_css_parser_error_syntax (parser, "Missing \"child\" property definition");
- return NULL;
- }
+ child = create_default_render_node ();
result = gsk_debug_node_new (child, message);
@@ -1379,8 +1579,13 @@ append_vec4 (GString *str,
static void
append_float_param (Printer *p,
const char *param_name,
- float value)
+ float value,
+ float default_value)
{
+ /* Don't approximate-compare here, better be topo verbose */
+ if (value == default_value)
+ return;
+
_indent (p);
g_string_append_printf (p->str, "%s: ", param_name);
string_append_double (p->str, value);
@@ -1536,9 +1741,9 @@ render_node_print (Printer *p,
{
start_node (p, "cross-fade");
- append_float_param (p, "progress", gsk_cross_fade_node_get_progress (node));
- append_node_param (p, "start", gsk_cross_fade_node_get_start_child (node));
append_node_param (p, "end", gsk_cross_fade_node_get_end_child (node));
+ append_float_param (p, "progress", gsk_cross_fade_node_get_progress (node), 0.5f);
+ append_node_param (p, "start", gsk_cross_fade_node_get_start_child (node));
end_node (p);
}
@@ -1547,33 +1752,26 @@ render_node_print (Printer *p,
case GSK_LINEAR_GRADIENT_NODE:
{
const guint n_stops = gsk_linear_gradient_node_get_n_color_stops (node);
- const GskColorStop *stop;
+ const GskColorStop *stops = gsk_linear_gradient_node_peek_color_stops (node);
int i;
start_node (p, "linear-gradient");
append_rect_param (p, "bounds", &node->bounds);
- append_point_param (p, "start", gsk_linear_gradient_node_peek_start (node));
append_point_param (p, "end", gsk_linear_gradient_node_peek_end (node));
+ append_point_param (p, "start", gsk_linear_gradient_node_peek_start (node));
_indent (p);
- g_string_append (p->str, "stops:");
- for (i = 0; i < n_stops - 1; i ++)
+ g_string_append (p->str, "stops: ");
+ for (i = 0; i < n_stops; i ++)
{
- stop = gsk_linear_gradient_node_peek_color_stops (node) + i;
+ if (i > 0)
+ g_string_append (p->str, ", ");
+ string_append_double (p->str, stops[i].offset);
g_string_append_c (p->str, ' ');
- string_append_double (p->str, stop->offset);
- g_string_append_c (p->str, ' ');
- append_rgba (p->str, &stop->color);
- g_string_append_c (p->str, ',');
+ append_rgba (p->str, &stops[i].color);
}
-
- /* Last one, no comma */
- stop = gsk_linear_gradient_node_peek_color_stops (node) + n_stops - 1;
- string_append_double (p->str, stop->offset);
- g_string_append_c (p->str, ' ');
- append_rgba (p->str, &stop->color);
g_string_append (p->str, ";\n");
end_node (p);
@@ -1584,8 +1782,8 @@ render_node_print (Printer *p,
{
start_node (p, "opacity");
- append_float_param (p, "opacity", gsk_opacity_node_get_opacity (node));
append_node_param (p, "child", gsk_opacity_node_get_child (node));
+ append_float_param (p, "opacity", gsk_opacity_node_get_opacity (node), 0.5f);
end_node (p);
}
@@ -1593,14 +1791,17 @@ render_node_print (Printer *p,
case GSK_OUTSET_SHADOW_NODE:
{
+ const GdkRGBA *color = gsk_outset_shadow_node_peek_color (node);
+
start_node (p, "outset-shadow");
+ append_float_param (p, "blur", gsk_outset_shadow_node_get_blur_radius (node), 0.0f);
+ if (!gdk_rgba_equal (color, &GDK_RGBA("000")))
+ append_rgba_param (p, "color", color);
+ append_float_param (p, "dx", gsk_outset_shadow_node_get_dx (node), 1.0f);
+ append_float_param (p, "dy", gsk_outset_shadow_node_get_dy (node), 1.0f);
append_rounded_rect_param (p, "outline", gsk_outset_shadow_node_peek_outline (node));
- append_rgba_param (p, "color", gsk_outset_shadow_node_peek_color (node));
- append_float_param (p, "dx", gsk_outset_shadow_node_get_dx (node));
- append_float_param (p, "dy", gsk_outset_shadow_node_get_dy (node));
- append_float_param (p, "spread", gsk_outset_shadow_node_get_spread (node));
- append_float_param (p, "blur", gsk_outset_shadow_node_get_blur_radius (node));
+ append_float_param (p, "spread", gsk_outset_shadow_node_get_spread (node), 0.0f);
end_node (p);
}
@@ -1610,8 +1811,8 @@ render_node_print (Printer *p,
{
start_node (p, "clip");
- append_rect_param (p, "clip", gsk_clip_node_peek_clip (node));
append_node_param (p, "child", gsk_clip_node_get_child (node));
+ append_rect_param (p, "clip", gsk_clip_node_peek_clip (node));
end_node (p);
}
@@ -1621,8 +1822,8 @@ render_node_print (Printer *p,
{
start_node (p, "rounded-clip");
- append_rounded_rect_param (p, "clip", gsk_rounded_clip_node_peek_clip (node));
append_node_param (p, "child", gsk_rounded_clip_node_get_child (node));
+ append_rounded_rect_param (p, "clip", gsk_rounded_clip_node_peek_clip (node));
end_node (p);
@@ -1631,10 +1832,12 @@ render_node_print (Printer *p,
case GSK_TRANSFORM_NODE:
{
+ GskTransform *transform = gsk_transform_node_get_transform (node);
start_node (p, "transform");
- append_transform_param (p, "transform", gsk_transform_node_get_transform (node));
append_node_param (p, "child", gsk_transform_node_get_child (node));
+ if (gsk_transform_get_category (transform) != GSK_TRANSFORM_CATEGORY_IDENTITY)
+ append_transform_param (p, "transform", transform);
end_node (p);
}
@@ -1644,9 +1847,11 @@ render_node_print (Printer *p,
{
start_node (p, "color-matrix");
- append_matrix_param (p, "matrix", gsk_color_matrix_node_peek_color_matrix (node));
- append_vec4_param (p, "offset", gsk_color_matrix_node_peek_color_offset (node));
append_node_param (p, "child", gsk_color_matrix_node_get_child (node));
+ if (!graphene_matrix_is_identity (gsk_color_matrix_node_peek_color_matrix (node)))
+ append_matrix_param (p, "matrix", gsk_color_matrix_node_peek_color_matrix (node));
+ if (!graphene_vec4_equal (gsk_color_matrix_node_peek_color_offset (node), graphene_vec4_zero ()))
+ append_vec4_param (p, "offset", gsk_color_matrix_node_peek_color_offset (node));
end_node (p);
}
@@ -1654,31 +1859,60 @@ render_node_print (Printer *p,
case GSK_BORDER_NODE:
{
+ const GdkRGBA *colors = gsk_border_node_peek_colors (node);
+ const float *widths = gsk_border_node_peek_widths (node);
+ guint i, n;
start_node (p, "border");
- append_rounded_rect_param (p, "outline", gsk_border_node_peek_outline (node));
+ if (!gdk_rgba_equal (&colors[3], &colors[1]))
+ n = 4;
+ else if (!gdk_rgba_equal (&colors[2], &colors[0]))
+ n = 3;
+ else if (!gdk_rgba_equal (&colors[1], &colors[0]))
+ n = 2;
+ else if (!gdk_rgba_equal (&colors[0], &GDK_RGBA("000000")))
+ n = 1;
+ else
+ n = 0;
+
+ if (n > 0)
+ {
+ _indent (p);
+ g_string_append (p->str, "colors: ");
+ for (i = 0; i < n; i++)
+ {
+ if (i > 0)
+ g_string_append_c (p->str, ' ');
+ append_rgba (p->str, &colors[i]);
+ }
+ g_string_append (p->str, ";\n");
+ }
- _indent (p);
- g_string_append (p->str, "widths: ");
- string_append_double (p->str, gsk_border_node_peek_widths (node)[0]);
- g_string_append_c (p->str, ' ');
- string_append_double (p->str, gsk_border_node_peek_widths (node)[1]);
- g_string_append_c (p->str, ' ');
- string_append_double (p->str, gsk_border_node_peek_widths (node)[2]);
- g_string_append_c (p->str, ' ');
- string_append_double (p->str, gsk_border_node_peek_widths (node)[3]);
- g_string_append (p->str, ";\n");
+ append_rounded_rect_param (p, "outline", gsk_border_node_peek_outline (node));
- _indent (p);
- g_string_append (p->str, "colors: ");
- append_rgba (p->str, &gsk_border_node_peek_colors (node)[0]);
- g_string_append_c (p->str, ' ');
- append_rgba (p->str, &gsk_border_node_peek_colors (node)[1]);
- g_string_append_c (p->str, ' ');
- append_rgba (p->str, &gsk_border_node_peek_colors (node)[2]);
- g_string_append_c (p->str, ' ');
- append_rgba (p->str, &gsk_border_node_peek_colors (node)[3]);
- g_string_append (p->str, ";\n");
+ if (widths[3] != widths[1])
+ n = 4;
+ else if (widths[2] != widths[0])
+ n = 3;
+ else if (widths[1] != widths[0])
+ n = 2;
+ else if (widths[0] != 1.0)
+ n = 1;
+ else
+ n = 0;
+
+ if (n > 0)
+ {
+ _indent (p);
+ g_string_append (p->str, "widths: ");
+ for (i = 0; i < n; i++)
+ {
+ if (i > 0)
+ g_string_append_c (p->str, ' ');
+ string_append_double (p->str, widths[i]);
+ }
+ g_string_append (p->str, ";\n");
+ }
end_node (p);
}
@@ -1691,6 +1925,8 @@ render_node_print (Printer *p,
start_node (p, "shadow");
+ append_node_param (p, "child", gsk_shadow_node_get_child (node));
+
_indent (p);
g_string_append (p->str, "shadows: ");
for (i = 0; i < n_shadows; i ++)
@@ -1698,17 +1934,20 @@ render_node_print (Printer *p,
const GskShadow *s = gsk_shadow_node_peek_shadow (node, i);
char *color;
+ if (i > 0)
+ g_string_append (p->str, ", ");
+
color = gdk_rgba_to_string (&s->color);
g_string_append (p->str, color);
g_string_append_c (p->str, ' ');
string_append_double (p->str, s->dx);
g_string_append_c (p->str, ' ');
string_append_double (p->str, s->dy);
- g_string_append_c (p->str, ' ');
- string_append_double (p->str, s->radius);
-
- if (i < n_shadows - 1)
- g_string_append (p->str, ", ");
+ if (s->radius > 0)
+ {
+ g_string_append_c (p->str, ' ');
+ string_append_double (p->str, s->radius);
+ }
g_free (color);
}
@@ -1716,22 +1955,22 @@ render_node_print (Printer *p,
g_string_append_c (p->str, ';');
g_string_append_c (p->str, '\n');
- append_node_param (p, "child", gsk_shadow_node_get_child (node));
-
end_node (p);
}
break;
case GSK_INSET_SHADOW_NODE:
{
+ const GdkRGBA *color = gsk_inset_shadow_node_peek_color (node);
start_node (p, "inset-shadow");
+ append_float_param (p, "blur", gsk_inset_shadow_node_get_blur_radius (node), 0.0f);
+ if (!gdk_rgba_equal (color, &GDK_RGBA("000")))
+ append_rgba_param (p, "color", color);
+ append_float_param (p, "dx", gsk_inset_shadow_node_get_dx (node), 1.0f);
+ append_float_param (p, "dy", gsk_inset_shadow_node_get_dy (node), 1.0f);
append_rounded_rect_param (p, "outline", gsk_inset_shadow_node_peek_outline (node));
- append_rgba_param (p, "color", gsk_inset_shadow_node_peek_color (node));
- append_float_param (p, "dx", gsk_inset_shadow_node_get_dx (node));
- append_float_param (p, "dy", gsk_inset_shadow_node_get_dy (node));
- append_float_param (p, "spread", gsk_inset_shadow_node_get_spread (node));
- append_float_param (p, "blur", gsk_inset_shadow_node_get_blur_radius (node));
+ append_float_param (p, "spread", gsk_inset_shadow_node_get_spread (node), 0.0f);
end_node (p);
}
@@ -1765,56 +2004,108 @@ render_node_print (Printer *p,
case GSK_TEXT_NODE:
{
const guint n_glyphs = gsk_text_node_get_num_glyphs (node);
- const PangoGlyphInfo *glyph;
+ const PangoGlyphInfo *glyphs = gsk_text_node_peek_glyphs (node);
+ const graphene_point_t *offset = gsk_text_node_get_offset (node);
+ const GdkRGBA *color = gsk_text_node_peek_color (node);
+ PangoFont *font = gsk_text_node_peek_font (node);
PangoFontDescription *desc;
char *font_name;
- guint i;
+ GString *str;
+ guint i, j;
+ PangoGlyphString *ascii = create_ascii_glyphs (font);
+
start_node (p, "text");
+ if (!gdk_rgba_equal (color, &GDK_RGBA("000000")))
+ append_rgba_param (p, "color", color);
+
_indent (p);
- desc = pango_font_describe ((PangoFont *)gsk_text_node_peek_font (node));;
+ desc = pango_font_describe (font);
font_name = pango_font_description_to_string (desc);
+ if (ascii == NULL)
+ g_print ("\"%s\" has no ascii table\n", font_name);
g_string_append_printf (p->str, "font: \"%s\";\n", font_name);
g_free (font_name);
pango_font_description_free (desc);
- append_float_param (p, "x", gsk_text_node_get_x (node));
- append_float_param (p, "y", gsk_text_node_get_y (node));
- append_rgba_param (p, "color", gsk_text_node_peek_color (node));
-
_indent (p);
+ str = g_string_new (NULL);
g_string_append (p->str, "glyphs: ");
- glyph = gsk_text_node_peek_glyphs (node);
- g_string_append_printf (p->str, "%u %i %i %i %i",
- glyph->glyph, glyph->geometry.width,
- glyph->geometry.x_offset, glyph->geometry.y_offset,
- glyph->attr.is_cluster_start);
-
- for (i = 1; i < n_glyphs; i ++)
+ for (i = 0; i < n_glyphs; i++)
{
- glyph = gsk_text_node_peek_glyphs (node) + i;
- g_string_append_printf (p->str, ", %u %i %i %i %i",
- glyph->glyph, glyph->geometry.width,
- glyph->geometry.x_offset, glyph->geometry.y_offset,
- glyph->attr.is_cluster_start);
+ if (ascii)
+ {
+ for (j = 0; j < ascii->num_glyphs; j++)
+ {
+ if (glyphs[i].glyph == ascii->glyphs[j].glyph &&
+ glyphs[i].geometry.width == ascii->glyphs[j].geometry.width &&
+ glyphs[i].geometry.x_offset == 0 &&
+ glyphs[i].geometry.x_offset == 0 &&
+ glyphs[i].attr.is_cluster_start)
+ {
+ g_string_append_c (str, j + MIN_ASCII_GLYPH);
+ break;
+ }
+ }
+ if (j != ascii->num_glyphs)
+ continue;
+ }
+
+ if (str->len)
+ {
+ g_string_append_printf (p->str, "\"%s\", ", str->str);
+ g_string_set_size (str, 0);
+ }
+
+ g_string_append_printf (p->str, "%u %g",
+ glyphs[i].glyph,
+ (double) glyphs[i].geometry.width / PANGO_SCALE);
+ if (!glyphs[i].attr.is_cluster_start ||
+ glyphs[i].geometry.x_offset != 0 ||
+ glyphs[i].geometry.y_offset != 0)
+ {
+ g_string_append_printf (p->str, "%g %g",
+ (double) glyphs[i].geometry.x_offset / PANGO_SCALE,
+ (double) glyphs[i].geometry.y_offset / PANGO_SCALE);
+ if (!glyphs[i].attr.is_cluster_start)
+ g_string_append (p->str, " same-cluster");
+ }
+
+ if (i + 1 < n_glyphs)
+ g_string_append (p->str, ", ");
}
+ if (str->len)
+ g_string_append_printf (p->str, "\"%s\"", str->str);
+
g_string_append_c (p->str, ';');
g_string_append_c (p->str, '\n');
+ if (!graphene_point_equal (offset, graphene_point_zero ()))
+ append_point_param (p, "offset", offset);
+
end_node (p);
+
+ g_string_free (str, TRUE);
+ if (ascii)
+ pango_glyph_string_free (ascii);
}
break;
case GSK_DEBUG_NODE:
{
+ const char *message = gsk_debug_node_get_message (node);
+
start_node (p, "debug");
- _indent (p);
+ append_node_param (p, "child", gsk_debug_node_get_child (node));
/* TODO: We potentially need to escape certain characters in the message */
- g_string_append_printf (p->str, "message: \"%s\";\n", gsk_debug_node_get_message (node));
+ if (message)
+ {
+ _indent (p);
+ g_string_append_printf (p->str, "message: \"%s\";\n", message);
+ }
- append_node_param (p, "child", gsk_debug_node_get_child (node));
end_node (p);
}
break;
@@ -1823,7 +2114,7 @@ render_node_print (Printer *p,
{
start_node (p, "blur");
- append_float_param (p, "blur", gsk_blur_node_get_radius (node));
+ append_float_param (p, "blur", gsk_blur_node_get_radius (node), 1.0f);
append_node_param (p, "child", gsk_blur_node_get_child (node));
end_node (p);
@@ -1832,11 +2123,16 @@ render_node_print (Printer *p,
case GSK_REPEAT_NODE:
{
+ GskRenderNode *child = gsk_repeat_node_get_child (node);
+ const graphene_rect_t *child_bounds = gsk_repeat_node_peek_child_bounds (node);
+
start_node (p, "repeat");
- append_rect_param (p, "bounds", &node->bounds);
- append_rect_param (p, "child-bounds", gsk_repeat_node_peek_child_bounds (node));
+ if (!graphene_rect_equal (&node->bounds, &child->bounds))
+ append_rect_param (p, "bounds", &node->bounds);
append_node_param (p, "child", gsk_repeat_node_get_child (node));
+ if (!graphene_rect_equal (child_bounds, &child->bounds))
+ append_rect_param (p, "child-bounds", child_bounds);
end_node (p);
}
@@ -1849,17 +2145,21 @@ render_node_print (Printer *p,
start_node (p, "blend");
- _indent (p);
- for (i = 0; i < G_N_ELEMENTS (blend_modes); i++)
+ append_node_param (p, "bottom", gsk_blend_node_get_bottom_child (node));
+
+ if (mode != GSK_BLEND_MODE_DEFAULT)
{
- if (blend_modes[i].mode == mode)
+ _indent (p);
+ for (i = 0; i < G_N_ELEMENTS (blend_modes); i++)
{
- g_string_append_printf (p->str, "mode: %s;\n", blend_modes[i].name);
- break;
+ if (blend_modes[i].mode == mode)
+ {
+ g_string_append_printf (p->str, "mode: %s;\n", blend_modes[i].name);
+ break;
+ }
}
}
append_node_param (p, "top", gsk_blend_node_get_top_child (node));
- append_node_param (p, "bottom", gsk_blend_node_get_bottom_child (node));
end_node (p);
}
@@ -1877,13 +2177,44 @@ render_node_print (Printer *p,
}
}
-char *
-gsk_render_node_serialize_to_string (GskRenderNode *root)
+/**
+ * gsk_render_node_serialize:
+ * @node: a #GskRenderNode
+ *
+ * Serializes the @node for later deserialization via
+ * gsk_render_node_deserialize(). No guarantees are made about the format
+ * used other than that the same version of GTK+ will be able to deserialize
+ * the result of a call to gsk_render_node_serialize() and
+ * gsk_render_node_deserialize() will correctly reject files it cannot open
+ * that were created with previous versions of GTK+.
+ *
+ * The intended use of this functions is testing, benchmarking and debugging.
+ * The format is not meant as a permanent storage format.
+ *
+ * Returns: a #GBytes representing the node.
+ **/
+GBytes *
+gsk_render_node_serialize (GskRenderNode *node)
{
Printer p;
printer_init (&p);
- render_node_print (&p, root);
- return g_string_free (p.str, FALSE);
+ if (gsk_render_node_get_node_type (node) == GSK_CONTAINER_NODE)
+ {
+ guint i;
+
+ for (i = 0; i < gsk_container_node_get_n_children (node); i ++)
+ {
+ GskRenderNode *child = gsk_container_node_get_child (node, i);
+
+ render_node_print (&p, child);
+ }
+ }
+ else
+ {
+ render_node_print (&p, node);
+ }
+
+ return g_string_free_to_bytes (p.str);
}
diff --git a/gsk/gskrendernodeparserprivate.h b/gsk/gskrendernodeparserprivate.h
index a506244429..7994488772 100644
--- a/gsk/gskrendernodeparserprivate.h
+++ b/gsk/gskrendernodeparserprivate.h
@@ -7,6 +7,5 @@
GskRenderNode * gsk_render_node_deserialize_from_bytes (GBytes *bytes,
GskParseErrorFunc error_func,
gpointer user_data);
-char * gsk_render_node_serialize_to_string (GskRenderNode *root);
#endif
diff --git a/gsk/meson.build b/gsk/meson.build
index a3b3ba002b..5b3e4d7ee6 100644
--- a/gsk/meson.build
+++ b/gsk/meson.build
@@ -26,6 +26,7 @@ gsk_public_sources = files([
'gskrenderer.c',
'gskrendernode.c',
'gskrendernodeimpl.c',
+ 'gskrendernodeparser.c',
'gskroundedrect.c',
'gsktransform.c',
'gl/gskglrenderer.c',
@@ -36,7 +37,6 @@ gsk_private_sources = files([
'gskdebug.c',
'gskprivate.c',
'gskprofiler.c',
- 'gskrendernodeparser.c',
'gl/gskshaderbuilder.c',
'gl/gskglprofiler.c',
'gl/gskglglyphcache.c',
diff --git a/gsk/vulkan/gskvulkancolortextpipeline.c b/gsk/vulkan/gskvulkancolortextpipeline.c
index 9770b27938..a7b0ad39a7 100644
--- a/gsk/vulkan/gskvulkancolortextpipeline.c
+++ b/gsk/vulkan/gskvulkancolortextpipeline.c
@@ -100,8 +100,7 @@ gsk_vulkan_color_text_pipeline_collect_vertex_data (GskVulkanColorTextPipeline *
PangoFont *font,
guint total_glyphs,
const PangoGlyphInfo *glyphs,
- float x,
- float y,
+ const graphene_point_t *offset,
guint start_glyph,
guint num_glyphs,
float scale)
@@ -132,8 +131,8 @@ gsk_vulkan_color_text_pipeline_collect_vertex_data (GskVulkanColorTextPipeline *
instance->tex_rect[2] = glyph->tw;
instance->tex_rect[3] = glyph->th;
- instance->rect[0] = x + cx + glyph->draw_x;
- instance->rect[1] = y + cy + glyph->draw_y;
+ instance->rect[0] = offset->x + cx + glyph->draw_x;
+ instance->rect[1] = offset->y + cy + glyph->draw_y;
instance->rect[2] = glyph->draw_width;
instance->rect[3] = glyph->draw_height;
diff --git a/gsk/vulkan/gskvulkancolortextpipelineprivate.h b/gsk/vulkan/gskvulkancolortextpipelineprivate.h
index 2e46b1c6a8..a549c25fcd 100644
--- a/gsk/vulkan/gskvulkancolortextpipelineprivate.h
+++ b/gsk/vulkan/gskvulkancolortextpipelineprivate.h
@@ -28,8 +28,7 @@ void gsk_vulkan_color_text_pipeline_collect_vertex_data (Gs
PangoFont *font,
guint total_glyphs,
const PangoGlyphInfo *glyphs,
- float x,
- float y,
+ const graphene_point_t *offset,
guint start_glyph,
guint num_glyphs,
float scale);
diff --git a/gsk/vulkan/gskvulkanrenderpass.c b/gsk/vulkan/gskvulkanrenderpass.c
index fedd07a832..55f96456a8 100644
--- a/gsk/vulkan/gskvulkanrenderpass.c
+++ b/gsk/vulkan/gskvulkanrenderpass.c
@@ -1206,8 +1206,7 @@ gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
gsk_text_node_get_num_glyphs (op->text.node),
gsk_text_node_peek_glyphs (op->text.node),
gsk_text_node_peek_color (op->text.node),
- gsk_text_node_get_x (op->text.node),
- gsk_text_node_get_y (op->text.node),
+ gsk_text_node_get_offset (op->text.node),
op->text.start_glyph,
op->text.num_glyphs,
op->text.scale);
@@ -1225,8 +1224,7 @@ gsk_vulkan_render_pass_collect_vertex_data (GskVulkanRenderPass *self,
(PangoFont *)gsk_text_node_peek_font (op->text.node),
gsk_text_node_get_num_glyphs (op->text.node),
gsk_text_node_peek_glyphs (op->text.node),
- gsk_text_node_get_x (op->text.node),
- gsk_text_node_get_y (op->text.node),
+ gsk_text_node_get_offset (op->text.node),
op->text.start_glyph,
op->text.num_glyphs,
op->text.scale);
diff --git a/gsk/vulkan/gskvulkantextpipeline.c b/gsk/vulkan/gskvulkantextpipeline.c
index 361c53675d..7cd85c5d9a 100644
--- a/gsk/vulkan/gskvulkantextpipeline.c
+++ b/gsk/vulkan/gskvulkantextpipeline.c
@@ -108,8 +108,7 @@ gsk_vulkan_text_pipeline_collect_vertex_data (GskVulkanTextPipeline *pipeline,
guint total_glyphs,
const PangoGlyphInfo *glyphs,
const GdkRGBA *color,
- float x,
- float y,
+ const graphene_point_t *offset,
guint start_glyph,
guint num_glyphs,
float scale)
@@ -140,8 +139,8 @@ gsk_vulkan_text_pipeline_collect_vertex_data (GskVulkanTextPipeline *pipeline,
instance->tex_rect[2] = glyph->tw;
instance->tex_rect[3] = glyph->th;
- instance->rect[0] = x + cx + glyph->draw_x;
- instance->rect[1] = y + cy + glyph->draw_y;
+ instance->rect[0] = offset->x + cx + glyph->draw_x;
+ instance->rect[1] = offset->y + cy + glyph->draw_y;
instance->rect[2] = glyph->draw_width;
instance->rect[3] = glyph->draw_height;
diff --git a/gsk/vulkan/gskvulkantextpipelineprivate.h b/gsk/vulkan/gskvulkantextpipelineprivate.h
index 47517de03c..c186c4d983 100644
--- a/gsk/vulkan/gskvulkantextpipelineprivate.h
+++ b/gsk/vulkan/gskvulkantextpipelineprivate.h
@@ -29,8 +29,7 @@ void gsk_vulkan_text_pipeline_collect_vertex_data (GskVulka
guint total_glyphs,
const PangoGlyphInfo *glyphs,
const GdkRGBA *color,
- float x,
- float y,
+ const graphene_point_t *offset,
guint start_glyph,
guint num_glyphs,
float scale);
diff --git a/gtk/gtksnapshot.c b/gtk/gtksnapshot.c
index 98d86619a3..592ba9bdda 100644
--- a/gtk/gtksnapshot.c
+++ b/gtk/gtksnapshot.c
@@ -1724,8 +1724,7 @@ gtk_snapshot_append_text (GtkSnapshot *snapshot,
node = gsk_text_node_new (font,
glyphs,
color,
- x + dx,
- y + dy);
+ &GRAPHENE_POINT_INIT (x + dx, y + dy));
if (node == NULL)
return;
diff --git a/gtk/inspector/recorder.c b/gtk/inspector/recorder.c
index 788d96d72a..0eda397f44 100644
--- a/gtk/inspector/recorder.c
+++ b/gtk/inspector/recorder.c
@@ -636,8 +636,7 @@ populate_render_node_properties (GtkListStore *store,
const PangoGlyphInfo *glyphs = gsk_text_node_peek_glyphs (node);
const GdkRGBA *color = gsk_text_node_peek_color (node);
guint num_glyphs = gsk_text_node_get_num_glyphs (node);
- float x = gsk_text_node_get_x (node);
- float y = gsk_text_node_get_y (node);
+ const graphene_point_t *offset = gsk_text_node_get_offset (node);
PangoFontDescription *desc;
GString *s;
int i;
@@ -654,7 +653,7 @@ populate_render_node_properties (GtkListStore *store,
add_text_row (store, "Glyphs", s->str);
g_string_free (s, TRUE);
- tmp = g_strdup_printf ("%.2f %.2f", x, y);
+ tmp = g_strdup_printf ("%.2f %.2f", offset->x, offset->y);
add_text_row (store, "Position", tmp);
g_free (tmp);
diff --git a/tests/rendernode-create-tests.c b/tests/rendernode-create-tests.c
index be0c99d344..c81a457169 100644
--- a/tests/rendernode-create-tests.c
+++ b/tests/rendernode-create-tests.c
@@ -426,7 +426,7 @@ text (guint n)
{
GskRenderNode *node;
- node = gsk_text_node_new (font, run->glyphs, &color, x, y);
+ node = gsk_text_node_new (font, run->glyphs, &color, &GRAPHENE_POINT_INIT (x, y));
if (node)
g_ptr_array_add (nodes, node);
}
diff --git a/testsuite/gsk/compare-render.c b/testsuite/gsk/compare-render.c
index 92691c8b34..b12f2459e3 100644
--- a/testsuite/gsk/compare-render.c
+++ b/testsuite/gsk/compare-render.c
@@ -61,8 +61,8 @@ deserialize_error_func (const GtkCssSection *section,
{
char *section_str = gtk_css_section_to_string (section);
- g_test_message ("Error at %s: %s", section_str, error->message);
- g_test_fail ();
+ g_print ("Error at %s: %s", section_str, error->message);
+ *((gboolean *) user_data) = FALSE;
free (section_str);
}
@@ -84,6 +84,7 @@ main (int argc, char **argv)
GskRenderNode *node;
const char *node_file;
const char *png_file;
+ gboolean success = TRUE;
g_assert (argc == 3);
@@ -109,12 +110,11 @@ main (int argc, char **argv)
{
g_print ("Could not open node file: %s\n", error->message);
g_clear_error (&error);
- g_test_fail ();
- return -1;
+ return 1;
}
bytes = g_bytes_new_take (contents, len);
- node = gsk_render_node_deserialize (bytes, deserialize_error_func, NULL);
+ node = gsk_render_node_deserialize (bytes, deserialize_error_func, &success);
g_bytes_unref (bytes);
g_assert_no_error (error);
@@ -135,15 +135,30 @@ main (int argc, char **argv)
/* Load the given reference png file */
reference_surface = cairo_image_surface_create_from_png (png_file);
- g_assert (reference_surface != NULL);
-
- /* Now compare the two */
- diff_surface = reftest_compare_surfaces (rendered_surface, reference_surface);
+ if (cairo_surface_status (reference_surface))
+ {
+ g_print ("Error loading reference surface: %s\n",
+ cairo_status_to_string (cairo_surface_status (reference_surface)));
+ success = FALSE;
+ }
+ else
+ {
+ /* Now compare the two */
+ diff_surface = reftest_compare_surfaces (rendered_surface, reference_surface);
+
+ if (diff_surface)
+ {
+ save_image (diff_surface, node_file, ".diff.png");
+ cairo_surface_destroy (diff_surface);
+ success = FALSE;
+ }
+ }
save_image (rendered_surface, node_file, ".out.png");
- if (diff_surface)
- save_image (diff_surface, node_file, ".diff.png");
+ cairo_surface_destroy (reference_surface);
+ cairo_surface_destroy (rendered_surface);
+ g_object_unref (texture);
- return diff_surface == NULL ? 0 : 1;
+ return success ? 0 : 1;
}
diff --git a/testsuite/gsk/compare/empty-blend.node b/testsuite/gsk/compare/empty-blend.node
new file mode 100644
index 0000000000..291d805ff7
--- /dev/null
+++ b/testsuite/gsk/compare/empty-blend.node
@@ -0,0 +1 @@
+blend { }
diff --git a/testsuite/gsk/compare/empty-blend.png b/testsuite/gsk/compare/empty-blend.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-blend.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-blur.node b/testsuite/gsk/compare/empty-blur.node
new file mode 100644
index 0000000000..a4a6298c09
--- /dev/null
+++ b/testsuite/gsk/compare/empty-blur.node
@@ -0,0 +1,20 @@
+blur { }
+
+/* The blur algorithm isn't specified, so
+ don't test it. */
+color {
+ bounds: -3 -3 50 6;
+ color: black;
+}
+color {
+ bounds: 47 -3 6 50;
+ color: black;
+}
+color {
+ bounds: 3 47 50 6;
+ color: black;
+}
+color {
+ bounds: -3 3 6 50;
+ color: black;
+}
diff --git a/testsuite/gsk/compare/empty-blur.png b/testsuite/gsk/compare/empty-blur.png
new file mode 100644
index 0000000000..313d6d8811
--- /dev/null
+++ b/testsuite/gsk/compare/empty-blur.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-border.node b/testsuite/gsk/compare/empty-border.node
new file mode 100644
index 0000000000..0a58c89c65
--- /dev/null
+++ b/testsuite/gsk/compare/empty-border.node
@@ -0,0 +1 @@
+border { }
diff --git a/testsuite/gsk/compare/empty-border.png b/testsuite/gsk/compare/empty-border.png
new file mode 100644
index 0000000000..5d3e0fdcb1
--- /dev/null
+++ b/testsuite/gsk/compare/empty-border.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-clip.node b/testsuite/gsk/compare/empty-clip.node
new file mode 100644
index 0000000000..c513eb6597
--- /dev/null
+++ b/testsuite/gsk/compare/empty-clip.node
@@ -0,0 +1 @@
+clip { }
diff --git a/testsuite/gsk/compare/empty-clip.png b/testsuite/gsk/compare/empty-clip.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-clip.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-color-matrix.node b/testsuite/gsk/compare/empty-color-matrix.node
new file mode 100644
index 0000000000..c0fcc1cbd5
--- /dev/null
+++ b/testsuite/gsk/compare/empty-color-matrix.node
@@ -0,0 +1 @@
+color-matrix { }
diff --git a/testsuite/gsk/compare/empty-color-matrix.png b/testsuite/gsk/compare/empty-color-matrix.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-color-matrix.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-color.node b/testsuite/gsk/compare/empty-color.node
new file mode 100644
index 0000000000..adaf509095
--- /dev/null
+++ b/testsuite/gsk/compare/empty-color.node
@@ -0,0 +1 @@
+color { }
diff --git a/testsuite/gsk/compare/empty-color.png b/testsuite/gsk/compare/empty-color.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-color.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-container.node b/testsuite/gsk/compare/empty-container.node
new file mode 100644
index 0000000000..2ab6cf0ccb
--- /dev/null
+++ b/testsuite/gsk/compare/empty-container.node
@@ -0,0 +1,8 @@
+container { }
+
+/* We need to contain something because 0x0 nodes
+ cause NULL textures */
+color {
+ bounds: -1 -1 1 1;
+ color: transparent;
+}
diff --git a/testsuite/gsk/compare/empty-container.png b/testsuite/gsk/compare/empty-container.png
new file mode 100644
index 0000000000..7238a64657
--- /dev/null
+++ b/testsuite/gsk/compare/empty-container.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-cross-fade.node b/testsuite/gsk/compare/empty-cross-fade.node
new file mode 100644
index 0000000000..1b69ede5fc
--- /dev/null
+++ b/testsuite/gsk/compare/empty-cross-fade.node
@@ -0,0 +1,9 @@
+cross-fade { }
+
+/* This is not very useful as a test, because the
+ resulting color is undefined, because 0.5 * 255
+ can be rounded to either 127 or 128 by the renderers.
+ But at least we know they get the size right... */
+color {
+ color: black;
+}
diff --git a/testsuite/gsk/compare/empty-cross-fade.png b/testsuite/gsk/compare/empty-cross-fade.png
new file mode 100644
index 0000000000..68e443cac3
--- /dev/null
+++ b/testsuite/gsk/compare/empty-cross-fade.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-debug.node b/testsuite/gsk/compare/empty-debug.node
new file mode 100644
index 0000000000..088a305cf9
--- /dev/null
+++ b/testsuite/gsk/compare/empty-debug.node
@@ -0,0 +1 @@
+debug { }
diff --git a/testsuite/gsk/compare/empty-debug.png b/testsuite/gsk/compare/empty-debug.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-debug.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-inset-shadow.node b/testsuite/gsk/compare/empty-inset-shadow.node
new file mode 100644
index 0000000000..5b84e7c8a5
--- /dev/null
+++ b/testsuite/gsk/compare/empty-inset-shadow.node
@@ -0,0 +1 @@
+inset-shadow { }
diff --git a/testsuite/gsk/compare/empty-inset-shadow.png b/testsuite/gsk/compare/empty-inset-shadow.png
new file mode 100644
index 0000000000..b159674785
--- /dev/null
+++ b/testsuite/gsk/compare/empty-inset-shadow.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-linear-gradient.node b/testsuite/gsk/compare/empty-linear-gradient.node
new file mode 100644
index 0000000000..ef6234b661
--- /dev/null
+++ b/testsuite/gsk/compare/empty-linear-gradient.node
@@ -0,0 +1 @@
+linear-gradient { }
diff --git a/testsuite/gsk/compare/empty-linear-gradient.png b/testsuite/gsk/compare/empty-linear-gradient.png
new file mode 100644
index 0000000000..f0e1db0e27
--- /dev/null
+++ b/testsuite/gsk/compare/empty-linear-gradient.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-opacity.node b/testsuite/gsk/compare/empty-opacity.node
new file mode 100644
index 0000000000..ef197ada17
--- /dev/null
+++ b/testsuite/gsk/compare/empty-opacity.node
@@ -0,0 +1,9 @@
+opacity { }
+
+/* This is not very useful as a test, because the
+ resulting color is undefined, because 0.5 * 255
+ can be rounded to either 127 or 128 by the renderers.
+ But at least we know they get the size right... */
+color {
+ color: black;
+}
diff --git a/testsuite/gsk/compare/empty-opacity.png b/testsuite/gsk/compare/empty-opacity.png
new file mode 100644
index 0000000000..68e443cac3
--- /dev/null
+++ b/testsuite/gsk/compare/empty-opacity.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-outset-shadow.node b/testsuite/gsk/compare/empty-outset-shadow.node
new file mode 100644
index 0000000000..87858be472
--- /dev/null
+++ b/testsuite/gsk/compare/empty-outset-shadow.node
@@ -0,0 +1 @@
+outset-shadow { }
diff --git a/testsuite/gsk/compare/empty-outset-shadow.png b/testsuite/gsk/compare/empty-outset-shadow.png
new file mode 100644
index 0000000000..3a5fd99bdd
--- /dev/null
+++ b/testsuite/gsk/compare/empty-outset-shadow.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-repeat.node b/testsuite/gsk/compare/empty-repeat.node
new file mode 100644
index 0000000000..9f82f0e3ac
--- /dev/null
+++ b/testsuite/gsk/compare/empty-repeat.node
@@ -0,0 +1 @@
+repeat { }
diff --git a/testsuite/gsk/compare/empty-repeat.png b/testsuite/gsk/compare/empty-repeat.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-repeat.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-rounded-clip.node b/testsuite/gsk/compare/empty-rounded-clip.node
new file mode 100644
index 0000000000..28373aa45f
--- /dev/null
+++ b/testsuite/gsk/compare/empty-rounded-clip.node
@@ -0,0 +1 @@
+rounded-clip { }
diff --git a/testsuite/gsk/compare/empty-rounded-clip.png b/testsuite/gsk/compare/empty-rounded-clip.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-rounded-clip.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-shadow.node b/testsuite/gsk/compare/empty-shadow.node
new file mode 100644
index 0000000000..3f4879359d
--- /dev/null
+++ b/testsuite/gsk/compare/empty-shadow.node
@@ -0,0 +1 @@
+shadow { }
diff --git a/testsuite/gsk/compare/empty-shadow.png b/testsuite/gsk/compare/empty-shadow.png
new file mode 100644
index 0000000000..47617ce64c
--- /dev/null
+++ b/testsuite/gsk/compare/empty-shadow.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-text.node b/testsuite/gsk/compare/empty-text.node
new file mode 100644
index 0000000000..5964c4e7d1
--- /dev/null
+++ b/testsuite/gsk/compare/empty-text.node
@@ -0,0 +1 @@
+text { }
diff --git a/testsuite/gsk/compare/empty-text.png b/testsuite/gsk/compare/empty-text.png
new file mode 100644
index 0000000000..cd7cd8af8d
--- /dev/null
+++ b/testsuite/gsk/compare/empty-text.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-texture.node b/testsuite/gsk/compare/empty-texture.node
new file mode 100644
index 0000000000..ba8d2d4fb8
--- /dev/null
+++ b/testsuite/gsk/compare/empty-texture.node
@@ -0,0 +1,12 @@
+texture { }
+
+/* The bilinear filtering code can differ
+ between implementations, so cover it */
+color {
+ bounds: 21 0 10 50;
+ color: black;
+}
+color {
+ bounds: 0 21 50 10;
+ color: black;
+}
diff --git a/testsuite/gsk/compare/empty-texture.png b/testsuite/gsk/compare/empty-texture.png
new file mode 100644
index 0000000000..bb5a60636f
--- /dev/null
+++ b/testsuite/gsk/compare/empty-texture.png
Binary files differ
diff --git a/testsuite/gsk/compare/empty-transform.node b/testsuite/gsk/compare/empty-transform.node
new file mode 100644
index 0000000000..4833ddb193
--- /dev/null
+++ b/testsuite/gsk/compare/empty-transform.node
@@ -0,0 +1 @@
+transform { }
diff --git a/testsuite/gsk/compare/empty-transform.png b/testsuite/gsk/compare/empty-transform.png
new file mode 100644
index 0000000000..3a032a391b
--- /dev/null
+++ b/testsuite/gsk/compare/empty-transform.png
Binary files differ
diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build
index 20851649b3..4751dfd537 100644
--- a/testsuite/gsk/meson.build
+++ b/testsuite/gsk/meson.build
@@ -17,14 +17,6 @@ node_parser = executable(
install_dir: testexecdir
)
-serialize_deserialize = executable(
- 'serialize-deserialize',
- ['serialize-deserialize.c'],
- dependencies: libgtk_dep,
- install: get_option('install-tests'),
- install_dir: testexecdir,
-)
-
compare_render_tests = [
'blend-normal',
'blend-difference',
@@ -32,6 +24,25 @@ compare_render_tests = [
'clipped_rounded_clip',
'color-blur0',
'cross-fade-in-opacity',
+ 'empty-blend',
+ 'empty-blur',
+ 'empty-border',
+ 'empty-clip',
+ 'empty-color',
+ 'empty-color-matrix',
+ 'empty-container',
+ 'empty-cross-fade',
+ 'empty-debug',
+ 'empty-inset-shadow',
+ 'empty-linear-gradient',
+ 'empty-opacity',
+ 'empty-outset-shadow',
+ 'empty-repeat',
+ 'empty-rounded-clip',
+ 'empty-shadow',
+ 'empty-text',
+ 'empty-texture',
+ 'empty-transform',
'opacity_clip',
'outset_shadow_offset_both',
'outset_shadow_offset_x',
@@ -69,47 +80,78 @@ foreach renderer : renderers
endforeach
node_parser_tests = [
- 'crash1',
- 'crash2',
- 'crash3',
- 'crash4',
+ 'blend.node',
+ 'border.node',
+ 'color.node',
+ 'crash1.errors',
+ 'crash1.node',
+ 'crash1.ref.node',
+ 'crash2.errors',
+ 'crash2.node',
+ 'crash2.ref.node',
+ 'crash3.node',
+ 'crash3.ref.node',
+ 'crash4.errors',
+ 'crash4.node',
+ 'crash4.ref.node',
+ 'debug.node',
+ 'empty-blend.node',
+ 'empty-blend.ref.node',
+ 'empty-blur.node',
+ 'empty-blur.ref.node',
+ 'empty-border.node',
+ 'empty-border.ref.node',
+ 'empty-clip.node',
+ 'empty-clip.ref.node',
+ 'empty-color.node',
+ 'empty-color.ref.node',
+ 'empty-color-matrix.node',
+ 'empty-color-matrix.ref.node',
+ 'empty-container.node',
+ 'empty-container.ref.node',
+ 'empty-cross-fade.node',
+ 'empty-cross-fade.ref.node',
+ 'empty-debug.node',
+ 'empty-debug.ref.node',
+ 'empty-inset-shadow.node',
+ 'empty-inset-shadow.ref.node',
+ 'empty-linear-gradient.node',
+ 'empty-linear-gradient.ref.node',
+ 'empty-opacity.node',
+ 'empty-opacity.ref.node',
+ 'empty-outset-shadow.node',
+ 'empty-outset-shadow.ref.node',
+ 'empty-repeat.node',
+ 'empty-repeat.ref.node',
+ 'empty-rounded-clip.node',
+ 'empty-rounded-clip.ref.node',
+ 'empty-shadow.node',
+ 'empty-shadow.ref.node',
+ 'empty-text.node',
+ 'empty-text.ref.node',
+ 'empty-texture.node',
+ 'empty-texture.ref.node',
+ 'empty-transform.node',
+ 'empty-transform.ref.node',
+ 'rounded-rect.node',
+ 'shadow.node',
+ 'testswitch.node',
+ 'widgetfactory.node',
]
foreach test : node_parser_tests
- test('parser ' + test, node_parser,
- args: [join_paths(meson.current_source_dir(), 'nodeparser', test + '.node')],
- env: [ 'GIO_USE_VOLUME_MONITOR=unix',
- 'GSETTINGS_BACKEND=memory',
- 'GTK_CSD=1',
- 'G_ENABLE_DIAGNOSTIC=0',
- 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
- 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
- 'GSK_RENDERER=opengl'
- ],
- suite: 'gsk')
-endforeach
-
-serialize_deserialize_tests = [
- 'blend',
- 'border',
- 'color',
- 'debug',
- 'rounded-rect',
- 'shadow',
- 'testswitch',
- 'widgetfactory',
-]
-
-foreach test : serialize_deserialize_tests
- test('serialize-deserialize ' + test, serialize_deserialize,
- args: [join_paths(meson.current_source_dir(), 'serializedeserialize', test + '.node')],
- env: [ 'GIO_USE_VOLUME_MONITOR=unix',
- 'GSETTINGS_BACKEND=memory',
- 'GTK_CSD=1',
- 'G_ENABLE_DIAGNOSTIC=0',
- 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
- 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
- 'GSK_RENDERER=opengl'
- ],
- suite: 'gsk')
+ if test.endswith('.node') and not test.endswith('.ref.node')
+ test('parser ' + test, node_parser,
+ args: [ join_paths(meson.current_source_dir(), 'nodeparser', test)
+ ],
+ env: [ 'GIO_USE_VOLUME_MONITOR=unix',
+ 'GSETTINGS_BACKEND=memory',
+ 'GTK_CSD=1',
+ 'G_ENABLE_DIAGNOSTIC=0',
+ 'G_TEST_SRCDIR=@0@'.format(meson.current_source_dir()),
+ 'G_TEST_BUILDDIR=@0@'.format(meson.current_build_dir()),
+ 'GSK_RENDERER=opengl'
+ ],
+ suite: 'gsk')
+ endif
endforeach
diff --git a/testsuite/gsk/node-parser.c b/testsuite/gsk/node-parser.c
index 9db6df204b..f0e1e7d889 100644
--- a/testsuite/gsk/node-parser.c
+++ b/testsuite/gsk/node-parser.c
@@ -1,44 +1,343 @@
+/*
+ * Copyright (C) 2011 Red Hat Inc.
+ *
+ * Author:
+ * Benjamin Otte <otte@redhat.com>
+ *
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Library General Public
+ * License as published by the Free Software Foundation; either
+ * version 2 of the License, or (at your option) any later version.
+ *
+ * This library is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Library General Public License for more details.
+ *
+ * You should have received a copy of the GNU Library General Public
+ * License along with this library. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "config.h"
+
#include <gtk/gtk.h>
+static char *
+test_get_reference_file (const char *node_file)
+{
+ GString *file = g_string_new (NULL);
+
+ if (g_str_has_suffix (node_file, ".node"))
+ g_string_append_len (file, node_file, strlen (node_file) - 5);
+ else
+ g_string_append (file, node_file);
+
+ g_string_append (file, ".ref.node");
+
+ if (!g_file_test (file->str, G_FILE_TEST_EXISTS))
+ {
+ g_string_free (file, TRUE);
+ return g_strdup (node_file);
+ }
+
+ return g_string_free (file, FALSE);
+}
+
+static char *
+test_get_errors_file (const char *node_file)
+{
+ GString *file = g_string_new (NULL);
+
+ if (g_str_has_suffix (node_file, ".node"))
+ g_string_append_len (file, node_file, strlen (node_file) - 5);
+ else
+ g_string_append (file, node_file);
+
+ g_string_append (file, ".errors");
+
+ if (!g_file_test (file->str, G_FILE_TEST_EXISTS))
+ {
+ g_string_free (file, TRUE);
+ return NULL;
+ }
+
+ return g_string_free (file, FALSE);
+}
+
+static GBytes *
+diff_with_file (const char *file1,
+ GBytes *input,
+ GError **error)
+{
+ GSubprocess *process;
+ GBytes *output;
+
+ process = g_subprocess_new (G_SUBPROCESS_FLAGS_STDIN_PIPE
+ | G_SUBPROCESS_FLAGS_STDOUT_PIPE,
+ error,
+ "diff", "-u", file1, "-", NULL);
+ if (process == NULL)
+ return NULL;
+
+ if (!g_subprocess_communicate (process,
+ input,
+ NULL,
+ &output,
+ NULL,
+ error))
+ {
+ g_object_unref (process);
+ return NULL;
+ }
+
+ return output;
+}
+
+static void
+append_error_value (GString *string,
+ GType enum_type,
+ guint value)
+{
+ GEnumClass *enum_class;
+ GEnumValue *enum_value;
+
+ enum_class = g_type_class_ref (enum_type);
+ enum_value = g_enum_get_value (enum_class, value);
+
+ g_string_append (string, enum_value->value_name);
+
+ g_type_class_unref (enum_class);
+}
+
static void
deserialize_error_func (const GtkCssSection *section,
const GError *error,
gpointer user_data)
{
- char *section_str = gtk_css_section_to_string (section);
+ GString *errors = user_data;
+ char *section_string;
+
+ section_string = gtk_css_section_to_string (section);
- /* We want to parse invalid node files in this test and simply assert that the
- * parser doesn't crash. So, just g_message() here instead of a warning or error. */
- g_message ("Error at %s: %s", section_str, error->message);
+ g_string_append_printf (errors,
+ "%s: error: ",
+ section_string);
+ g_free (section_string);
- free (section_str);
+ if (error->domain == GTK_CSS_PARSER_ERROR)
+ append_error_value (errors, GTK_TYPE_CSS_PARSER_ERROR, error->code);
+ else if (error->domain == GTK_CSS_PARSER_WARNING)
+ append_error_value (errors, GTK_TYPE_CSS_PARSER_WARNING, error->code);
+ else
+ g_string_append_printf (errors,
+ "%s %u\n",
+ g_quark_to_string (error->domain),
+ error->code);
+
+ g_string_append_c (errors, '\n');
}
-int
-main (int argc, char **argv)
+static gboolean
+parse_node_file (GFile *file, gboolean generate)
{
- GError *error = NULL;
+ char *node_file, *reference_file, *errors_file;
GskRenderNode *node;
- GBytes *bytes;
- GFile *file;
+ GString *errors;
+ GBytes *diff, *bytes;
+ GError *error = NULL;
+ gboolean result = TRUE;
- g_assert (argc == 2);
+ bytes = g_file_load_bytes (file, NULL, NULL, &error);
+ if (error)
+ {
+ g_print ("Error loading file: %s\n", error->message);
+ g_clear_error (&error);
+ return FALSE;
+ }
+ g_assert (bytes != NULL);
- gtk_init ();
+ errors = g_string_new ("");
- file = g_file_new_for_commandline_arg (argv[1]);
- bytes = g_file_load_bytes (file, NULL, NULL, &error);
+ node = gsk_render_node_deserialize (bytes, deserialize_error_func, errors);
+ g_bytes_unref (bytes);
+ bytes = gsk_render_node_serialize (node);
+ gsk_render_node_unref (node);
+
+ if (generate)
+ {
+ g_print ("%s", (char *) g_bytes_get_data (bytes, NULL));
+ g_bytes_unref (bytes);
+ g_string_free (errors, TRUE);
+ return TRUE;
+ }
+
+ node_file = g_file_get_path (file);
+ reference_file = test_get_reference_file (node_file);
+
+ diff = diff_with_file (reference_file, bytes, &error);
g_assert_no_error (error);
- g_assert (bytes != NULL);
- node = gsk_render_node_deserialize (bytes, deserialize_error_func, NULL);
- if (error)
- g_test_message ("Error: %s\n", error->message);
+ if (diff && g_bytes_get_size (diff) > 0)
+ {
+ g_print ("Resulting file doesn't match reference:\n%s\n",
+ (const char *) g_bytes_get_data (diff, NULL));
+ result = FALSE;
+ }
+ g_free (reference_file);
+ g_clear_pointer (&diff, g_bytes_unref);
+
+ errors_file = test_get_errors_file (node_file);
- g_clear_error (&error);
- g_clear_pointer (&node, gsk_render_node_unref);
+ if (errors_file)
+ {
+ GBytes *error_bytes = g_string_free_to_bytes (errors);
+ diff = diff_with_file (errors_file, error_bytes, &error);
+ g_assert_no_error (error);
+
+ if (diff && g_bytes_get_size (diff) > 0)
+ {
+ g_print ("Errors don't match expected errors:\n%s\n",
+ (const char *) g_bytes_get_data (diff, NULL));
+ result = FALSE;
+ }
+ g_clear_pointer (&diff, g_bytes_unref);
+ g_clear_pointer (&error_bytes, g_bytes_unref);
+ }
+ else if (errors->str[0])
+ {
+ g_print ("Unexpected errors:\n%s\n", errors->str);
+ result = FALSE;
+ g_string_free (errors, TRUE);
+ }
+ else
+ {
+ g_string_free (errors, TRUE);
+ }
+
+ g_free (errors_file);
+ g_free (node_file);
g_bytes_unref (bytes);
- g_object_unref (file);
- return 0;
+ return result;
+}
+
+static gboolean
+test_file (GFile *file)
+{
+ return parse_node_file (file, FALSE);
+}
+
+static int
+compare_files (gconstpointer a, gconstpointer b)
+{
+ GFile *file1 = G_FILE (a);
+ GFile *file2 = G_FILE (b);
+ char *path1, *path2;
+ int result;
+
+ path1 = g_file_get_path (file1);
+ path2 = g_file_get_path (file2);
+
+ result = strcmp (path1, path2);
+
+ g_free (path1);
+ g_free (path2);
+
+ return result;
}
+
+static gboolean
+test_files_in_directory (GFile *dir)
+{
+ GFileEnumerator *enumerator;
+ GFileInfo *info;
+ GList *l, *files;
+ GError *error = NULL;
+ gboolean result = TRUE;
+
+ enumerator = g_file_enumerate_children (dir, G_FILE_ATTRIBUTE_STANDARD_NAME, 0, NULL, &error);
+ g_assert_no_error (error);
+ files = NULL;
+
+ while ((info = g_file_enumerator_next_file (enumerator, NULL, &error)))
+ {
+ const char *filename;
+
+ filename = g_file_info_get_name (info);
+
+ if (!g_str_has_suffix (filename, ".node") ||
+ g_str_has_suffix (filename, ".out.node") ||
+ g_str_has_suffix (filename, ".ref.node"))
+ {
+ g_object_unref (info);
+ continue;
+ }
+
+ files = g_list_prepend (files, g_file_get_child (dir, filename));
+
+ g_object_unref (info);
+ }
+
+ g_assert_no_error (error);
+ g_object_unref (enumerator);
+
+ files = g_list_sort (files, compare_files);
+ for (l = files; l; l = l->next)
+ {
+ result &= test_file (l->data);
+ }
+ g_list_free_full (files, g_object_unref);
+
+ return result;
+}
+
+int
+main (int argc, char **argv)
+{
+ gboolean success;
+
+ gtk_test_init (&argc, &argv);
+
+ if (argc < 2)
+ {
+ const char *basedir;
+ GFile *dir;
+
+ basedir = g_test_get_dir (G_TEST_DIST);
+ dir = g_file_new_for_path (basedir);
+ success = test_files_in_directory (dir);
+
+ g_object_unref (dir);
+ }
+ else if (strcmp (argv[1], "--generate") == 0)
+ {
+ if (argc >= 3)
+ {
+ GFile *file = g_file_new_for_commandline_arg (argv[2]);
+
+ success = parse_node_file (file, TRUE);
+
+ g_object_unref (file);
+ }
+ else
+ success = FALSE;
+ }
+ else
+ {
+ guint i;
+
+ success = TRUE;
+
+ for (i = 1; i < argc; i++)
+ {
+ GFile *file = g_file_new_for_commandline_arg (argv[i]);
+
+ success &= test_file (file);
+
+ g_object_unref (file);
+ }
+ }
+
+ return success ? 0 : 1;
+}
+
diff --git a/testsuite/gsk/serializedeserialize/blend.node b/testsuite/gsk/nodeparser/blend.node
index 0b228ade85..0b228ade85 100644
--- a/testsuite/gsk/serializedeserialize/blend.node
+++ b/testsuite/gsk/nodeparser/blend.node
diff --git a/testsuite/gsk/nodeparser/blend.ref.node b/testsuite/gsk/nodeparser/blend.ref.node
new file mode 100644
index 0000000000..49dd83f842
--- /dev/null
+++ b/testsuite/gsk/nodeparser/blend.ref.node
@@ -0,0 +1,24 @@
+blend {
+ bottom: container {
+ }
+ top: container {
+ }
+}
+blend {
+ bottom: container {
+ }
+ mode: color-dodge;
+ top: container {
+ }
+}
+blend {
+ bottom: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+ mode: difference;
+ top: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/serializedeserialize/border.node b/testsuite/gsk/nodeparser/border.node
index 89b490329f..89b490329f 100644
--- a/testsuite/gsk/serializedeserialize/border.node
+++ b/testsuite/gsk/nodeparser/border.node
diff --git a/testsuite/gsk/nodeparser/border.ref.node b/testsuite/gsk/nodeparser/border.ref.node
new file mode 100644
index 0000000000..4a67ccd849
--- /dev/null
+++ b/testsuite/gsk/nodeparser/border.ref.node
@@ -0,0 +1,4 @@
+border {
+ colors: rgb(213,208,204);
+ outline: -1 -1 50 26 / 13;
+}
diff --git a/testsuite/gsk/serializedeserialize/color.node b/testsuite/gsk/nodeparser/color.node
index acbc79288d..acbc79288d 100644
--- a/testsuite/gsk/serializedeserialize/color.node
+++ b/testsuite/gsk/nodeparser/color.node
diff --git a/testsuite/gsk/nodeparser/color.ref.node b/testsuite/gsk/nodeparser/color.ref.node
new file mode 100644
index 0000000000..bf5ba1027a
--- /dev/null
+++ b/testsuite/gsk/nodeparser/color.ref.node
@@ -0,0 +1,4 @@
+color {
+ bounds: 100 100 200 300;
+ color: rgb(255,0,0);
+}
diff --git a/testsuite/gsk/nodeparser/crash1.errors b/testsuite/gsk/nodeparser/crash1.errors
new file mode 100644
index 0000000000..b47b8c75f0
--- /dev/null
+++ b/testsuite/gsk/nodeparser/crash1.errors
@@ -0,0 +1,3 @@
+<data>:2:9-10: error: GTK_CSS_PARSER_ERROR_SYNTAX
+<data>:2:17-3:1: error: GTK_CSS_PARSER_WARNING_SYNTAX
+<data>:1:1-3:1: error: GTK_CSS_PARSER_WARNING_SYNTAX
diff --git a/testsuite/gsk/nodeparser/crash1.ref.node b/testsuite/gsk/nodeparser/crash1.ref.node
new file mode 100644
index 0000000000..a02df0f9e8
--- /dev/null
+++ b/testsuite/gsk/nodeparser/crash1.ref.node
@@ -0,0 +1,6 @@
+opacity {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/crash2.errors b/testsuite/gsk/nodeparser/crash2.errors
new file mode 100644
index 0000000000..91bb427e87
--- /dev/null
+++ b/testsuite/gsk/nodeparser/crash2.errors
@@ -0,0 +1,3 @@
+<data>:2:3-7: error: GTK_CSS_PARSER_ERROR_SYNTAX
+<data>:2:15-4:1: error: GTK_CSS_PARSER_WARNING_SYNTAX
+<data>:1:1-4:1: error: GTK_CSS_PARSER_WARNING_SYNTAX
diff --git a/testsuite/gsk/nodeparser/crash2.ref.node b/testsuite/gsk/nodeparser/crash2.ref.node
new file mode 100644
index 0000000000..76ab4d6943
--- /dev/null
+++ b/testsuite/gsk/nodeparser/crash2.ref.node
@@ -0,0 +1,10 @@
+cross-fade {
+ end: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+ start: color {
+ bounds: 0 0 50 50;
+ color: rgb(170,255,0);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/crash3.ref.node b/testsuite/gsk/nodeparser/crash3.ref.node
new file mode 100644
index 0000000000..ccc74d2851
--- /dev/null
+++ b/testsuite/gsk/nodeparser/crash3.ref.node
@@ -0,0 +1,17 @@
+cross-fade {
+ end: color {
+ bounds: 5 5 10 10;
+ color: rgb(0,0,255);
+ }
+ progress: 0.2;
+ start: container {
+ color {
+ bounds: 0 0 10 10;
+ color: rgb(255,0,0);
+ }
+ color {
+ bounds: 10 10 10 10;
+ color: rgb(0,128,0);
+ }
+ }
+}
diff --git a/testsuite/gsk/nodeparser/crash4.errors b/testsuite/gsk/nodeparser/crash4.errors
new file mode 100644
index 0000000000..90d2cc278c
--- /dev/null
+++ b/testsuite/gsk/nodeparser/crash4.errors
@@ -0,0 +1 @@
+<data>:6:3-7:1: error: GTK_CSS_PARSER_WARNING_SYNTAX
diff --git a/testsuite/gsk/nodeparser/crash4.ref.node b/testsuite/gsk/nodeparser/crash4.ref.node
new file mode 100644
index 0000000000..e9b8985745
--- /dev/null
+++ b/testsuite/gsk/nodeparser/crash4.ref.node
@@ -0,0 +1,7 @@
+blur {
+ blur: 40;
+ child: color {
+ bounds: 100 100 100 100;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/serializedeserialize/debug.node b/testsuite/gsk/nodeparser/debug.node
index cf3c2634e6..cd68defd52 100644
--- a/testsuite/gsk/serializedeserialize/debug.node
+++ b/testsuite/gsk/nodeparser/debug.node
@@ -1,4 +1,5 @@
debug {
+ child: container {
+ }
message: "I'm a debug node.";
- child: container {}
}
diff --git a/testsuite/gsk/nodeparser/empty-blend.node b/testsuite/gsk/nodeparser/empty-blend.node
new file mode 100644
index 0000000000..291d805ff7
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-blend.node
@@ -0,0 +1 @@
+blend { }
diff --git a/testsuite/gsk/nodeparser/empty-blend.ref.node b/testsuite/gsk/nodeparser/empty-blend.ref.node
new file mode 100644
index 0000000000..c494d26ba8
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-blend.ref.node
@@ -0,0 +1,10 @@
+blend {
+ bottom: color {
+ bounds: 0 0 50 50;
+ color: rgb(170,255,0);
+ }
+ top: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/empty-blur.node b/testsuite/gsk/nodeparser/empty-blur.node
new file mode 100644
index 0000000000..6f41a3e203
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-blur.node
@@ -0,0 +1 @@
+blur { }
diff --git a/testsuite/gsk/nodeparser/empty-blur.ref.node b/testsuite/gsk/nodeparser/empty-blur.ref.node
new file mode 100644
index 0000000000..c9fd1299b4
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-blur.ref.node
@@ -0,0 +1,6 @@
+blur {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/empty-border.node b/testsuite/gsk/nodeparser/empty-border.node
new file mode 100644
index 0000000000..0a58c89c65
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-border.node
@@ -0,0 +1 @@
+border { }
diff --git a/testsuite/gsk/nodeparser/empty-border.ref.node b/testsuite/gsk/nodeparser/empty-border.ref.node
new file mode 100644
index 0000000000..b1e47a59ee
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-border.ref.node
@@ -0,0 +1,3 @@
+border {
+ outline: 0 0 50 50;
+}
diff --git a/testsuite/gsk/nodeparser/empty-clip.node b/testsuite/gsk/nodeparser/empty-clip.node
new file mode 100644
index 0000000000..c513eb6597
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-clip.node
@@ -0,0 +1 @@
+clip { }
diff --git a/testsuite/gsk/nodeparser/empty-clip.ref.node b/testsuite/gsk/nodeparser/empty-clip.ref.node
new file mode 100644
index 0000000000..904bd3926f
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-clip.ref.node
@@ -0,0 +1,7 @@
+clip {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+ clip: 0 0 50 50;
+}
diff --git a/testsuite/gsk/nodeparser/empty-color-matrix.node b/testsuite/gsk/nodeparser/empty-color-matrix.node
new file mode 100644
index 0000000000..c0fcc1cbd5
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-color-matrix.node
@@ -0,0 +1 @@
+color-matrix { }
diff --git a/testsuite/gsk/nodeparser/empty-color-matrix.ref.node b/testsuite/gsk/nodeparser/empty-color-matrix.ref.node
new file mode 100644
index 0000000000..773a4832a8
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-color-matrix.ref.node
@@ -0,0 +1,6 @@
+color-matrix {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/empty-color.node b/testsuite/gsk/nodeparser/empty-color.node
new file mode 100644
index 0000000000..adaf509095
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-color.node
@@ -0,0 +1 @@
+color { }
diff --git a/testsuite/gsk/nodeparser/empty-color.ref.node b/testsuite/gsk/nodeparser/empty-color.ref.node
new file mode 100644
index 0000000000..404fb1b892
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-color.ref.node
@@ -0,0 +1,4 @@
+color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+}
diff --git a/testsuite/gsk/nodeparser/empty-container.node b/testsuite/gsk/nodeparser/empty-container.node
new file mode 100644
index 0000000000..d0c267ce88
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-container.node
@@ -0,0 +1 @@
+container { }
diff --git a/testsuite/gsk/nodeparser/empty-container.ref.node b/testsuite/gsk/nodeparser/empty-container.ref.node
new file mode 100644
index 0000000000..e69de29bb2
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-container.ref.node
diff --git a/testsuite/gsk/nodeparser/empty-cross-fade.node b/testsuite/gsk/nodeparser/empty-cross-fade.node
new file mode 100644
index 0000000000..a9892afb96
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-cross-fade.node
@@ -0,0 +1 @@
+cross-fade { }
diff --git a/testsuite/gsk/nodeparser/empty-cross-fade.ref.node b/testsuite/gsk/nodeparser/empty-cross-fade.ref.node
new file mode 100644
index 0000000000..76ab4d6943
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-cross-fade.ref.node
@@ -0,0 +1,10 @@
+cross-fade {
+ end: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+ start: color {
+ bounds: 0 0 50 50;
+ color: rgb(170,255,0);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/empty-debug.node b/testsuite/gsk/nodeparser/empty-debug.node
new file mode 100644
index 0000000000..088a305cf9
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-debug.node
@@ -0,0 +1 @@
+debug { }
diff --git a/testsuite/gsk/nodeparser/empty-debug.ref.node b/testsuite/gsk/nodeparser/empty-debug.ref.node
new file mode 100644
index 0000000000..fc7e73a4c7
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-debug.ref.node
@@ -0,0 +1,6 @@
+debug {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/empty-inset-shadow.node b/testsuite/gsk/nodeparser/empty-inset-shadow.node
new file mode 100644
index 0000000000..5b84e7c8a5
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-inset-shadow.node
@@ -0,0 +1 @@
+inset-shadow { }
diff --git a/testsuite/gsk/nodeparser/empty-inset-shadow.ref.node b/testsuite/gsk/nodeparser/empty-inset-shadow.ref.node
new file mode 100644
index 0000000000..d3f8b412d2
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-inset-shadow.ref.node
@@ -0,0 +1,3 @@
+inset-shadow {
+ outline: 0 0 50 50;
+}
diff --git a/testsuite/gsk/nodeparser/empty-linear-gradient.node b/testsuite/gsk/nodeparser/empty-linear-gradient.node
new file mode 100644
index 0000000000..ef6234b661
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-linear-gradient.node
@@ -0,0 +1 @@
+linear-gradient { }
diff --git a/testsuite/gsk/nodeparser/empty-linear-gradient.ref.node b/testsuite/gsk/nodeparser/empty-linear-gradient.ref.node
new file mode 100644
index 0000000000..c648c7b909
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-linear-gradient.ref.node
@@ -0,0 +1,6 @@
+linear-gradient {
+ bounds: 0 0 50 50;
+ end: 0 50;
+ start: 0 0;
+ stops: 0 rgb(170,255,0), 1 rgb(255,0,204);
+}
diff --git a/testsuite/gsk/nodeparser/empty-opacity.node b/testsuite/gsk/nodeparser/empty-opacity.node
new file mode 100644
index 0000000000..8fb3590077
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-opacity.node
@@ -0,0 +1 @@
+opacity { }
diff --git a/testsuite/gsk/nodeparser/empty-opacity.ref.node b/testsuite/gsk/nodeparser/empty-opacity.ref.node
new file mode 100644
index 0000000000..a02df0f9e8
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-opacity.ref.node
@@ -0,0 +1,6 @@
+opacity {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/empty-outset-shadow.node b/testsuite/gsk/nodeparser/empty-outset-shadow.node
new file mode 100644
index 0000000000..87858be472
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-outset-shadow.node
@@ -0,0 +1 @@
+outset-shadow { }
diff --git a/testsuite/gsk/nodeparser/empty-outset-shadow.ref.node b/testsuite/gsk/nodeparser/empty-outset-shadow.ref.node
new file mode 100644
index 0000000000..94c00b67d2
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-outset-shadow.ref.node
@@ -0,0 +1,3 @@
+outset-shadow {
+ outline: 0 0 50 50;
+}
diff --git a/testsuite/gsk/nodeparser/empty-repeat.node b/testsuite/gsk/nodeparser/empty-repeat.node
new file mode 100644
index 0000000000..9f82f0e3ac
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-repeat.node
@@ -0,0 +1 @@
+repeat { }
diff --git a/testsuite/gsk/nodeparser/empty-repeat.ref.node b/testsuite/gsk/nodeparser/empty-repeat.ref.node
new file mode 100644
index 0000000000..c56ad7bc86
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-repeat.ref.node
@@ -0,0 +1,6 @@
+repeat {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/nodeparser/empty-rounded-clip.node b/testsuite/gsk/nodeparser/empty-rounded-clip.node
new file mode 100644
index 0000000000..28373aa45f
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-rounded-clip.node
@@ -0,0 +1 @@
+rounded-clip { }
diff --git a/testsuite/gsk/nodeparser/empty-rounded-clip.ref.node b/testsuite/gsk/nodeparser/empty-rounded-clip.ref.node
new file mode 100644
index 0000000000..c316247b54
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-rounded-clip.ref.node
@@ -0,0 +1,7 @@
+rounded-clip {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+ clip: 0 0 50 50;
+}
diff --git a/testsuite/gsk/nodeparser/empty-shadow.node b/testsuite/gsk/nodeparser/empty-shadow.node
new file mode 100644
index 0000000000..3f4879359d
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-shadow.node
@@ -0,0 +1 @@
+shadow { }
diff --git a/testsuite/gsk/nodeparser/empty-shadow.ref.node b/testsuite/gsk/nodeparser/empty-shadow.ref.node
new file mode 100644
index 0000000000..c69c067a83
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-shadow.ref.node
@@ -0,0 +1,7 @@
+shadow {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+ shadows: rgb(0,0,0) 1 1;
+}
diff --git a/testsuite/gsk/nodeparser/empty-text.node b/testsuite/gsk/nodeparser/empty-text.node
new file mode 100644
index 0000000000..5964c4e7d1
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-text.node
@@ -0,0 +1 @@
+text { }
diff --git a/testsuite/gsk/nodeparser/empty-text.ref.node b/testsuite/gsk/nodeparser/empty-text.ref.node
new file mode 100644
index 0000000000..75ffdc0a01
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-text.ref.node
@@ -0,0 +1,4 @@
+text {
+ font: "Cantarell 11";
+ glyphs: "Hello";
+}
diff --git a/testsuite/gsk/nodeparser/empty-texture.node b/testsuite/gsk/nodeparser/empty-texture.node
new file mode 100644
index 0000000000..e3b669cc42
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-texture.node
@@ -0,0 +1 @@
+texture { }
diff --git a/testsuite/gsk/nodeparser/empty-texture.ref.node b/testsuite/gsk/nodeparser/empty-texture.ref.node
new file mode 100644
index 0000000000..eda875a114
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-texture.ref.node
@@ -0,0 +1,4 @@
+texture {
+ bounds: 0 0 50 50;
+ texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAoAAAAKCAYAAACNMs+9AAAABmJLR0QA/wD/AP+gvaeTAAAAKUlEQVQYlWP8z3DmPwMaYGQwYUQXY0IXwAUGUCGGoxkYGBiweXAoeAYAz44F3e3U1xUAAAAASUVORK5CYII=");
+}
diff --git a/testsuite/gsk/nodeparser/empty-transform.node b/testsuite/gsk/nodeparser/empty-transform.node
new file mode 100644
index 0000000000..4833ddb193
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-transform.node
@@ -0,0 +1 @@
+transform { }
diff --git a/testsuite/gsk/nodeparser/empty-transform.ref.node b/testsuite/gsk/nodeparser/empty-transform.ref.node
new file mode 100644
index 0000000000..8a63720daa
--- /dev/null
+++ b/testsuite/gsk/nodeparser/empty-transform.ref.node
@@ -0,0 +1,6 @@
+transform {
+ child: color {
+ bounds: 0 0 50 50;
+ color: rgb(255,0,204);
+ }
+}
diff --git a/testsuite/gsk/serializedeserialize/rounded-rect.node b/testsuite/gsk/nodeparser/rounded-rect.node
index 5aeeb0b9f1..5aeeb0b9f1 100644
--- a/testsuite/gsk/serializedeserialize/rounded-rect.node
+++ b/testsuite/gsk/nodeparser/rounded-rect.node
diff --git a/testsuite/gsk/nodeparser/rounded-rect.ref.node b/testsuite/gsk/nodeparser/rounded-rect.ref.node
new file mode 100644
index 0000000000..16c12d0afd
--- /dev/null
+++ b/testsuite/gsk/nodeparser/rounded-rect.ref.node
@@ -0,0 +1,63 @@
+border {
+ outline: 0 0 100 100;
+}
+border {
+ outline: 0 0 100 100 / 50;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0;
+}
+border {
+ outline: 0 0 100 100 / 50;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 50 50 50;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 50 50 50;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 50 50 50;
+}
+border {
+ outline: 0 0 100 100 / 50 50 50 50 / 25 0 25 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 50 50 50 50 / 25 0 25 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 50 50 50 50 / 25 0 25 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
+border {
+ outline: 0 0 100 100 / 100 0 100 0 / 50 0 50 0;
+}
diff --git a/testsuite/gsk/serializedeserialize/shadow.node b/testsuite/gsk/nodeparser/shadow.node
index a957ce7988..a957ce7988 100644
--- a/testsuite/gsk/serializedeserialize/shadow.node
+++ b/testsuite/gsk/nodeparser/shadow.node
diff --git a/testsuite/gsk/nodeparser/shadow.ref.node b/testsuite/gsk/nodeparser/shadow.ref.node
new file mode 100644
index 0000000000..bf4c27b69a
--- /dev/null
+++ b/testsuite/gsk/nodeparser/shadow.ref.node
@@ -0,0 +1,7 @@
+shadow {
+ child: color {
+ bounds: 100 100 100 100;
+ color: rgb(0,128,0);
+ }
+ shadows: rgb(255,0,0) 10 10 4, rgb(0,0,255) -10 -10 8;
+}
diff --git a/testsuite/gsk/serializedeserialize/testswitch.node b/testsuite/gsk/nodeparser/testswitch.node
index 940d821e00..89d884bcda 100644
--- a/testsuite/gsk/serializedeserialize/testswitch.node
+++ b/testsuite/gsk/nodeparser/testswitch.node
@@ -1,5 +1,4 @@
transform {
- transform: translate(0, 0);
child: container {
color {
bounds: 0 0 404 204;
@@ -8,382 +7,335 @@ transform {
container {
container {
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 50 26 / 13;
child: color {
bounds: -1 -1 50 26;
color: rgb(225,222,219);
}
+ clip: -1 -1 50 26 / 13;
}
border {
+ colors: rgb(205,199,194);
outline: -1 -1 50 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(205,199,194) rgb(205,199,194) rgb(205,199,194) rgb(205,199,194);
}
container {
container {
outset-shadow {
- outline: -1 -1 26 26 / 13;
color: rgba(0,0,0,0.1);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: -1 -1 26 26 / 13;
}
outset-shadow {
- outline: -1 -1 26 26 / 13;
+ blur: 2;
color: rgba(0,0,0,0.07);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 2;
+ outline: -1 -1 26 26 / 13;
}
rounded-clip {
- clip: -1 -1 26 26 / 13;
child: linear-gradient {
bounds: 0 0 24 24;
- start: 12 0;
end: 12 24;
- stops: 0.2 rgb(255,255,255),0.9 rgb(246,245,244);
+ start: 12 0;
+ stops: 0.2 rgb(255,255,255), 0.9 rgb(246,245,244);
}
+ clip: -1 -1 26 26 / 13;
}
inset-shadow {
- outline: 0 0 24 24 / 12;
color: rgb(255,255,255);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: 0 0 24 24 / 12;
}
}
border {
+ colors: rgb(191,184,177);
outline: -1 -1 26 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(191,184,177) rgb(191,184,177) rgb(191,184,177) rgb(191,184,177);
}
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(56, 0);
child: text {
- font: "Cantarell 11";
- x: 145;
- y: 18;
color: rgb(46,52,54);
- glyphs: 37 11264 0 0 1, 324 4096 0 0 1, 417 7168 0 0 1, 244 8192 0 0 1, 272 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 280 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Disabled";
+ offset: 145 18;
}
+ transform: translate(56, 0);
}
}
transform {
- transform: translate(0, 38);
child: container {
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 50 26 / 13;
child: color {
bounds: -1 -1 50 26;
color: rgb(53,132,228);
}
+ clip: -1 -1 50 26 / 13;
}
border {
+ colors: rgb(24,95,180);
outline: -1 -1 50 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(24,95,180) rgb(24,95,180) rgb(24,95,180) rgb(24,95,180);
}
transform {
- transform: translate(24, 0);
child: container {
container {
outset-shadow {
- outline: -1 -1 26 26 / 13;
color: rgba(0,0,0,0.1);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: -1 -1 26 26 / 13;
}
outset-shadow {
- outline: -1 -1 26 26 / 13;
+ blur: 2;
color: rgba(0,0,0,0.07);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 2;
+ outline: -1 -1 26 26 / 13;
}
rounded-clip {
- clip: -1 -1 26 26 / 13;
child: cross-fade {
+ end: linear-gradient {
+ bounds: 0 0 24 24;
+ end: 12 24;
+ start: 12 0;
+ stops: 0.1 rgb(255,255,255), 0.9 rgb(255,255,255);
+ }
progress: 0.756154;
start: cross-fade {
+ end: linear-gradient {
+ bounds: 0 0 24 24;
+ end: 12 24;
+ start: 12 0;
+ stops: 0.2 rgb(255,255,255), 0.9 rgb(246,245,244);
+ }
progress: 0.788575;
start: color {
bounds: 0 0 24 24;
color: rgb(246,245,244);
}
- end: linear-gradient {
- bounds: 0 0 24 24;
- start: 12 0;
- end: 12 24;
- stops: 0.2 rgb(255,255,255),0.9 rgb(246,245,244);
- }
- }
- end: linear-gradient {
- bounds: 0 0 24 24;
- start: 12 0;
- end: 12 24;
- stops: 0.1 rgb(255,255,255),0.9 rgb(255,255,255);
}
}
+ clip: -1 -1 26 26 / 13;
}
inset-shadow {
- outline: 0 0 24 24 / 12;
color: rgb(255,255,255);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: 0 0 24 24 / 12;
}
}
border {
+ colors: rgb(24,95,180);
outline: -1 -1 26 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(24,95,180) rgb(24,95,180) rgb(24,95,180) rgb(24,95,180);
}
}
+ transform: translate(24, 0);
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(56, 0);
child: text {
- font: "Cantarell 11";
- x: 147;
- y: 18;
color: rgb(46,52,54);
- glyphs: 45 9216 0 0 1, 360 8192 0 0 1, 244 8192 0 0 1, 272 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 280 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Enabled";
+ offset: 147 18;
}
+ transform: translate(56, 0);
}
}
+ transform: translate(0, 38);
}
transform {
- transform: translate(0, 76);
child: container {
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 50 26 / 13;
child: color {
bounds: -1 -1 50 26;
color: rgb(250,249,248);
}
+ clip: -1 -1 50 26 / 13;
}
border {
+ colors: rgb(205,199,194);
outline: -1 -1 50 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(205,199,194) rgb(205,199,194) rgb(205,199,194) rgb(205,199,194);
}
container {
rounded-clip {
- clip: -1 -1 26 26 / 13;
child: color {
bounds: 0 0 24 24;
color: rgb(250,249,248);
}
+ clip: -1 -1 26 26 / 13;
}
border {
+ colors: rgb(205,199,194);
outline: -1 -1 26 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(205,199,194) rgb(205,199,194) rgb(205,199,194) rgb(205,199,194);
}
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(56, 0);
child: text {
- font: "Cantarell 11";
- x: 145;
- y: 18;
color: rgb(46,52,54);
- glyphs: 37 11264 0 0 1, 324 4096 0 0 1, 417 7168 0 0 1, 244 8192 0 0 1, 272 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 280 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Disabled";
+ offset: 145 18;
}
+ transform: translate(56, 0);
}
}
+ transform: translate(0, 76);
}
transform {
- transform: translate(0, 114);
child: container {
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 50 26 / 13;
child: color {
bounds: -1 -1 50 26;
color: rgb(250,249,248);
}
+ clip: -1 -1 50 26 / 13;
}
border {
+ colors: rgb(205,199,194);
outline: -1 -1 50 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(205,199,194) rgb(205,199,194) rgb(205,199,194) rgb(205,199,194);
}
transform {
- transform: translate(24, 0);
child: container {
rounded-clip {
- clip: -1 -1 26 26 / 13;
child: color {
bounds: 0 0 24 24;
color: rgb(250,249,248);
}
+ clip: -1 -1 26 26 / 13;
}
border {
+ colors: rgb(205,199,194);
outline: -1 -1 26 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(205,199,194) rgb(205,199,194) rgb(205,199,194) rgb(205,199,194);
}
}
+ transform: translate(24, 0);
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(56, 0);
child: text {
- font: "Cantarell 11";
- x: 147;
- y: 18;
color: rgb(46,52,54);
- glyphs: 45 9216 0 0 1, 360 8192 0 0 1, 244 8192 0 0 1, 272 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 280 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Enabled";
+ offset: 147 18;
}
+ transform: translate(56, 0);
}
}
+ transform: translate(0, 114);
}
transform {
- transform: translate(0, 152);
child: container {
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 50 26 / 13;
child: color {
bounds: -1 -1 50 26;
color: rgb(225,222,219);
}
+ clip: -1 -1 50 26 / 13;
}
border {
+ colors: rgb(205,199,194);
outline: -1 -1 50 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(205,199,194) rgb(205,199,194) rgb(205,199,194) rgb(205,199,194);
}
container {
container {
outset-shadow {
- outline: -1 -1 26 26 / 13;
color: rgba(0,0,0,0.1);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: -1 -1 26 26 / 13;
}
outset-shadow {
- outline: -1 -1 26 26 / 13;
+ blur: 2;
color: rgba(0,0,0,0.07);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 2;
+ outline: -1 -1 26 26 / 13;
}
rounded-clip {
- clip: -1 -1 26 26 / 13;
child: linear-gradient {
bounds: 0 0 24 24;
- start: 12 0;
end: 12 24;
- stops: 0.2 rgb(255,255,255),0.9 rgb(246,245,244);
+ start: 12 0;
+ stops: 0.2 rgb(255,255,255), 0.9 rgb(246,245,244);
}
+ clip: -1 -1 26 26 / 13;
}
inset-shadow {
- outline: 0 0 24 24 / 12;
color: rgb(255,255,255);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: 0 0 24 24 / 12;
}
}
border {
+ colors: rgb(191,184,177);
outline: -1 -1 26 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(191,184,177) rgb(191,184,177) rgb(191,184,177) rgb(191,184,177);
}
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(78, 0);
child: text {
- font: "Cantarell 11";
- x: 123;
- y: 18;
color: rgb(46,52,54);
- glyphs: 37 11264 0 0 1, 324 4096 0 0 1, 417 7168 0 0 1, 244 8192 0 0 1, 272 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 280 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Disabled";
+ offset: 123 18;
}
+ transform: translate(78, 0);
}
transform {
- transform: translate(388, 0);
child: transform {
- transform: translate(1, 6);
child: container {
container {
outset-shadow {
- outline: -1 -1 16 16 / 3;
color: rgba(0,0,0,0.1);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: -1 -1 16 16 / 3;
}
outset-shadow {
- outline: -1 -1 16 16 / 3;
+ blur: 2;
color: rgba(0,0,0,0.07);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 2;
+ outline: -1 -1 16 16 / 3;
}
linear-gradient {
bounds: 0 0 14 14;
- start: 7 0;
end: 7 14;
- stops: 0.2 rgb(255,255,255),0.9 rgb(246,245,244);
+ start: 7 0;
+ stops: 0.2 rgb(255,255,255), 0.9 rgb(246,245,244);
}
inset-shadow {
- outline: 0 0 14 14 / 2;
color: rgb(255,255,255);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: 0 0 14 14 / 2;
}
}
border {
+ colors: rgb(191,184,177);
outline: -1 -1 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(191,184,177) rgb(191,184,177) rgb(191,184,177) rgb(191,184,177);
}
}
+ transform: translate(1, 6);
}
+ transform: translate(388, 0);
}
}
+ transform: translate(0, 152);
}
}
}
+ transform: translate(0, 0);
}
diff --git a/testsuite/gsk/serializedeserialize/widgetfactory.node b/testsuite/gsk/nodeparser/widgetfactory.node
index 780a847bd4..36b5f1b328 100644
--- a/testsuite/gsk/serializedeserialize/widgetfactory.node
+++ b/testsuite/gsk/nodeparser/widgetfactory.node
@@ -1,22 +1,20 @@
transform {
- transform: translate(0, 0);
child: container {
container {
outset-shadow {
- outline: 26 23 1464 788 / 8 8 0 0;
+ blur: 6;
color: rgba(0,0,0,0.2);
dx: 0;
dy: 2;
+ outline: 26 23 1464 788 / 8 8 0 0;
spread: 2;
- blur: 6;
}
outset-shadow {
- outline: 26 23 1464 788 / 8 8 0 0;
color: rgba(0,0,0,0.18);
dx: 0;
dy: 0;
+ outline: 26 23 1464 788 / 8 8 0 0;
spread: 1;
- blur: 0;
}
}
color {
@@ -24,1411 +22,1338 @@ transform {
color: rgb(246,245,244);
}
transform {
- transform: translate(26, 23) translate(6, 0);
child: container {
container {
rounded-clip {
- clip: -6 0 1464 47 / 7 7 0 0;
child: linear-gradient {
bounds: -6 0 1464 46;
- start: 1458 23;
end: -6 23;
- stops: 0.08 rgb(227,234,242),0.25 rgb(246,245,244);
+ start: 1458 23;
+ stops: 0.08 rgb(227,234,242), 0.25 rgb(246,245,244);
}
+ clip: -6 0 1464 47 / 7 7 0 0;
}
rounded-clip {
- clip: -6 0 1464 47 / 7 7 0 0;
child: color-matrix {
- matrix: matrix3d(0.0196078, 0.615686, 0.266667, 0, 0.780392, 0.270588, -0.211765, 0, 0.619608, -0.203922, -0.211765, 0, 0, 0, 0, 0.1);
- offset: 0.180392 0.203922 0.211765 0;
child: texture {
bounds: 1081.2 0 256 256;
texture: url("data:image/png;base64,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");
}
+ matrix: matrix3d(0.0196078, 0.615686, 0.266667, 0, 0.780392, 0.270588, -0.211765, 0, 0.619608, -0.203922, -0.211765, 0, 0, 0, 0, 0.1);
+ offset: 0.180392 0.203922 0.211765 0;
}
+ clip: -6 0 1464 47 / 7 7 0 0;
}
inset-shadow {
- outline: -6 0 1464 46 / 7 7 0 0;
color: rgba(255,255,255,0.8);
dx: 0;
- dy: 1;
- spread: 0;
- blur: 0;
+ outline: -6 0 1464 46 / 7 7 0 0;
}
}
border {
+ colors: rgb(213,208,204);
outline: -6 0 1464 47 / 7 7 0 0;
- widths: 0 0 1 0;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
+ widths: 0 0 1;
}
transform {
- transform: translate(526, 0);
child: container {
transform {
- transform: translate(17, 11);
child: container {
rounded-clip {
- clip: -17 -5 133 34 / 5 0 0 5;
child: color {
bounds: -16 -4 132 32;
color: rgb(228,228,224);
}
+ clip: -17 -5 133 34 / 5 0 0 5;
}
border {
+ colors: rgb(213,208,204);
outline: -17 -5 133 34 / 5 0 0 5;
widths: 1 0 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(28, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 17;
color: rgb(46,52,54);
- glyphs: 162 9216 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 678 7168 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Page 1";
+ offset: 0 17;
}
+ transform: translate(28, 0);
}
}
+ transform: translate(17, 11);
}
transform {
- transform: translate(133, 0) translate(17, 11);
child: container {
color {
bounds: -16 -4 132 32;
color: rgb(246,245,244);
}
border {
+ colors: rgb(213,208,204);
outline: -17 -5 133 34;
widths: 1 0 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(28, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 17;
color: rgb(46,52,54);
- glyphs: 162 9216 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 679 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Page 2";
+ offset: 0 17;
}
+ transform: translate(28, 0);
}
}
+ transform: translate(133, 0) translate(17, 11);
}
transform {
- transform: translate(266, 0) translate(17, 11);
child: container {
rounded-clip {
- clip: -17 -5 134 34 / 0 5 5 0;
child: color {
bounds: -16 -4 132 32;
color: rgb(246,245,244);
}
+ clip: -17 -5 134 34 / 0 5 5 0;
}
border {
+ colors: rgb(213,208,204);
outline: -17 -5 134 34 / 0 5 5 0;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(28, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 17;
color: rgb(46,52,54);
- glyphs: 162 9216 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 680 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Page 3";
+ offset: 0 17;
}
+ transform: translate(28, 0);
}
}
+ transform: translate(266, 0) translate(17, 11);
}
}
+ transform: translate(526, 0);
}
transform {
- transform: translate(1367, 0) translate(6, 11);
child: container {
rounded-clip {
- clip: -6 -5 36 34 / 5;
child: color {
bounds: -5 -4 34 32;
color: rgb(246,245,244);
}
+ clip: -6 -5 36 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -6 -5 36 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 4 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAH0lEQVQ4jWNgGPKAEY3/n1R9TNRzy0CB0TAYDQOqAADB/QMKPEUKLAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
+ transform: translate(1367, 0) translate(6, 11);
}
transform {
- transform: translate(1409, 0);
child: transform {
- transform: translate(7, 0) translate(10, 11);
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAfUlEQVQ4je3RMQoCMRBG4Q+voEIKC/H+d7Cwd1GULSzEUyg2azOyQ1gxB9gHgcnknxdCmJliwAHr1FtiH2d/uUTwHJIVuuj1LYINbklyivqObYuglgx4YDcVXPwQvPFM+1esJgquxjf3qS4tgmM1UJKkaxF8g/m2YvyJmYoPk2IlW2Wofj0AAAAASUVORK5CYII=");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ transform: translate(7, 0) translate(10, 11);
}
+ transform: translate(1409, 0);
}
}
+ transform: translate(26, 23) translate(6, 0);
}
transform {
- transform: translate(26, 70) translate(10, 10);
child: container {
container {
container {
container {
transform {
- transform: translate(9, 1);
child: container {
rounded-clip {
- clip: -9 -1 374 34 / 5 0 0 5;
child: color {
bounds: -9 -1 374 34;
color: rgb(252,252,252);
}
+ clip: -9 -1 374 34 / 5 0 0 5;
}
border {
+ colors: rgb(213,208,204);
outline: -9 -1 374 34 / 5 0 0 5;
widths: 1 0 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
clip {
- clip: 0 0 357 32;
child: container {
text {
- font: "Cantarell 11";
- x: 0;
- y: 21;
color: rgb(50,50,50);
- glyphs: 273 7168 0 0 1, 370 8192 0 0 1, 358 13312 0 0 1, 272 8192 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 370 8192 0 0 1, 472 7168 0 0 1, 287 8192 0 0 1, 360 8192 0 0 1, 430 5120 0 0 1, 409 6144 0 0 1, 473 7168 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "comboboxentry";
+ offset: 0 21;
}
clip {
- clip: 0 6 101 19;
child: container {
color {
bounds: 0 0 357 32;
color: rgb(53,132,228);
}
text {
- font: "Cantarell 11";
- x: 0;
- y: 21;
color: rgb(252,252,252);
- glyphs: 273 7168 0 0 1, 370 8192 0 0 1, 358 13312 0 0 1, 272 8192 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 370 8192 0 0 1, 472 7168 0 0 1, 287 8192 0 0 1, 360 8192 0 0 1, 430 5120 0 0 1, 409 6144 0 0 1, 473 7168 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "comboboxentry";
+ offset: 0 21;
}
}
+ clip: 0 6 101 19;
}
}
+ clip: 0 0 357 32;
}
}
+ transform: translate(9, 1);
}
transform {
- transform: translate(374, 0) translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 36 34 / 0 5 5 0;
child: color {
bounds: -9 -4 34 32;
color: rgb(246,245,244);
}
+ clip: -10 -5 36 34 / 0 5 5 0;
}
border {
- outline: -10 -5 36 34 / 0 5 5 0;
- widths: 1 1 1 1;
colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(53,132,228);
+ outline: -10 -5 36 34 / 0 5 5 0;
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAOklEQVQ4jWNgGAWDD5QzMDD8J4DrKTGEoGZ8hhCtGZshODUz4zHgKAMDAyMDA8NBBgaGRlJtHwUkAACHZRnQomjWaAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
+ transform: translate(374, 0) translate(10, 5);
}
}
transform {
- transform: translate(0, 44);
child: container {
transform {
- transform: translate(9, 1);
child: container {
rounded-clip {
- clip: -9 -1 374 34 / 5 0 0 5;
child: color {
bounds: -9 -1 374 34;
color: rgb(250,249,248);
}
+ clip: -9 -1 374 34 / 5 0 0 5;
}
border {
+ colors: rgb(213,208,204);
outline: -9 -1 374 34 / 5 0 0 5;
widths: 1 0 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
clip {
- clip: 0 0 357 32;
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 21;
color: rgb(212,207,202);
- glyphs: 273 7168 0 0 1, 370 8192 0 0 1, 358 13312 0 0 1, 272 8192 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 370 8192 0 0 1, 472 7168 0 0 1, 287 8192 0 0 1, 360 8192 0 0 1, 430 5120 0 0 1, 409 6144 0 0 1, 473 7168 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "comboboxentry";
+ offset: 0 21;
}
+ clip: 0 0 357 32;
}
}
+ transform: translate(9, 1);
}
transform {
- transform: translate(374, 0) translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 36 34 / 0 5 5 0;
child: color {
bounds: -9 -4 34 32;
color: rgb(250,249,248);
}
+ clip: -10 -5 36 34 / 0 5 5 0;
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 36 34 / 0 5 5 0;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
- offset: 0.831373 0.811765 0.792157 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAOklEQVQ4jWNgGAWDD5QzMDD8J4DrKTGEoGZ8hhCtGZshODUz4zHgKAMDAyMDA8NBBgaGRlJtHwUkAACHZRnQomjWaAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
+ offset: 0.831373 0.811765 0.792157 0;
}
}
+ transform: translate(374, 0) translate(10, 5);
}
}
+ transform: translate(0, 44);
}
transform {
- transform: translate(0, 88) translate(9, 1);
child: container {
rounded-clip {
- clip: -9 -1 410 34 / 5;
child: color {
bounds: -9 -1 410 34;
color: rgb(252,252,252);
}
+ clip: -9 -1 410 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -9 -1 410 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
clip {
- clip: 0 0 370 32;
child: opacity {
- opacity: 0.54902;
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 21;
color: rgb(50,50,50);
- glyphs: 30 10240 0 0 1, 349 4096 0 0 1, 324 4096 0 0 1, 273 7168 0 0 1, 345 7168 0 0 1, 862 3072 0 0 1, 324 4096 0 0 1, 273 7168 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1, 862 3072 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 862 3072 0 0 1, 273 7168 0 0 1, 319 8192 0 0 1, 244 8192 0 0 1, 360 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 358 13312 0 0 1, 370 8192 0 0 1, 280 8192 0 0 1, 287 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Click icon to change mode";
+ offset: 0 21;
}
+ opacity: 0.54902;
}
+ clip: 0 0 370 32;
}
transform {
- transform: translate(370, 0) translate(6, 0);
child: color-matrix {
- matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 1);
- offset: 0.654902 0.666667 0.666667 0;
child: texture {
bounds: 0 8 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAyklEQVQ4jc3S3UpCURAF4K8w8ypQA1EfpkcI8SmEEh9STYzQQNCE3sELiQiiLhy1I/ucbl0wDHt+Fmv2DOeGCh4xxic2eIrYVdSM8JNqbmMeyZS9oPnnnUEZr5FY4h63aKCDdeSe8wgGEXxDNaGujvcTRRnsmTuJ5v3Mp5bBRwQbCYK8PwGl8N/hvxIEF4nYAZfhF+HvioqL8BCyVqgl8jVM5ewfrjGLgjW6uAnrOq5xWqSi5XgLeYfU+m+UMvqYYGt3ykP0QuUZ4hei9keg1mtPrwAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 1);
+ offset: 0.654902 0.666667 0.666667 0;
}
+ transform: translate(370, 0) translate(6, 0);
}
}
+ transform: translate(0, 88) translate(9, 1);
}
transform {
- transform: translate(0, 132) translate(9, 1);
child: container {
rounded-clip {
- clip: -9 -1 410 34 / 5;
child: color {
bounds: -9 -1 410 34;
color: rgb(250,249,248);
}
+ clip: -9 -1 410 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -9 -1 410 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
clip {
- clip: 0 0 392 32;
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 21;
color: rgb(212,207,202);
- glyphs: 287 8192 0 0 1, 360 8192 0 0 1, 430 5120 0 0 1, 409 6144 0 0 1, 473 7168 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "entry";
+ offset: 0 21;
}
+ clip: 0 0 392 32;
}
}
+ transform: translate(0, 132) translate(9, 1);
}
transform {
- transform: translate(0, 176);
child: container {
transform {
- transform: translate(9, 1);
child: container {
rounded-clip {
- clip: -9 -1 374 35 / 5 0 0 5;
child: color {
bounds: -9 -1 374 35;
color: rgb(252,252,252);
}
+ clip: -9 -1 374 35 / 5 0 0 5;
}
border {
+ colors: rgb(213,208,204);
outline: -9 -1 374 35 / 5 0 0 5;
widths: 1 0 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
clip {
- clip: 0 0 357 33;
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 22;
color: rgb(50,50,50);
- glyphs: 287 8192 0 0 1, 360 8192 0 0 1, 430 5120 0 0 1, 409 6144 0 0 1, 473 7168 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "entry";
+ offset: 0 22;
}
+ clip: 0 0 357 33;
}
}
+ transform: translate(9, 1);
}
transform {
- transform: translate(374, 0) translate(6, 5);
child: container {
rounded-clip {
- clip: -6 -5 36 35 / 0 5 5 0;
child: color {
bounds: -5 -4 34 33;
color: rgb(246,245,244);
}
+ clip: -6 -5 36 35 / 0 5 5 0;
}
border {
+ colors: rgb(213,208,204);
outline: -6 -5 36 35 / 0 5 5 0;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 4 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAfUlEQVQ4je3RMQoCMRBG4Q+voEIKC/H+d7Cwd1GULSzEUyg2azOyQ1gxB9gHgcnknxdCmJliwAHr1FtiH2d/uUTwHJIVuuj1LYINbklyivqObYuglgx4YDcVXPwQvPFM+1esJgquxjf3qS4tgmM1UJKkaxF8g/m2YvyJmYoPk2IlW2Wofj0AAAAASUVORK5CYII=");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
+ transform: translate(374, 0) translate(6, 5);
}
}
+ transform: translate(0, 176);
}
transform {
- transform: translate(0, 221);
child: container {
transform {
- transform: translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 137 34 / 5 0 0 5;
child: color {
bounds: -9 -4 136 32;
color: rgb(246,245,244);
}
+ clip: -10 -5 137 34 / 5 0 0 5;
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 137 34 / 5 0 0 5;
widths: 1 0 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(146,149,149);
- glyphs: 103 8192 0 0 1, 287 8192 0 0 1, 311 5120 0 0 1, 430 5120 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Left";
+ offset: 2 17;
}
transform {
- transform: translate(102, 0);
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAOklEQVQ4jWNgGAWDD5QzMDD8J4DrKTGEoGZ8hhCtGZshODUz4zHgKAMDAyMDA8NBBgaGRlJtHwUkAACHZRnQomjWaAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ transform: translate(102, 0);
}
}
}
+ transform: translate(10, 5);
}
transform {
- transform: translate(137, 0);
child: transform {
- transform: translate(10, 5);
child: container {
color {
bounds: -9 -4 135 32;
color: rgb(246,245,244);
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 136 34;
widths: 1 0 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(146,149,149);
- glyphs: 113 13312 0 0 1, 324 4096 0 0 1, 280 8192 0 0 1, 280 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Middle";
+ offset: 2 17;
}
transform {
- transform: translate(101, 0);
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAOklEQVQ4jWNgGAWDD5QzMDD8J4DrKTGEoGZ8hhCtGZshODUz4zHgKAMDAyMDA8NBBgaGRlJtHwUkAACHZRnQomjWaAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ transform: translate(101, 0);
}
}
}
+ transform: translate(10, 5);
}
+ transform: translate(137, 0);
}
transform {
- transform: translate(273, 0);
child: transform {
- transform: translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 137 34 / 0 5 5 0;
child: color {
bounds: -9 -4 135 32;
color: rgb(246,245,244);
}
+ clip: -10 -5 137 34 / 0 5 5 0;
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 137 34 / 0 5 5 0;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(146,149,149);
- glyphs: 165 9216 0 0 1, 324 4096 0 0 1, 312 8192 0 0 1, 319 8192 0 0 1, 430 5120 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Right";
+ offset: 2 17;
}
transform {
- transform: translate(101, 0);
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAOklEQVQ4jWNgGAWDD5QzMDD8J4DrKTGEoGZ8hhCtGZshODUz4zHgKAMDAyMDA8NBBgaGRlJtHwUkAACHZRnQomjWaAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ transform: translate(101, 0);
}
}
}
+ transform: translate(10, 5);
}
+ transform: translate(273, 0);
}
}
+ transform: translate(0, 221);
}
transform {
- transform: translate(0, 265);
child: container {
text {
- font: "Cantarell 11";
- x: 0;
- y: 22;
color: rgb(146,149,149);
- glyphs: 349 4096 0 0 1, 244 8192 0 0 1, 272 8192 0 0 1, 287 8192 0 0 1, 349 4096 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "label";
+ offset: 0 22;
}
transform {
- transform: translate(52, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 22;
color: rgb(212,207,202);
- glyphs: 349 4096 0 0 1, 244 8192 0 0 1, 272 8192 0 0 1, 287 8192 0 0 1, 349 4096 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "label";
+ offset: 0 22;
}
+ transform: translate(52, 0);
}
transform {
- transform: translate(104, 0) translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 112 34 / 5;
child: color {
bounds: -1 -1 112 34;
color: rgb(252,252,252);
}
+ clip: -1 -1 112 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 112 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
transform {
- transform: translate(6, 6);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(50,50,50);
- glyphs: 682 8192 0 0 1, 677 9216 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "50";
+ offset: 0 15;
}
+ transform: translate(6, 6);
}
transform {
- transform: translate(40, 0) translate(6, 0);
child: container {
border {
+ colors: rgba(213,208,204,0.3);
outline: -6 0 35 32;
widths: 0 0 0 1;
- colors: rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3);
}
color-matrix {
- matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 1);
- offset: 0.654902 0.666667 0.666667 0;
child: texture {
bounds: 4 8 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAHElEQVQ4jWNgGAXDADCi8f+Tqo+Jem4ZBUMYAABDXwEEvj+CVwAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 1);
+ offset: 0.654902 0.666667 0.666667 0;
}
}
+ transform: translate(40, 0) translate(6, 0);
}
transform {
- transform: translate(75, 0) translate(6, 0);
child: container {
border {
+ colors: rgba(213,208,204,0.3);
outline: -6 0 35 32 / 0 5 5 0;
widths: 0 0 0 1;
- colors: rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3);
}
color-matrix {
- matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 1);
- offset: 0.654902 0.666667 0.666667 0;
child: texture {
bounds: 4 8 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAKElEQVQ4jWNgGPbgPxTjBEyU2jDwBjCi8fH6F5s+il1ACIyEWBgGAADypgUMy1PhdwAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 1);
+ offset: 0.654902 0.666667 0.666667 0;
}
}
+ transform: translate(75, 0) translate(6, 0);
}
}
}
+ transform: translate(104, 0) translate(1, 1);
}
transform {
- transform: translate(236, 0) translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 112 34 / 5;
child: color {
bounds: -1 -1 112 34;
color: rgb(250,249,248);
}
+ clip: -1 -1 112 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 112 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
transform {
- transform: translate(6, 6);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(212,207,202);
- glyphs: 677 9216 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "0";
+ offset: 0 15;
}
+ transform: translate(6, 6);
}
transform {
- transform: translate(40, 0) translate(6, 0);
child: container {
color {
bounds: -5 0 34 32;
color: rgb(250,249,248);
}
border {
+ colors: rgba(213,208,204,0.3);
outline: -6 0 35 32;
widths: 0 0 0 1;
- colors: rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3);
}
color-matrix {
- matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 0.5);
- offset: 0.654902 0.666667 0.666667 0;
child: texture {
bounds: 4 8 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAHElEQVQ4jWNgGAXDADCi8f+Tqo+Jem4ZBUMYAABDXwEEvj+CVwAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 0.5);
+ offset: 0.654902 0.666667 0.666667 0;
}
}
+ transform: translate(40, 0) translate(6, 0);
}
transform {
- transform: translate(75, 0) translate(6, 0);
child: container {
rounded-clip {
- clip: -6 0 35 32 / 0 5 5 0;
child: color {
bounds: -5 0 34 32;
color: rgb(250,249,248);
}
+ clip: -6 0 35 32 / 0 5 5 0;
}
border {
+ colors: rgba(213,208,204,0.3);
outline: -6 0 35 32 / 0 5 5 0;
widths: 0 0 0 1;
- colors: rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3) rgba(213,208,204,0.3);
}
color-matrix {
- matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 0.5);
- offset: 0.654902 0.666667 0.666667 0;
child: texture {
bounds: 4 8 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAKElEQVQ4jWNgGPbgPxTjBEyU2jDwBjCi8fH6F5s+il1ACIyEWBgGAADypgUMy1PhdwAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.454902, 0.152941, -0.188235, 0, 0.305882, -0.192157, -0.666667, 0, 0.145098, -0.666667, -0.666667, 0, 0, 0, 0, 0.5);
+ offset: 0.654902 0.666667 0.666667 0;
}
}
+ transform: translate(75, 0) translate(6, 0);
}
}
}
+ transform: translate(236, 0) translate(1, 1);
}
}
+ transform: translate(0, 265);
}
transform {
- transform: translate(0, 309);
child: container {
transform {
- transform: translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
color {
bounds: 0 0 14 14;
color: rgb(246,245,244);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 0 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAeElEQVQokb3QXwpAQBDH8e9uzscRXEXyJFE8KFoXcxheVm1j0Cp+tQ87M5/2D/yc8g2qgC0GGKDzSIUpYBXUB+gEC19cAmyAQaAmRJloOiABJlGv5WnWD4dDq9i32tuOa41i+FiT719Gw/MT0rDj/Mu3sUAei77LDp72K7jAZx9tAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 273 7168 0 0 1, 319 8192 0 0 1, 287 8192 0 0 1, 273 7168 0 0 1, 345 7168 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "checkbutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(0, 2);
}
transform {
- transform: translate(0, 29) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
color {
bounds: 0 0 14 14;
color: rgb(246,245,244);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 273 7168 0 0 1, 319 8192 0 0 1, 287 8192 0 0 1, 273 7168 0 0 1, 345 7168 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "checkbutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(0, 29) translate(0, 2);
}
transform {
- transform: translate(0, 58) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
color {
bounds: 0 0 14 14;
color: rgb(246,245,244);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 0 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAOUlEQVQokWNgGAVEAW8GBoYnDAwM/3HgxwwMDF7YND7GowmGH8EUM1HDqV4EbH3EwMDgSQ2Lhj0AABu4GmjkhFgCAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 273 7168 0 0 1, 319 8192 0 0 1, 287 8192 0 0 1, 273 7168 0 0 1, 345 7168 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "checkbutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(0, 58) translate(0, 2);
}
transform {
- transform: translate(0, 87) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
color {
bounds: 0 0 14 14;
color: rgb(250,249,248);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
- offset: 0.831373 0.811765 0.792157 0;
child: texture {
bounds: 0 0 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAeElEQVQokb3QXwpAQBDH8e9uzscRXEXyJFE8KFoXcxheVm1j0Cp+tQ87M5/2D/yc8g2qgC0GGKDzSIUpYBXUB+gEC19cAmyAQaAmRJloOiABJlGv5WnWD4dDq9i32tuOa41i+FiT719Gw/MT0rDj/Mu3sUAei77LDp72K7jAZx9tAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
+ offset: 0.831373 0.811765 0.792157 0;
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(212,207,202);
- glyphs: 273 7168 0 0 1, 319 8192 0 0 1, 287 8192 0 0 1, 273 7168 0 0 1, 345 7168 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "checkbutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(0, 87) translate(0, 2);
}
transform {
- transform: translate(0, 116) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
color {
bounds: 0 0 14 14;
color: rgb(250,249,248);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(212,207,202);
- glyphs: 273 7168 0 0 1, 319 8192 0 0 1, 287 8192 0 0 1, 273 7168 0 0 1, 345 7168 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "checkbutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(0, 116) translate(0, 2);
}
transform {
- transform: translate(0, 145) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
color {
bounds: 0 0 14 14;
color: rgb(250,249,248);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
- offset: 0.831373 0.811765 0.792157 0;
child: texture {
bounds: 0 0 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAOUlEQVQokWNgGAVEAW8GBoYnDAwM/3HgxwwMDF7YND7GowmGH8EUM1HDqV4EbH3EwMDgSQ2Lhj0AABu4GmjkhFgCAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
+ offset: 0.831373 0.811765 0.792157 0;
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(212,207,202);
- glyphs: 273 7168 0 0 1, 319 8192 0 0 1, 287 8192 0 0 1, 273 7168 0 0 1, 345 7168 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "checkbutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(0, 145) translate(0, 2);
}
transform {
- transform: translate(125, 0) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
rounded-clip {
- clip: -1 -1 16 16 / 8;
child: color {
bounds: 0 0 14 14;
color: rgb(246,245,244);
}
+ clip: -1 -1 16 16 / 8;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 8;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 409 6144 0 0 1, 244 8192 0 0 1, 280 8192 0 0 1, 324 4096 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "radiobutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(125, 0) translate(0, 2);
}
transform {
- transform: translate(125, 29) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
rounded-clip {
- clip: -1 -1 16 16 / 8;
child: color {
bounds: 0 0 14 14;
color: rgb(246,245,244);
}
+ clip: -1 -1 16 16 / 8;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 8;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 409 6144 0 0 1, 244 8192 0 0 1, 280 8192 0 0 1, 324 4096 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "radiobutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(125, 29) translate(0, 2);
}
transform {
- transform: translate(125, 58) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
rounded-clip {
- clip: -1 -1 16 16 / 8;
child: color {
bounds: 0 0 14 14;
color: rgb(246,245,244);
}
+ clip: -1 -1 16 16 / 8;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 8;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 0 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAOUlEQVQokWNgGAVEAW8GBoYnDAwM/3HgxwwMDF7YND7GowmGH8EUM1HDqV4EbH3EwMDgSQ2Lhj0AABu4GmjkhFgCAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 409 6144 0 0 1, 244 8192 0 0 1, 280 8192 0 0 1, 324 4096 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "radiobutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(125, 58) translate(0, 2);
}
transform {
- transform: translate(125, 87) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
rounded-clip {
- clip: -1 -1 16 16 / 8;
child: color {
bounds: 0 0 14 14;
color: rgb(250,249,248);
}
+ clip: -1 -1 16 16 / 8;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 8;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
- offset: 0.831373 0.811765 0.792157 0;
child: texture {
bounds: 0 0 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAASklEQVQokWNgGJmAjYGBoZWBgeERFLcwMDCwEqOxlYGB4T8abiZG42MsGh+iK2LCovE/MWLYNC4iUgwDsDJA/PQQihsZiAyc4QYASeYTs7b/ALUAAAAASUVORK5CYII=");
}
+ matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
+ offset: 0.831373 0.811765 0.792157 0;
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(212,207,202);
- glyphs: 409 6144 0 0 1, 244 8192 0 0 1, 280 8192 0 0 1, 324 4096 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "radiobutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(125, 87) translate(0, 2);
}
transform {
- transform: translate(125, 116) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
rounded-clip {
- clip: -1 -1 16 16 / 8;
child: color {
bounds: 0 0 14 14;
color: rgb(250,249,248);
}
+ clip: -1 -1 16 16 / 8;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 8;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(212,207,202);
- glyphs: 409 6144 0 0 1, 244 8192 0 0 1, 280 8192 0 0 1, 324 4096 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "radiobutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(125, 116) translate(0, 2);
}
transform {
- transform: translate(125, 145) translate(0, 2);
child: container {
transform {
- transform: translate(5, 2);
child: container {
rounded-clip {
- clip: -1 -1 16 16 / 8;
child: color {
bounds: 0 0 14 14;
color: rgb(250,249,248);
}
+ clip: -1 -1 16 16 / 8;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 16 16 / 8;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
- offset: 0.831373 0.811765 0.792157 0;
child: texture {
bounds: 0 0 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAOUlEQVQokWNgGAVEAW8GBoYnDAwM/3HgxwwMDF7YND7GowmGH8EUM1HDqV4EbH3EwMDgSQ2Lhj0AABu4GmjkhFgCAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
+ offset: 0.831373 0.811765 0.792157 0;
}
}
+ transform: translate(5, 2);
}
transform {
- transform: translate(24, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 15;
color: rgb(212,207,202);
- glyphs: 409 6144 0 0 1, 244 8192 0 0 1, 280 8192 0 0 1, 324 4096 0 0 1, 370 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "radiobutton";
+ offset: 0 15;
}
+ transform: translate(24, 0);
}
}
+ transform: translate(125, 145) translate(0, 2);
}
transform {
- transform: translate(247, 0);
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: transform {
- transform: translate(8, 11.5) rotate(323.944) translate(-8, -11.5);
child: texture {
bounds: 0 3.5 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABE0lEQVQ4jbXSPy9DURjH8U9bSqhEmog/A6PFJGGRCInRZrQZTN6B1XsysJgMRklJDRYGtVBtWkRr6HObG2muRuJJbnJynvP9nt9zc/iHKuEIZ3jEFeaHhbfwgO6P73AYeAftAfANFn+Dp1FLQffYx8yw0Y9T8B3mMs6OoYh8evMSnRDsZcCFkJf1fraRaCygFevzDEE3JBMYRSMR1CPaVwYsYk/Fup1swC2e0MBGhqAcgtlI0hecxjgNHKRuSVcRKyHJi5EL0axiNxodrEWiFsaxhE1MBvOOCjq51A3rOMFrSNp4RhMv+AhhHRfR6yeg9+4rWE0J8sjhLQTNgGsJlE6QVAnbWI65mzFOFdf4HMD8vb4BZVRHF0lPimAAAAAASUVORK5CYII=");
}
+ transform: translate(8, 11.5) rotate(323.944) translate(-8, -11.5);
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ transform: translate(247, 0);
}
transform {
- transform: translate(247, 87);
child: opacity {
- opacity: 0.501961;
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 0.5);
- offset: 0.572549 0.584314 0.584314 0;
child: transform {
- transform: translate(8, 11.5) rotate(323.944) translate(-8, -11.5);
child: texture {
bounds: 0 3.5 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABE0lEQVQ4jbXSPy9DURjH8U9bSqhEmog/A6PFJGGRCInRZrQZTN6B1XsysJgMRklJDRYGtVBtWkRr6HObG2muRuJJbnJynvP9nt9zc/iHKuEIZ3jEFeaHhbfwgO6P73AYeAftAfANFn+Dp1FLQffYx8yw0Y9T8B3mMs6OoYh8evMSnRDsZcCFkJf1fraRaCygFevzDEE3JBMYRSMR1CPaVwYsYk/Fup1swC2e0MBGhqAcgtlI0hecxjgNHKRuSVcRKyHJi5EL0axiNxodrEWiFsaxhE1MBvOOCjq51A3rOMFrSNp4RhMv+AhhHRfR6yeg9+4rWE0J8sjhLQTNgGsJlE6QVAnbWI65mzFOFdf4HMD8vb4BZVRHF0lPimAAAAAASUVORK5CYII=");
}
+ transform: translate(8, 11.5) rotate(323.944) translate(-8, -11.5);
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 0.5);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ opacity: 0.501961;
}
+ transform: translate(247, 87);
}
}
+ transform: translate(0, 309);
}
}
transform {
- transform: translate(420, 0);
child: color {
bounds: 0 0 1 558;
color: rgba(0,0,0,0.1);
}
+ transform: translate(420, 0);
}
transform {
- transform: translate(431, 0);
child: container {
transform {
- transform: translate(17, 5);
child: container {
rounded-clip {
- clip: -17 -5 122 34 / 5;
child: color {
bounds: -16 -4 120 32;
color: rgb(246,245,244);
}
+ clip: -17 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -17 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(146,149,149);
- glyphs: 430 5120 0 0 1, 370 8192 0 0 1, 312 8192 0 0 1, 312 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "togglebutton";
+ offset: 2 17;
}
}
+ transform: translate(17, 5);
}
transform {
- transform: translate(0, 44) translate(17, 5);
child: container {
rounded-clip {
- clip: -17 -5 122 34 / 5;
child: color {
bounds: -16 -4 120 32;
color: rgb(250,249,248);
}
+ clip: -17 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -17 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(212,207,202);
- glyphs: 430 5120 0 0 1, 370 8192 0 0 1, 312 8192 0 0 1, 312 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "togglebutton";
+ offset: 2 17;
}
}
+ transform: translate(0, 44) translate(17, 5);
}
transform {
- transform: translate(0, 88) translate(17, 5);
child: container {
rounded-clip {
- clip: -17 -5 122 34 / 5;
child: color {
bounds: -16 -4 120 32;
color: rgb(228,228,224);
}
+ clip: -17 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -17 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(146,149,149);
- glyphs: 430 5120 0 0 1, 370 8192 0 0 1, 312 8192 0 0 1, 312 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "togglebutton";
+ offset: 2 17;
}
}
+ transform: translate(0, 88) translate(17, 5);
}
transform {
- transform: translate(0, 132) translate(17, 5);
child: container {
rounded-clip {
- clip: -17 -5 122 34 / 5;
child: color {
bounds: -16 -4 120 32;
color: rgb(228,228,224);
}
+ clip: -17 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -17 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(212,207,202);
- glyphs: 430 5120 0 0 1, 370 8192 0 0 1, 312 8192 0 0 1, 312 8192 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "togglebutton";
+ offset: 2 17;
}
}
+ transform: translate(0, 132) translate(17, 5);
}
transform {
- transform: translate(0, 176);
child: transform {
- transform: translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 122 34 / 5;
child: color {
bounds: -9 -4 120 32;
color: rgb(246,245,244);
}
+ clip: -10 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(146,149,149);
- glyphs: 1 10240 0 0 1, 360 8192 0 0 1, 280 8192 0 0 1, 409 6144 0 0 1, 287 8192 0 0 1, 244 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Andrea";
+ offset: 2 17;
}
transform {
- transform: translate(86, 0);
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAOklEQVQ4jWNgGAWDD5QzMDD8J4DrKTGEoGZ8hhCtGZshODUz4zHgKAMDAyMDA8NBBgaGRlJtHwUkAACHZRnQomjWaAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ transform: translate(86, 0);
}
}
}
+ transform: translate(10, 5);
}
+ transform: translate(0, 176);
}
transform {
- transform: translate(0, 220);
child: transform {
- transform: translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 122 34 / 5;
child: color {
bounds: -9 -4 120 32;
color: rgb(250,249,248);
}
+ clip: -10 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
text {
- font: "Cantarell 11";
- x: 2;
- y: 17;
color: rgb(212,207,202);
- glyphs: 126 11264 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Otto";
+ offset: 2 17;
}
transform {
- transform: translate(86, 0);
child: color-matrix {
- matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
- offset: 0.831373 0.811765 0.792157 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAOklEQVQ4jWNgGAWDD5QzMDD8J4DrKTGEoGZ8hhCtGZshODUz4zHgKAMDAyMDA8NBBgaGRlJtHwUkAACHZRnQomjWaAAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.631373, 0.00784314, -0.313726, 0, 0.129412, -0.337255, -0.792157, 0, -0.0313726, -0.811765, -0.792157, 0, 0, 0, 0, 0.5);
+ offset: 0.831373 0.811765 0.792157 0;
}
+ transform: translate(86, 0);
}
}
}
+ transform: translate(10, 5);
}
+ transform: translate(0, 220);
}
transform {
- transform: translate(0, 264);
child: transform {
- transform: translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 122 34 / 5;
child: color {
bounds: -9 -4 120 32;
color: rgb(246,245,244);
}
+ clip: -10 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
text {
- font: "Cantarell 11";
- x: 0;
- y: 17;
color: rgb(146,149,149);
- glyphs: 173 9216 0 0 1, 244 8192 0 0 1, 360 8192 0 0 1, 417 7168 0 0 1, 862 3072 0 0 1, 165 9216 0 0 1, 287 8192 0 0 1, 312 8192 0 0 1, 438 8192 0 0 1, 349 4096 0 0 1, 244 8192 0 0 1, 409 6144 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Sans Regular";
+ offset: 0 17;
}
transform {
- transform: translate(86, 0);
child: transform {
- transform: translate(1, 0);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 17;
color: rgb(146,149,149);
- glyphs: 678 7168 0 0 1, 679 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "12";
+ offset: 0 17;
}
+ transform: translate(1, 0);
}
+ transform: translate(86, 0);
}
}
}
+ transform: translate(10, 5);
}
+ transform: translate(0, 264);
}
transform {
- transform: translate(0, 308);
child: transform {
- transform: translate(5, 5);
child: container {
rounded-clip {
- clip: -5 -5 122 34 / 5;
child: color {
bounds: -4 -4 120 32;
color: rgb(246,245,244);
}
+ clip: -5 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -5 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
color {
@@ -1436,872 +1361,821 @@ transform {
color: rgb(49,104,160);
}
transform {
- transform: translate(1, 1);
child: border {
+ colors: rgba(0,0,0,0.3);
outline: -1 -1 112 24;
- widths: 1 1 1 1;
- colors: rgba(0,0,0,0.3) rgba(0,0,0,0.3) rgba(0,0,0,0.3) rgba(0,0,0,0.3);
}
+ transform: translate(1, 1);
}
}
}
+ transform: translate(5, 5);
}
+ transform: translate(0, 308);
}
transform {
- transform: translate(0, 352);
child: transform {
- transform: translate(10, 5);
child: container {
rounded-clip {
- clip: -10 -5 122 34 / 5;
child: color {
bounds: -9 -4 120 32;
color: rgb(246,245,244);
}
+ clip: -10 -5 122 34 / 5;
}
border {
+ colors: rgb(213,208,204);
outline: -10 -5 122 34 / 5;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
transform {
- transform: translate(16, 0);
child: text {
- font: "Cantarell 11";
- x: 0;
- y: 17;
color: rgb(146,149,149);
- glyphs: 822 4096 0 0 1, 115 11264 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1, 287 8192 0 0 1, 823 4096 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "(None)";
+ offset: 0 17;
}
+ transform: translate(16, 0);
}
transform {
- transform: translate(86, 0);
child: color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 0 4 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAeUlEQVQ4jcWTQQqAIBBFn9HV6i4uOmaL7hF1hVbZRkF0tMmCPnwYdeahH4RcM+AEH4AV+jNJw8EnMGkBpf0MsiRDd4AAsdKBFhAywSTN8doIkBgGYLpKk0qvAVB+s0q9AHuk/zP4BLD7uiXIFWD0Re0TSd6Aof3uXhd1yT8mvMGiQgAAAABJRU5ErkJggg==");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
+ transform: translate(86, 0);
}
}
}
+ transform: translate(10, 5);
}
+ transform: translate(0, 352);
}
transform {
- transform: translate(0, 396) translate(17, 5);
child: container {
text {
- font: "Cantarell 11";
- x: 10;
- y: 17;
color: rgb(53,132,228);
- glyphs: 349 4096 0 0 1, 324 4096 0 0 1, 360 8192 0 0 1, 345 7168 0 0 1, 862 3072 0 0 1, 272 8192 0 0 1, 438 8192 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "link button";
+ offset: 10 17;
}
color {
bounds: 10 19 68 1;
color: rgb(53,132,228);
}
}
+ transform: translate(0, 396) translate(17, 5);
}
transform {
- transform: translate(0, 440) translate(37, 1);
child: container {
rounded-clip {
- clip: -1 -1 50 26 / 13;
child: color {
bounds: -1 -1 50 26;
color: rgb(234,232,230);
}
+ clip: -1 -1 50 26 / 13;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 50 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
rounded-clip {
- clip: -1 -1 26 26 / 13;
child: color {
bounds: 0 0 24 24;
color: rgb(246,245,244);
}
+ clip: -1 -1 26 26 / 13;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 26 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
}
+ transform: translate(0, 440) translate(37, 1);
}
transform {
- transform: translate(0, 476) translate(37, 1);
child: container {
rounded-clip {
- clip: -1 -1 50 26 / 13;
child: color {
bounds: -1 -1 50 26;
color: rgb(250,249,248);
}
+ clip: -1 -1 50 26 / 13;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 50 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
rounded-clip {
- clip: -1 -1 26 26 / 13;
child: color {
bounds: 0 0 24 24;
color: rgb(250,249,248);
}
+ clip: -1 -1 26 26 / 13;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 26 26 / 13;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
}
+ transform: translate(0, 476) translate(37, 1);
}
}
+ transform: translate(431, 0);
}
transform {
- transform: translate(563, 0);
child: color {
bounds: 0 0 1 558;
color: rgba(0,0,0,0.1);
}
+ transform: translate(563, 0);
}
transform {
- transform: translate(574, 0);
child: container {
container {
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 502 4 / 2;
child: color {
bounds: -1 -1 502 4;
color: rgb(234,232,230);
}
+ clip: -1 -1 502 4 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 502 4 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(0, -1) translate(0, 1);
child: container {
rounded-clip {
- clip: -1 -1 252 4 / 2 1.5 1.5 2;
child: color {
bounds: -1 -1 252 4;
color: rgb(53,132,228);
}
+ clip: -1 -1 252 4 / 2 1.5 1.5 2;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 252 4 / 2 1.5 1.5 2;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(0, -1) translate(0, 1);
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(0, 10);
child: transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 502 4 / 2;
child: color {
bounds: -1 -1 502 4;
color: rgb(234,232,230);
}
+ clip: -1 -1 502 4 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 502 4 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(250, -1) translate(0, 1);
child: container {
rounded-clip {
- clip: -1 -1 252 4 / 1.5 2 2 1.5;
child: color {
bounds: -1 -1 252 4;
color: rgb(53,132,228);
}
+ clip: -1 -1 252 4 / 1.5 2 2 1.5;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 252 4 / 1.5 2 2 1.5;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(250, -1) translate(0, 1);
}
}
+ transform: translate(1, 1);
}
+ transform: translate(0, 10);
}
transform {
- transform: translate(0, 20);
child: container {
transform {
- transform: translate(237, 0);
child: text {
- font: "Cantarell 9.1669921875";
- x: 0;
- y: 13;
color: rgba(46,52,54,0.4);
- glyphs: 682 7168 0 0 1, 677 8192 0 0 1, 859 1024 0 0 1, 919 12288 0 0 1;
+ font: "Cantarell 9.1669921875";
+ glyphs: "50", 859 1, "%";
+ offset: 0 13;
}
+ transform: translate(237, 0);
}
transform {
- transform: translate(0, 16) translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 502 4 / 2;
child: color {
bounds: -1 -1 502 4;
color: rgb(234,232,230);
}
+ clip: -1 -1 502 4 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 502 4 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(43, -1) translate(0, 1);
child: container {
rounded-clip {
- clip: -1 -1 102 4 / 1.5;
child: color {
bounds: -1 -1 102 4;
color: rgb(53,132,228);
}
+ clip: -1 -1 102 4 / 1.5;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 102 4 / 1.5;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(43, -1) translate(0, 1);
}
}
+ transform: translate(0, 16) translate(1, 1);
}
}
+ transform: translate(0, 20);
}
transform {
- transform: translate(0, 46);
child: transform {
- transform: translate(3, 3);
child: container {
rounded-clip {
- clip: -3 -3 502 9 / 3;
child: color {
bounds: -3 -3 502 9;
color: rgb(252,252,252);
}
+ clip: -3 -3 502 9 / 3;
}
border {
+ colors: rgb(213,208,204);
outline: -3 -3 502 9 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(1, 1);
child: border {
+ colors: rgba(146,149,149,0.15);
outline: -1 -1 496 3 / 1;
- widths: 1 1 1 1;
- colors: rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15);
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 297 3 / 1;
child: color {
bounds: -1 -1 297 3;
color: rgb(53,132,228);
}
+ clip: -1 -1 297 3 / 1;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 297 3 / 1;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(1, 1);
}
}
+ transform: translate(3, 3);
}
+ transform: translate(0, 46);
}
transform {
- transform: translate(0, 61);
child: transform {
- transform: translate(3, 3);
child: container {
rounded-clip {
- clip: -3 -3 502 9 / 3;
child: color {
bounds: -3 -3 502 9;
color: rgb(252,252,252);
}
+ clip: -3 -3 502 9 / 3;
}
border {
+ colors: rgb(213,208,204);
outline: -3 -3 502 9 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(2, 1);
child: container {
rounded-clip {
- clip: -1 -1 97 3 / 1;
child: color {
bounds: -1 -1 97 3;
color: rgb(53,132,228);
}
+ clip: -1 -1 97 3 / 1;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 97 3 / 1;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(2, 1);
}
transform {
- transform: translate(99, 0) translate(2, 1);
child: container {
rounded-clip {
- clip: -1 -1 97 3 / 1;
child: color {
bounds: -1 -1 97 3;
color: rgb(53,132,228);
}
+ clip: -1 -1 97 3 / 1;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 97 3 / 1;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(99, 0) translate(2, 1);
}
transform {
- transform: translate(198, 0) translate(2, 1);
child: border {
+ colors: rgba(146,149,149,0.15);
outline: -1 -1 97 3 / 1;
- widths: 1 1 1 1;
- colors: rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15);
}
+ transform: translate(198, 0) translate(2, 1);
}
transform {
- transform: translate(297, 0) translate(2, 1);
child: border {
+ colors: rgba(146,149,149,0.15);
outline: -1 -1 97 3 / 1;
- widths: 1 1 1 1;
- colors: rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15);
}
+ transform: translate(297, 0) translate(2, 1);
}
transform {
- transform: translate(396, 0) translate(2, 1);
child: border {
+ colors: rgba(146,149,149,0.15);
outline: -1 -1 97 3 / 1;
- widths: 1 1 1 1;
- colors: rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15) rgba(146,149,149,0.15);
}
+ transform: translate(396, 0) translate(2, 1);
}
}
+ transform: translate(3, 3);
}
+ transform: translate(0, 61);
}
}
transform {
- transform: translate(0, 76);
child: container {
transform {
- transform: translate(12, 12);
child: transform {
- transform: translate(0, 3) translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 478 4 / 2;
child: color {
bounds: -1 -1 478 4;
color: rgb(234,232,230);
}
+ clip: -1 -1 478 4 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 478 4 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
rounded-clip {
- clip: -1 -1 237 4 / 2;
child: color {
bounds: -1 -1 237 4;
color: rgb(53,132,228);
}
+ clip: -1 -1 237 4 / 2;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 237 4 / 2;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
transform {
- transform: translate(234, 0) translate(-8, -8);
child: container {
rounded-clip {
- clip: -1 -1 20 20 / 10;
child: color {
bounds: 0 0 18 18;
color: rgb(246,245,244);
}
+ clip: -1 -1 20 20 / 10;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 20 20 / 10;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(234, 0) translate(-8, -8);
}
}
+ transform: translate(0, 3) translate(1, 1);
}
+ transform: translate(12, 12);
}
transform {
- transform: translate(0, 34) translate(12, 12);
child: transform {
- transform: translate(0, 3) translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 478 4 / 2;
child: color {
bounds: -1 -1 478 4;
color: rgb(250,249,248);
}
+ clip: -1 -1 478 4 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 478 4 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(234, 0) translate(-8, -8);
child: container {
rounded-clip {
- clip: -1 -1 20 20 / 10;
child: color {
bounds: 0 0 18 18;
color: rgb(250,249,248);
}
+ clip: -1 -1 20 20 / 10;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 20 20 / 10;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(234, 0) translate(-8, -8);
}
}
+ transform: translate(0, 3) translate(1, 1);
}
+ transform: translate(0, 34) translate(12, 12);
}
}
+ transform: translate(0, 76);
}
transform {
- transform: translate(0, 150) translate(12, 12);
child: container {
transform {
- transform: translate(0, 4) translate(0, 6);
child: container {
transform {
- transform: translate(2, 0);
child: color {
bounds: 0 0 1 6;
color: rgba(146,149,149,0.55);
}
+ transform: translate(2, 0);
}
transform {
- transform: translate(120, 0);
child: color {
bounds: 0 0 1 6;
color: rgba(146,149,149,0.55);
}
+ transform: translate(120, 0);
}
transform {
- transform: translate(239, 0);
child: color {
bounds: 0 0 1 6;
color: rgba(146,149,149,0.55);
}
+ transform: translate(239, 0);
}
transform {
- transform: translate(357, 0);
child: color {
bounds: 0 0 1 6;
color: rgba(146,149,149,0.55);
}
+ transform: translate(357, 0);
}
transform {
- transform: translate(476, 0);
child: color {
bounds: 0 0 1 6;
color: rgba(146,149,149,0.55);
}
+ transform: translate(476, 0);
}
}
+ transform: translate(0, 4) translate(0, 6);
}
transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 478 4 / 2;
child: color {
bounds: -1 -1 478 4;
color: rgb(234,232,230);
}
+ clip: -1 -1 478 4 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 478 4 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(237, 0) translate(-10, -10);
child: texture {
bounds: 1 1 20 25;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAZCAYAAAAxFw7TAAAABmJLR0QA/wD/AP+gvaeTAAAC6ElEQVQ4jaXVy2sTQRwH8O/sI81mUrfd3ZYYUBGiZJu2eLCiiDQSUEFUTPWkR1MQjXgwei0UFGkRBf8EH4i09GTQdOOjqJv0oKKllcYoPTSXShrjbkqTGA+akEZTa/M9LfP48JuZ3R2Cv4f3+nx9Bw8cOOV2u3dRSlsB4LtppqenpmKR8fG7zzRtFEC+diKpbfB6vScuXLx4WxRF20ans5kKAjieBwDk83mYpolUKpVdzGSMm7dunZ94+nSkej5b9cwEg8EbZ/r7B1W3u9XpdDYJVitYlgUhBIQQcCwLwWpFW1tbkyzL9s7OzsOiKLZNxuMRAKUV4Llg8MZxvz+gqiptsljq7ETVnvA8FEWxtLe3dzVv2KBMxuOPK+C+/fv7AoHAoKqqlGWYf2KVJRECSZIskix3fUkmp+fm5mYIAH5kbGxuR3e3w2azrRmrjmGaePP27fxJv38L4/X5/KIo0vViAEBtNrS2tDT39vYeZwP9/Vd39fR0C1brukEA4DmuaWl5mWNUj2d3I9VVqqQUno6O3Yyd0hae4xoGOY4DtdslBqUSAfnj/V5XCCFgDMNIF/J/fEH/nUKhAMMwFpmPMzOTZi7XMGiaJqY/fNCZiKbdT6VS2UbB+VQqq2naA0Z78uRhJpPJNVJlzjTxLZtdikajoyyA4teFhfkOj+eQoigW5j8PqFgsYmZ21hgeHj775fPndywAJJPJ9w6HY6uiKG5Zlvm1kiUAs4mE+Sgcvnf/zp1rQNXf5tXLl2FVVfcIguCUZdnyL/Q3lovp+vPBgYHTAH6sAAH8GI9EHrhcrh5qt2+WJYkndZZfrkx//frFlVDoGIBCuY+tHRuNRh+6XK6d9dAyFtf1icuh0FHUXAO1YAXdtn17D6V0UzVaApBIJHJxXZ8IXbp0pBarB/5CNe0XardvkiWJB4DEp0+5mK6/qIetBpbREY/Hs1ew2Tam0+liLBZbFVtr+OtDQ+HrQ0NhAHwj0LryE/8bFCfO1plnAAAAAElFTkSuQmCC");
}
+ transform: translate(237, 0) translate(-10, -10);
}
}
+ transform: translate(1, 1);
}
}
+ transform: translate(0, 150) translate(12, 12);
}
transform {
- transform: translate(0, 196);
child: container {
container {
transform {
- transform: translate(119, 0);
child: transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 4 362 / 2;
child: color {
bounds: -1 -1 4 362;
color: rgb(234,232,230);
}
+ clip: -1 -1 4 362 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 4 362 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(-1, 0) translate(1, 0);
child: container {
rounded-clip {
- clip: -1 -1 4 182 / 2 2 1.5 1.5;
child: color {
bounds: -1 -1 4 182;
color: rgb(53,132,228);
}
+ clip: -1 -1 4 182 / 2 2 1.5 1.5;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 4 182 / 2 2 1.5 1.5;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(-1, 0) translate(1, 0);
}
}
+ transform: translate(1, 1);
}
+ transform: translate(119, 0);
}
transform {
- transform: translate(129, 0);
child: transform {
- transform: translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 4 362 / 2;
child: color {
bounds: -1 -1 4 362;
color: rgb(234,232,230);
}
+ clip: -1 -1 4 362 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 4 362 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(-1, 180) translate(1, 0);
child: container {
rounded-clip {
- clip: -1 -1 4 182 / 1.5 1.5 2 2;
child: color {
bounds: -1 -1 4 182;
color: rgb(53,132,228);
}
+ clip: -1 -1 4 182 / 1.5 1.5 2 2;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 4 182 / 1.5 1.5 2 2;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
+ transform: translate(-1, 180) translate(1, 0);
}
}
+ transform: translate(1, 1);
}
+ transform: translate(129, 0);
}
}
transform {
- transform: translate(251, 0);
child: container {
transform {
- transform: translate(28, 12);
child: container {
text {
- font: "Cantarell 11";
- x: 26;
- y: 15;
color: rgba(146,149,149,0.55);
- glyphs: 682 8192 0 0 1, 677 9216 0 0 1, 805 4096 0 0 1, 677 9216 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "50.0";
+ offset: 26 15;
}
transform {
- transform: translate(39, 28) translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 4 310 / 2;
child: color {
bounds: -1 -1 4 310;
color: rgb(234,232,230);
}
+ clip: -1 -1 4 310 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 4 310 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
rounded-clip {
- clip: -1 -1 4 154 / 2;
child: color {
bounds: -1 -1 4 154;
color: rgb(53,132,228);
}
+ clip: -1 -1 4 154 / 2;
}
border {
+ colors: rgb(53,132,228);
outline: -1 -1 4 154 / 2;
- widths: 1 1 1 1;
- colors: rgb(53,132,228) rgb(53,132,228) rgb(53,132,228) rgb(53,132,228);
}
}
transform {
- transform: translate(0, 151) translate(-8, -8);
child: container {
rounded-clip {
- clip: -1 -1 20 20 / 10;
child: color {
bounds: 0 0 18 18;
color: rgb(246,245,244);
}
+ clip: -1 -1 20 20 / 10;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 20 20 / 10;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(0, 151) translate(-8, -8);
}
}
+ transform: translate(39, 28) translate(1, 1);
}
}
+ transform: translate(28, 12);
}
transform {
- transform: translate(129, 0) translate(12, 12);
child: container {
text {
- font: "Cantarell 11";
- x: 26;
- y: 15;
color: rgba(146,149,149,0.55);
- glyphs: 682 8192 0 0 1, 677 9216 0 0 1, 805 4096 0 0 1, 677 9216 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "50.0";
+ offset: 26 15;
}
transform {
- transform: translate(39, 28) translate(1, 1);
child: container {
rounded-clip {
- clip: -1 -1 4 310 / 2;
child: color {
bounds: -1 -1 4 310;
color: rgb(250,249,248);
}
+ clip: -1 -1 4 310 / 2;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 4 310 / 2;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(0, 151) translate(-8, -8);
child: container {
rounded-clip {
- clip: -1 -1 20 20 / 10;
child: color {
bounds: 0 0 18 18;
color: rgb(250,249,248);
}
+ clip: -1 -1 20 20 / 10;
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 20 20 / 10;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
+ transform: translate(0, 151) translate(-8, -8);
}
}
+ transform: translate(39, 28) translate(1, 1);
}
}
+ transform: translate(129, 0) translate(12, 12);
}
}
+ transform: translate(251, 0);
}
}
+ transform: translate(0, 196);
}
}
+ transform: translate(574, 0);
}
transform {
- transform: translate(1086, 0);
child: color {
bounds: 0 0 1 558;
color: rgba(0,0,0,0.1);
}
+ transform: translate(1086, 0);
}
transform {
- transform: translate(1097, 0);
child: container {
transform {
- transform: translate(1, 1);
child: container {
border {
- outline: -1 -1 114 135;
- widths: 1 1 1 1;
colors: rgb(213,208,204) rgb(255,255,255) rgb(255,255,255) rgb(213,208,204);
+ outline: -1 -1 114 135;
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 81 4096 0 0 1, 360 8192 0 0 1, 417 7168 0 0 1, 287 8192 0 0 1, 430 6144 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Inset";
+ offset: 0 15;
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(0, 141) translate(1, 1);
child: container {
border {
- outline: -1 -1 114 135;
- widths: 1 1 1 1;
colors: rgb(255,255,255) rgb(213,208,204) rgb(213,208,204) rgb(255,255,255);
+ outline: -1 -1 114 135;
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 126 11264 0 0 1, 438 8192 0 0 1, 430 6144 0 0 1, 417 7168 0 0 1, 287 8192 0 0 1, 430 6144 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Outset";
+ offset: 0 15;
}
}
+ transform: translate(0, 141) translate(1, 1);
}
transform {
- transform: translate(0, 282) translate(2, 2);
child: container {
container {
border {
- outline: -2 -2 114 135;
- widths: 1 1 1 1;
colors: rgb(213,208,204) rgb(255,255,255) rgb(255,255,255) rgb(213,208,204);
+ outline: -2 -2 114 135;
}
border {
- outline: -1 -1 112 133;
- widths: 1 1 1 1;
colors: rgb(255,255,255) rgb(213,208,204) rgb(213,208,204) rgb(255,255,255);
+ outline: -1 -1 112 133;
}
border {
+ colors: rgba(0,0,0,0);
outline: -2 -2 114 135;
- widths: 2 2 2 2;
- colors: rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);
+ widths: 2;
}
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 69 11264 0 0 1, 409 6144 0 0 1, 370 8192 0 0 1, 370 8192 0 0 1, 466 7168 0 0 1, 287 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Groove";
+ offset: 0 15;
}
}
+ transform: translate(0, 282) translate(2, 2);
}
transform {
- transform: translate(0, 423) translate(2, 2);
child: container {
container {
border {
- outline: -2 -2 114 135;
- widths: 1 1 1 1;
colors: rgb(255,255,255) rgb(213,208,204) rgb(213,208,204) rgb(255,255,255);
+ outline: -2 -2 114 135;
}
border {
- outline: -1 -1 112 133;
- widths: 1 1 1 1;
colors: rgb(213,208,204) rgb(255,255,255) rgb(255,255,255) rgb(213,208,204);
+ outline: -1 -1 112 133;
}
border {
+ colors: rgba(0,0,0,0);
outline: -2 -2 114 135;
- widths: 2 2 2 2;
- colors: rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0) rgba(0,0,0,0);
+ widths: 2;
}
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 15;
color: rgb(146,149,149);
- glyphs: 165 10240 0 0 1, 324 4096 0 0 1, 280 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Ridge";
+ offset: 0 15;
}
}
+ transform: translate(0, 423) translate(2, 2);
}
}
+ transform: translate(1097, 0);
}
transform {
- transform: translate(1221, 0);
child: color {
bounds: 0 0 1 558;
color: rgba(0,0,0,0.1);
}
+ transform: translate(1221, 0);
}
transform {
- transform: translate(1232, 0);
child: container {
transform {
- transform: translate(1, 1);
child: container {
border {
+ colors: rgb(213,208,204);
outline: -1 -1 212 289;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color {
bounds: 204 281 6 6;
@@ -2314,7 +2188,6 @@ transform {
}
container {
clip {
- clip: 0 25 210 262;
child: container {
color {
bounds: 0 117 210 195;
@@ -2327,11 +2200,11 @@ transform {
container {
container {
rounded-clip {
- clip: 13 28 16 16 / 3;
child: color {
bounds: 13 28 16 16;
color: rgb(252,252,252);
}
+ clip: 13 28 16 16 / 3;
}
color {
bounds: 14 29 14 14;
@@ -2339,17 +2212,16 @@ transform {
}
}
border {
+ colors: rgb(213,208,204);
outline: 13 28 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 14 29 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAeElEQVQokb3QXwpAQBDH8e9uzscRXEXyJFE8KFoXcxheVm1j0Cp+tQ87M5/2D/yc8g2qgC0GGKDzSIUpYBXUB+gEC19cAmyAQaAmRJloOiABJlGv5WnWD4dDq9i32tuOa41i+FiT719Gw/MT0rDj/Mu3sUAei77LDp72K7jAZx9tAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
color {
@@ -2357,34 +2229,32 @@ transform {
color: rgb(252,252,252);
}
color-matrix {
- matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
- offset: 0.196078 0.196078 0.196078 0;
child: texture {
bounds: 54 28 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA8klEQVQ4jbXSwSrEURTH8Y/YsZiUhfIGnkFJUrKSlIeQJ5AaUlPWdrKUJ9DMwhMQyZKVhSxEg7Lwz1i4f925c/9jSk7dbuee8/3dczqHf7BxbOEcL3jFFeqY/A1exBM6FecZq1XwPD76wOUpMJvCY3gYAO7gCCOpwMaA8CGGc+W3Msmnib+PoYjpErpNkhvhfTf4ewlcw0kscBPBx0l1S4k/hWvf4/2xZiRQYC3XJ6ZxF/Iu48B60kJOZEb3jmzHwVHc9xFZxnsUa2MiLW9O7yIVOAh3+faJlYoWLeBR70jjnyvh0mrYxFkA3nCBnVzZf7Yvt2xyJ4TFGjYAAAAASUVORK5CYII=");
}
+ matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
+ offset: 0.196078 0.196078 0.196078 0;
}
color {
bounds: 82 25 71 23;
color: rgb(252,252,252);
}
text {
- font: "Cantarell 11";
- x: 86;
- y: 42;
color: rgb(50,50,50);
- glyphs: 1 10240 0 0 1, 360 8192 0 0 1, 280 8192 0 0 1, 409 6144 0 0 1, 287 8192 0 0 1, 244 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Andrea";
+ offset: 86 42;
}
color {
bounds: 153 25 60 23;
color: rgb(252,252,252);
}
text {
- font: "Cantarell 11";
- x: 157;
- y: 42;
color: rgb(50,50,50);
- glyphs: 30 10240 0 0 1, 324 4096 0 0 1, 358 13312 0 0 1, 324 4096 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Cimi";
+ offset: 157 42;
}
color {
bounds: 0 48 42 23;
@@ -2393,11 +2263,11 @@ transform {
container {
container {
rounded-clip {
- clip: 13 51 16 16 / 3;
child: color {
bounds: 13 51 16 16;
color: rgb(252,252,252);
}
+ clip: 13 51 16 16 / 3;
}
color {
bounds: 14 52 14 14;
@@ -2405,9 +2275,8 @@ transform {
}
}
border {
+ colors: rgb(213,208,204);
outline: 13 51 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
}
color {
@@ -2415,34 +2284,32 @@ transform {
color: rgb(252,252,252);
}
color-matrix {
- matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
- offset: 0.196078 0.196078 0.196078 0;
child: texture {
bounds: 54 51 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAAz0lEQVQ4jbXSTU4CQRAF4A/iFlbKOVywMoRDGLyAe70D4o3kBqz9uQAXICxwcM2wmAY6Y3djjL6kku7qqtevfvgHDPCMd3wFe8MsvBVxhwp1xipMSsm7VsIYw5ZvlyIZZH4+oO3/xBV0Q8Ajeufqi9DHQ+z4SPxSUlBrGnvE9hcEVVxCHPxT1HARLktcJ4JG6GQIljHBPEOwKCh4iS+5Md4EFW3/BpecerDCve+96CZKqEPsOiVrolmS3CpvcFsoC82GPeFVM95tOE8Psv8Ue0ISW4s5Tmr/AAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
+ offset: 0.196078 0.196078 0.196078 0;
}
color {
bounds: 82 48 71 23;
color: rgb(252,252,252);
}
text {
- font: "Cantarell 11";
- x: 86;
- y: 65;
color: rgb(50,50,50);
- glyphs: 126 11264 0 0 1, 430 5120 0 0 1, 430 5120 0 0 1, 370 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Otto";
+ offset: 86 65;
}
color {
bounds: 153 48 60 23;
color: rgb(252,252,252);
}
text {
- font: "Cantarell 11";
- x: 157;
- y: 65;
color: rgb(50,50,50);
- glyphs: 273 7168 0 0 1, 319 8192 0 0 1, 244 8192 0 0 1, 370 8192 0 0 1, 430 5120 0 0 1, 324 4096 0 0 1, 273 7168 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "chaotic";
+ offset: 157 65;
}
color {
bounds: 0 71 42 23;
@@ -2451,11 +2318,11 @@ transform {
container {
container {
rounded-clip {
- clip: 13 74 16 16 / 3;
child: color {
bounds: 13 74 16 16;
color: rgb(252,252,252);
}
+ clip: 13 74 16 16 / 3;
}
color {
bounds: 14 75 14 14;
@@ -2463,17 +2330,16 @@ transform {
}
}
border {
+ colors: rgb(213,208,204);
outline: 13 74 16 16 / 3;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 14 75 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAAeElEQVQokb3QXwpAQBDH8e9uzscRXEXyJFE8KFoXcxheVm1j0Cp+tQ87M5/2D/yc8g2qgC0GGKDzSIUpYBXUB+gEC19cAmyAQaAmRJloOiABJlGv5WnWD4dDq9i32tuOa41i+FiT719Gw/MT0rDj/Mu3sUAei77LDp72K7jAZx9tAAAAAElFTkSuQmCC");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
color {
@@ -2481,23 +2347,22 @@ transform {
color: rgb(252,252,252);
}
color-matrix {
- matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
- offset: 0.196078 0.196078 0.196078 0;
child: texture {
bounds: 54 74 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAAA/klEQVQ4jaXTzypFURTH8Q9CN2FyXYmRjqmpiZkykoF0n+J6Bxl4CQ/gASTlAZjwApIRMhDiSkd0Dc6W3bHPPcmv1mCv/Vvf/W9t/qmBRG4aHYzhNORecIML5LF5qFTcxjFWcYQnDKKBFjI8hyBMxsX7mAzju8TuhrGMuTJgBnsl4FsCQHHsJYzGgC1MJIxVGsFCDFhLmMrAsmZjQJYwzNcAxmPAZ8KwXgPoxYCrhCHDYh9ANwYcVJg6aFbMXfNz0y1cCucq6QG7uI1yOQ6Rf3fiq6JNN/1+vgZW8BFWfccJHlPb2lC0b68i7hVN1FdN7OBc8Ym6OMM2puqK/6wvIccweWvwsr0AAAAASUVORK5CYII=");
}
+ matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
+ offset: 0.196078 0.196078 0.196078 0;
}
color {
bounds: 82 71 71 23;
color: rgb(252,252,252);
}
text {
- font: "Cantarell 11";
- x: 86;
- y: 88;
color: rgb(50,50,50);
- glyphs: 126 11264 0 0 1, 409 6144 0 0 1, 466 7168 0 0 1, 324 4096 0 0 1, 349 4096 0 0 1, 349 4096 0 0 1, 287 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Orville";
+ offset: 86 88;
}
color {
bounds: 153 71 60 23;
@@ -2505,18 +2370,16 @@ transform {
}
container {
text {
- font: "Cantarell 11";
- x: 157;
- y: 88;
color: rgb(50,50,50);
- glyphs: 165 9216 0 0 1, 287 8192 0 0 1, 280 8192 0 0 1, 287 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Reden";
+ offset: 157 88;
}
text {
- font: "Cantarell 11";
- x: 198;
- y: 88;
color: rgb(50,50,50);
- glyphs: 809 10240 0 0 1;
+ font: "Cantarell 11";
+ glyphs: 809 10;
+ offset: 198 88;
}
}
color {
@@ -2526,32 +2389,31 @@ transform {
container {
container {
rounded-clip {
- clip: 13 97 16 16 / 8;
child: color {
bounds: 13 97 16 16;
color: rgb(252,252,252);
}
+ clip: 13 97 16 16 / 8;
}
rounded-clip {
- clip: 13 97 16 16 / 8;
child: color {
bounds: 14 98 14 14;
color: rgb(246,245,244);
}
+ clip: 13 97 16 16 / 8;
}
}
border {
+ colors: rgb(213,208,204);
outline: 13 97 16 16 / 8;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
color-matrix {
- matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
- offset: 0.572549 0.584314 0.584314 0;
child: texture {
bounds: 14 98 14 14;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAA4AAAAOCAYAAAAfSC3RAAAABmJLR0QA/wD/AP+gvaeTAAAASklEQVQokWNgGJmAjYGBoZWBgeERFLcwMDCwEqOxlYGB4T8abiZG42MsGh+iK2LCovE/MWLYNC4iUgwDsDJA/PQQihsZiAyc4QYASeYTs7b/ALUAAAAASUVORK5CYII=");
}
+ matrix: matrix3d(-0.372549, 0.235294, -0.105882, 0, 0.388235, -0.109804, -0.584314, 0, 0.227451, -0.584314, -0.584314, 0, 0, 0, 0, 1);
+ offset: 0.572549 0.584314 0.584314 0;
}
}
color {
@@ -2559,23 +2421,22 @@ transform {
color: rgb(252,252,252);
}
color-matrix {
- matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
- offset: 0.196078 0.196078 0.196078 0;
child: texture {
bounds: 54 97 16 16;
texture: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAABmJLR0QA/wD/AP+gvaeTAAABT0lEQVQ4jZXTv0vXcRDH8cdXzQQTEZFCUVAU1xZ/LCIYrrVkoTi6NLTpX+DoGrTnkoMgqOjk8hXBhqbAMALTSB1EpDQp/DF874Nvv4hfPTg4uHu+7n13n0+52+01/mAYu/hdov6atWIBS+i4D1iHSXzBRfgnvMWDUnAnfiZgsa+h+iawEhX4fAuc+TuUBwNe4BgHSdEpevG/KL7ACX4E8xw20Y+xRGAzxL8XxVn+FbqwAUeowkBS8Bft+FcUZ/mnMcZuDrPIxUzdmMMytvAL52hAE/owGq86REUOtZjAXixxCD1oxuMQ2MdOXOFj7KQRU9ki67F4hwtkPoMaia1EYv0O8CrOYnRlCl9Xfwh9xXgInSYNjpHHG3wLbjB9wXzSIY8RtMVodWhR+LHySd2HVOARpmNhpUY4w3s8pHC+1JrxEs+i65MQ3cO2qytsZcAlA5qEWoLbkBcAAAAASUVORK5CYII=");
}
+ matrix: matrix3d(0.00392157, 0.623529, 0.282353, 0, 0.764706, 0.278431, -0.196078, 0, 0.603922, -0.196078, -0.196078, 0, 0, 0, 0, 1);
+ offset: 0.196078 0.196078 0.196078 0;
}
color {
bounds: 82 94 71 23;
color: rgb(252,252,252);
}
text {
- font: "Cantarell 11";
- x: 86;
- y: 111;
color: rgb(50,50,50);
- glyphs: 29 10240 0 0 1, 287 8192 0 0 1, 360 8192 0 0 1, 341 4096 0 0 1, 244 8192 0 0 1, 358 13312 0 0 1, 324 4096 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Benjamin";
+ offset: 86 111;
}
color {
bounds: 153 94 60 23;
@@ -2583,122 +2444,116 @@ transform {
}
container {
text {
- font: "Cantarell 11";
- x: 157;
- y: 111;
color: rgb(50,50,50);
- glyphs: 30 10240 0 0 1, 370 8192 0 0 1, 358 13312 0 0 1, 406 8192 0 0 1;
+ font: "Cantarell 11";
+ glyphs: "Comp";
+ offset: 157 111;
}
text {
- font: "Cantarell 11";
- x: 196;
- y: 111;
color: rgb(50,50,50);
- glyphs: 809 10240 0 0 1;
+ font: "Cantarell 11";
+ glyphs: 809 10;
+ offset: 196 111;
}
}
}
+ clip: 0 25 210 262;
}
clip {
- clip: 0 0 210 25;
child: container {
transform {
- transform: translate(6, 0);
child: container {
color {
bounds: -6 0 42 25;
color: rgb(252,252,252);
}
border {
+ colors: rgb(246,245,244);
outline: -6 0 42 25;
widths: 0 1 1 0;
- colors: rgb(246,245,244) rgb(246,245,244) rgb(246,245,244) rgb(246,245,244);
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 17;
color: rgb(146,149,149);
- glyphs: 30 9216 0 0 1, 370 8192 0 0 1, 370 8192 0 0 1, 349 4096 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Cool";
+ offset: 0 17;
}
}
+ transform: translate(6, 0);
}
transform {
- transform: translate(42, 0) translate(6, 0);
child: container {
color {
bounds: -6 0 40 25;
color: rgb(252,252,252);
}
border {
+ colors: rgb(246,245,244);
outline: -6 0 40 25;
widths: 0 1 1 0;
- colors: rgb(246,245,244) rgb(246,245,244) rgb(246,245,244) rgb(246,245,244);
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 17;
color: rgb(146,149,149);
- glyphs: 81 4096 0 0 1, 273 7168 0 0 1, 370 8192 0 0 1, 360 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Icon";
+ offset: 0 17;
}
}
+ transform: translate(42, 0) translate(6, 0);
}
transform {
- transform: translate(82, 0) translate(6, 0);
child: container {
color {
bounds: -6 0 71 25;
color: rgb(252,252,252);
}
border {
+ colors: rgb(246,245,244);
outline: -6 0 71 25;
widths: 0 1 1 0;
- colors: rgb(246,245,244) rgb(246,245,244) rgb(246,245,244) rgb(246,245,244);
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 17;
color: rgb(146,149,149);
- glyphs: 115 11264 0 0 1, 244 8192 0 0 1, 358 13312 0 0 1, 287 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Name";
+ offset: 0 17;
}
}
+ transform: translate(82, 0) translate(6, 0);
}
transform {
- transform: translate(153, 0) translate(6, 0);
child: container {
color {
bounds: -6 0 60 25;
color: rgb(252,252,252);
}
border {
+ colors: rgb(246,245,244);
outline: -6 0 60 25;
- widths: 0 0 1 0;
- colors: rgb(246,245,244) rgb(246,245,244) rgb(246,245,244) rgb(246,245,244);
+ widths: 0 0 1;
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 17;
color: rgb(146,149,149);
- glyphs: 115 11264 0 0 1, 324 4096 0 0 1, 273 7168 0 0 1, 345 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "Nick";
+ offset: 0 17;
}
}
+ transform: translate(153, 0) translate(6, 0);
}
}
+ clip: 0 0 210 25;
}
}
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(0, 295) translate(1, 1);
child: container {
border {
+ colors: rgb(213,208,204);
outline: -1 -1 212 263;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
color {
@@ -2706,115 +2561,108 @@ transform {
color: rgb(252,252,252);
}
clip {
- clip: 0 0 210 261;
child: container {
color {
bounds: 0 0 210 893;
color: rgb(252,252,252);
}
}
+ clip: 0 0 210 261;
}
}
}
+ transform: translate(0, 295) translate(1, 1);
}
}
+ transform: translate(1232, 0);
}
}
transform {
- transform: translate(0, 568);
child: color {
bounds: 0 0 1444 1;
color: rgba(0,0,0,0.1);
}
+ transform: translate(0, 568);
}
transform {
- transform: translate(0, 579);
child: container {
transform {
- transform: translate(1, 1);
child: container {
border {
+ colors: rgb(213,208,204);
outline: -1 -1 354 142;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
transform {
- transform: translate(1, 1);
child: container {
color {
bounds: -1 -1 352 37;
color: rgb(234,232,230);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 352 37;
- widths: 0 0 1 0;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
+ widths: 0 0 1;
}
transform {
- transform: translate(3, -1);
child: container {
transform {
- transform: translate(149, 0) translate(16, 3);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 680 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 3";
+ offset: 0 20;
}
+ transform: translate(149, 0) translate(16, 3);
}
transform {
- transform: translate(74, 0) translate(16, 3);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 679 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 2";
+ offset: 0 20;
}
+ transform: translate(74, 0) translate(16, 3);
}
transform {
- transform: translate(16, 3);
child: container {
inset-shadow {
- outline: -12 -3 66 37;
color: rgb(53,132,228);
dx: 0;
dy: -3;
- spread: 0;
- blur: 0;
+ outline: -12 -3 66 37;
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 678 7168 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 1";
+ offset: 0 20;
}
}
+ transform: translate(16, 3);
}
}
+ transform: translate(3, -1);
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(0, 37);
child: color {
bounds: 0 0 352 103;
color: rgb(252,252,252);
}
+ transform: translate(0, 37);
}
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(364, 0) translate(1, 1);
child: container {
border {
+ colors: rgb(213,208,204);
outline: -1 -1 354 142;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
color {
@@ -2822,74 +2670,68 @@ transform {
color: rgb(252,252,252);
}
transform {
- transform: translate(285, 0) translate(2, 1);
child: container {
color {
bounds: -2 -1 67 140;
color: rgb(234,232,230);
}
border {
+ colors: rgb(213,208,204);
outline: -2 -1 67 140;
widths: 0 0 0 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(-2, 3);
child: container {
transform {
- transform: translate(0, 88) translate(12, 7);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 680 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 3";
+ offset: 0 20;
}
+ transform: translate(0, 88) translate(12, 7);
}
transform {
- transform: translate(0, 44) translate(12, 7);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 679 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 2";
+ offset: 0 20;
}
+ transform: translate(0, 44) translate(12, 7);
}
transform {
- transform: translate(12, 7);
child: container {
inset-shadow {
- outline: -12 -3 67 36;
color: rgb(53,132,228);
dx: 3;
dy: 0;
- spread: 0;
- blur: 0;
+ outline: -12 -3 67 36;
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 678 7168 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 1";
+ offset: 0 20;
}
}
+ transform: translate(12, 7);
}
}
+ transform: translate(-2, 3);
}
}
+ transform: translate(285, 0) translate(2, 1);
}
}
}
+ transform: translate(364, 0) translate(1, 1);
}
transform {
- transform: translate(728, 0) translate(1, 1);
child: container {
border {
+ colors: rgb(213,208,204);
outline: -1 -1 353 142;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
color {
@@ -2897,148 +2739,141 @@ transform {
color: rgb(252,252,252);
}
transform {
- transform: translate(0, 103) translate(1, 2);
child: container {
color {
bounds: -1 -2 351 37;
color: rgb(234,232,230);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -2 351 37;
- widths: 1 0 0 0;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
+ widths: 1 0 0;
}
transform {
- transform: translate(3, -2);
child: container {
transform {
- transform: translate(149, 0) translate(16, 4);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 680 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 3";
+ offset: 0 20;
}
+ transform: translate(149, 0) translate(16, 4);
}
transform {
- transform: translate(74, 0) translate(16, 4);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 679 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 2";
+ offset: 0 20;
}
+ transform: translate(74, 0) translate(16, 4);
}
transform {
- transform: translate(16, 4);
child: container {
inset-shadow {
- outline: -12 -4 66 37;
color: rgb(53,132,228);
dx: 0;
dy: 3;
- spread: 0;
- blur: 0;
+ outline: -12 -4 66 37;
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 678 7168 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 1";
+ offset: 0 20;
}
}
+ transform: translate(16, 4);
}
}
+ transform: translate(3, -2);
}
}
+ transform: translate(0, 103) translate(1, 2);
}
}
}
+ transform: translate(728, 0) translate(1, 1);
}
transform {
- transform: translate(1091, 0) translate(1, 1);
child: container {
border {
+ colors: rgb(213,208,204);
outline: -1 -1 353 142;
- widths: 1 1 1 1;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
container {
transform {
- transform: translate(1, 1);
child: container {
color {
bounds: -1 -1 67 140;
color: rgb(234,232,230);
}
border {
+ colors: rgb(213,208,204);
outline: -1 -1 67 140;
widths: 0 1 0 0;
- colors: rgb(213,208,204) rgb(213,208,204) rgb(213,208,204) rgb(213,208,204);
}
transform {
- transform: translate(-1, 3);
child: container {
transform {
- transform: translate(0, 88) translate(12, 7);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 680 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 3";
+ offset: 0 20;
}
+ transform: translate(0, 88) translate(12, 7);
}
transform {
- transform: translate(0, 44) translate(12, 7);
child: text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 679 8192 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 2";
+ offset: 0 20;
}
+ transform: translate(0, 44) translate(12, 7);
}
transform {
- transform: translate(12, 7);
child: container {
inset-shadow {
- outline: -12 -3 67 36;
color: rgb(53,132,228);
dx: -3;
dy: 0;
- spread: 0;
- blur: 0;
+ outline: -12 -3 67 36;
}
text {
- font: "Cantarell Bold 11";
- x: 0;
- y: 20;
color: rgb(146,149,149);
- glyphs: 406 8192 0 0 1, 244 8192 0 0 1, 312 8192 0 0 1, 287 8192 0 0 1, 862 3072 0 0 1, 678 7168 0 0 1;
+ font: "Cantarell Bold 11";
+ glyphs: "page 1";
+ offset: 0 20;
}
}
+ transform: translate(12, 7);
}
}
+ transform: translate(-1, 3);
}
}
+ transform: translate(1, 1);
}
transform {
- transform: translate(67, 0);
child: color {
bounds: 0 0 284 140;
color: rgb(252,252,252);
}
+ transform: translate(67, 0);
}
}
}
+ transform: translate(1091, 0) translate(1, 1);
}
}
+ transform: translate(0, 579);
}
}
+ transform: translate(26, 70) translate(10, 10);
}
}
+ transform: translate(0, 0);
}
diff --git a/testsuite/gsk/serialize-deserialize.c b/testsuite/gsk/serialize-deserialize.c
deleted file mode 100644
index 452093c6ec..0000000000
--- a/testsuite/gsk/serialize-deserialize.c
+++ /dev/null
@@ -1,58 +0,0 @@
-#include <gtk/gtk.h>
-
-static void
-deserialize_error_func (const GtkCssSection *section,
- const GError *error,
- gpointer user_data)
-{
- char *section_str = gtk_css_section_to_string (section);
-
- g_error ("Error at %s: %s", section_str, error->message);
-
- free (section_str);
-}
-
-int
-main (int argc, char **argv)
-{
- GError *error = NULL;
- GskRenderNode *node;
- GskRenderNode *deserialized;
- GBytes *bytes;
- GFile *file;
-
- g_assert (argc == 2);
-
- gtk_init ();
-
- file = g_file_new_for_commandline_arg (argv[1]);
- bytes = g_file_load_bytes (file, NULL, NULL, &error);
- g_assert_no_error (error);
- g_assert (bytes != NULL);
-
- node = gsk_render_node_deserialize (bytes, deserialize_error_func, NULL);
- g_assert_no_error (error);
-
- /* Now serialize */
- g_bytes_unref (bytes);
- bytes = gsk_render_node_serialize (node);
- /* and deserialize again... */
- deserialized = gsk_render_node_deserialize (bytes, deserialize_error_func, NULL);
- if (error)
- g_message ("OUTPUT:\n%.*s", (int)g_bytes_get_size (bytes), (char *)g_bytes_get_data (bytes, NULL));
-
- g_assert_no_error (error);
-
- /* And check if that all worked. */
- g_assert_cmpint (gsk_render_node_get_node_type (deserialized), ==,
- gsk_render_node_get_node_type (node));
-
-
- g_clear_error (&error);
- g_clear_pointer (&node, gsk_render_node_unref);
- g_clear_pointer (&deserialized, gsk_render_node_unref);
- g_bytes_unref (bytes);
- g_object_unref (file);
-
- return 0;
-}