summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2022-05-18 21:16:33 +0200
committerBenjamin Otte <otte@redhat.com>2022-05-18 21:16:33 +0200
commit0410125f203491693ea45b78cbbd3940703904a2 (patch)
tree91d62a3a50e0ae635d0da810014461c991f9c663
parente8eb96ae0cd9ba3673e6aaec6b9775c311aba076 (diff)
downloadgtk+-0410125f203491693ea45b78cbbd3940703904a2.tar.gz
nodeparser: Fix parsing of color-matrix node
Negative offsets in the color matrix were inverted because it used the rect parser.
-rw-r--r--gsk/gskrendernodeparser.c26
-rw-r--r--testsuite/gsk/compare/color-matrix-parsing.node10
-rw-r--r--testsuite/gsk/compare/color-matrix-parsing.pngbin0 -> 144 bytes
-rw-r--r--testsuite/gsk/meson.build1
4 files changed, 31 insertions, 6 deletions
diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c
index b5f703bd79..7e5a74db0c 100644
--- a/gsk/gskrendernodeparser.c
+++ b/gsk/gskrendernodeparser.c
@@ -69,6 +69,23 @@ parse_rect (GtkCssParser *parser,
}
static gboolean
+parse_vec4 (GtkCssParser *parser,
+ gpointer out_vec4)
+{
+ double numbers[4];
+
+ if (!gtk_css_parser_consume_number (parser, &numbers[0]) ||
+ !gtk_css_parser_consume_number (parser, &numbers[1]) ||
+ !gtk_css_parser_consume_number (parser, &numbers[2]) ||
+ !gtk_css_parser_consume_number (parser, &numbers[3]))
+ return FALSE;
+
+ graphene_vec4_init (out_vec4, numbers[0], numbers[1], numbers[2], numbers[3]);
+
+ return TRUE;
+}
+
+static gboolean
parse_texture (GtkCssParser *parser,
gpointer out_data)
{
@@ -1490,23 +1507,20 @@ parse_color_matrix_node (GtkCssParser *parser)
GskRenderNode *child = NULL;
graphene_matrix_t matrix;
GskTransform *transform = NULL;
- graphene_rect_t offset_rect = GRAPHENE_RECT_INIT (0, 0, 0, 0);
graphene_vec4_t offset;
const Declaration declarations[] = {
{ "matrix", parse_transform, clear_transform, &transform },
- { "offset", parse_rect, NULL, &offset_rect },
+ { "offset", parse_vec4, NULL, &offset },
{ "child", parse_node, clear_node, &child }
};
GskRenderNode *result;
+ graphene_vec4_init (&offset, 0, 0, 0, 0);
+
parse_declarations (parser, declarations, G_N_ELEMENTS(declarations));
if (child == NULL)
child = create_default_render_node ();
- graphene_vec4_init (&offset,
- offset_rect.origin.x, offset_rect.origin.y,
- offset_rect.size.width, offset_rect.size.height);
-
gsk_transform_to_matrix (transform, &matrix);
result = gsk_color_matrix_node_new (child, &matrix, &offset);
diff --git a/testsuite/gsk/compare/color-matrix-parsing.node b/testsuite/gsk/compare/color-matrix-parsing.node
new file mode 100644
index 0000000000..57cdc774c9
--- /dev/null
+++ b/testsuite/gsk/compare/color-matrix-parsing.node
@@ -0,0 +1,10 @@
+color-matrix {
+ matrix: matrix3d(255, 0, 0, 0,
+ 0, 255, 0, 0,
+ 0, 0, 255, 0,
+ 0, 0, 0, 1);
+ offset: -127 -127 -127 0;
+ child: color {
+ color: #80007f;
+ }
+} \ No newline at end of file
diff --git a/testsuite/gsk/compare/color-matrix-parsing.png b/testsuite/gsk/compare/color-matrix-parsing.png
new file mode 100644
index 0000000000..9a5764a9b2
--- /dev/null
+++ b/testsuite/gsk/compare/color-matrix-parsing.png
Binary files differ
diff --git a/testsuite/gsk/meson.build b/testsuite/gsk/meson.build
index 2fb02087d3..317f6a6670 100644
--- a/testsuite/gsk/meson.build
+++ b/testsuite/gsk/meson.build
@@ -36,6 +36,7 @@ compare_render_tests = [
'clip-nested1',
'color-blur0',
'color-matrix-identity',
+ 'color-matrix-parsing',
'cross-fade-in-opacity',
'css-background',
'empty-blend',