diff options
author | Benjamin Otte <otte@redhat.com> | 2019-05-29 05:55:28 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2019-05-29 07:14:31 +0200 |
commit | 9ee2b231762a7173f60f5d571d5b63bde186c948 (patch) | |
tree | 641253606bb43a7d306d0b4d67548b2f0af523e2 /gsk/gskrendernodeparser.c | |
parent | d71c196c5c128f4de514575c6e8b7aa9f6705909 (diff) | |
download | gtk+-9ee2b231762a7173f60f5d571d5b63bde186c948.tar.gz |
rendernodeparser: Handle repeating linear gradients
Just handle them like regular gradients, only name them differently.
Diffstat (limited to 'gsk/gskrendernodeparser.c')
-rw-r--r-- | gsk/gskrendernodeparser.c | 56 |
1 files changed, 38 insertions, 18 deletions
diff --git a/gsk/gskrendernodeparser.c b/gsk/gskrendernodeparser.c index 428394bbb1..78554a3921 100644 --- a/gsk/gskrendernodeparser.c +++ b/gsk/gskrendernodeparser.c @@ -818,7 +818,8 @@ parse_color_node (GtkCssParser *parser) } static GskRenderNode * -parse_linear_gradient_node (GtkCssParser *parser) +parse_linear_gradient_node_internal (GtkCssParser *parser, + gboolean repeating) { graphene_rect_t bounds = GRAPHENE_RECT_INIT (0, 0, 50, 50); graphene_point_t start = GRAPHENE_POINT_INIT (0, 0); @@ -843,7 +844,10 @@ parse_linear_gradient_node (GtkCssParser *parser) g_array_append_val (stops, to); } - result = gsk_linear_gradient_node_new (&bounds, &start, &end, (GskColorStop *) stops->data, stops->len); + if (repeating) + result = gsk_repeating_linear_gradient_node_new (&bounds, &start, &end, (GskColorStop *) stops->data, stops->len); + else + result = gsk_linear_gradient_node_new (&bounds, &start, &end, (GskColorStop *) stops->data, stops->len); g_array_free (stops, TRUE); @@ -851,6 +855,18 @@ parse_linear_gradient_node (GtkCssParser *parser) } static GskRenderNode * +parse_linear_gradient_node (GtkCssParser *parser) +{ + return parse_linear_gradient_node_internal (parser, FALSE); +} + +static GskRenderNode * +parse_repeating_linear_gradient_node (GtkCssParser *parser) +{ + return parse_linear_gradient_node_internal (parser, TRUE); +} + +static GskRenderNode * parse_inset_shadow_node (GtkCssParser *parser) { GskRoundedRect outline = GSK_ROUNDED_RECT_INIT (0, 0, 50, 50); @@ -1356,26 +1372,27 @@ parse_node (GtkCssParser *parser, const char *name; GskRenderNode * (* func) (GtkCssParser *); } node_parsers[] = { - { "container", parse_container_node }, - { "color", parse_color_node }, - { "linear-gradient", parse_linear_gradient_node }, + { "blend", parse_blend_node }, + { "blur", parse_blur_node }, { "border", parse_border_node }, - { "texture", parse_texture_node }, + { "cairo", parse_cairo_node }, + { "clip", parse_clip_node }, + { "color", parse_color_node }, + { "color-matrix", parse_color_matrix_node }, + { "container", parse_container_node }, + { "cross-fade", parse_cross_fade_node }, + { "debug", parse_debug_node }, { "inset-shadow", parse_inset_shadow_node }, - { "outset-shadow", parse_outset_shadow_node }, - { "transform", parse_transform_node }, + { "linear-gradient", parse_linear_gradient_node }, { "opacity", parse_opacity_node }, - { "color-matrix", parse_color_matrix_node }, - { "clip", parse_clip_node }, + { "outset-shadow", parse_outset_shadow_node }, + { "repeat", parse_repeat_node }, + { "repeating-linear-gradient", parse_repeating_linear_gradient_node }, { "rounded-clip", parse_rounded_clip_node }, { "shadow", parse_shadow_node }, - { "cross-fade", parse_cross_fade_node }, { "text", parse_text_node }, - { "blur", parse_blur_node }, - { "debug", parse_debug_node }, - { "blend", parse_blend_node }, - { "repeat", parse_repeat_node }, - { "cairo", parse_cairo_node }, + { "texture", parse_texture_node }, + { "transform", parse_transform_node }, }; GskRenderNode **node_p = out_node; guint i; @@ -1796,13 +1813,17 @@ render_node_print (Printer *p, } break; + case GSK_REPEATING_LINEAR_GRADIENT_NODE: case GSK_LINEAR_GRADIENT_NODE: { const guint n_stops = gsk_linear_gradient_node_get_n_color_stops (node); const GskColorStop *stops = gsk_linear_gradient_node_peek_color_stops (node); int i; - start_node (p, "linear-gradient"); + if (gsk_render_node_get_node_type (node) == GSK_REPEATING_LINEAR_GRADIENT_NODE) + start_node (p, "repeating-linear-gradient"); + else + start_node (p, "linear-gradient"); append_rect_param (p, "bounds", &node->bounds); append_point_param (p, "end", gsk_linear_gradient_node_peek_end (node)); @@ -2260,7 +2281,6 @@ render_node_print (Printer *p, } break; - case GSK_REPEATING_LINEAR_GRADIENT_NODE: default: g_error ("Unhandled node: %s", node->node_class->type_name); break; |