diff options
author | Benjamin Otte <otte@redhat.com> | 2022-05-18 21:16:33 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2022-05-18 21:16:33 +0200 |
commit | 0410125f203491693ea45b78cbbd3940703904a2 (patch) | |
tree | 91d62a3a50e0ae635d0da810014461c991f9c663 | |
parent | e8eb96ae0cd9ba3673e6aaec6b9775c311aba076 (diff) | |
download | gtk+-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.c | 26 | ||||
-rw-r--r-- | testsuite/gsk/compare/color-matrix-parsing.node | 10 | ||||
-rw-r--r-- | testsuite/gsk/compare/color-matrix-parsing.png | bin | 0 -> 144 bytes | |||
-rw-r--r-- | testsuite/gsk/meson.build | 1 |
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 Binary files differnew file mode 100644 index 0000000000..9a5764a9b2 --- /dev/null +++ b/testsuite/gsk/compare/color-matrix-parsing.png 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', |