From de24b4f91b26627e01bb0c458cc5a229e85e2e51 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Fri, 5 Feb 2021 21:36:22 -0500 Subject: [PATCH] cssshadowvalue: Add a parsing function Add a variant of the parse function that parses just a single (non-box) shadow, as required for the drop-shadow filter. --- gtk/gtkcssshadowvalue.c | 31 +++++++++++++++++++++++++++++++ gtk/gtkcssshadowvalueprivate.h | 2 ++ 2 files changed, 33 insertions(+) diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index 126e9af8f2..b7b409ca72 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -326,6 +326,21 @@ gtk_css_shadow_value_new (ShadowValue *shadows, return retval; } +GtkCssValue * +gtk_css_shadow_value_new_filter (void) +{ + ShadowValue value; + + value.inset = FALSE; + value.hoffset = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + value.voffset = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + value.radius = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + value.spread = _gtk_css_number_value_new (0, GTK_CSS_NUMBER); + value.color = _gtk_css_color_value_new_current_color (); + + return gtk_css_shadow_value_new (&value, 1); +} + enum { HOFFSET, VOFFSET, @@ -497,6 +512,22 @@ fail: return NULL; } +GtkCssValue * +_gtk_css_shadow_value_parse_filter (GtkCssParser *parser) +{ + GtkCssValue *result; + + result = _gtk_css_shadow_value_parse (parser, FALSE); + + if (result && result->n_shadows != 1) + { + gtk_css_parser_error_syntax (parser, "A single shadow is required"); + g_clear_pointer (&result, gtk_css_value_unref); + } + + return result; +} + void gtk_css_shadow_value_get_extents (const GtkCssValue *value, GtkBorder *border) diff --git a/gtk/gtkcssshadowvalueprivate.h b/gtk/gtkcssshadowvalueprivate.h index 5784dfa516..3f49963b5b 100644 --- a/gtk/gtkcssshadowvalueprivate.h +++ b/gtk/gtkcssshadowvalueprivate.h @@ -35,9 +35,11 @@ G_BEGIN_DECLS GtkCssValue * gtk_css_shadow_value_new_none (void); +GtkCssValue * gtk_css_shadow_value_new_filter (void); GtkCssValue * _gtk_css_shadow_value_parse (GtkCssParser *parser, gboolean box_shadow_mode); +GtkCssValue * _gtk_css_shadow_value_parse_filter (GtkCssParser *parser); void gtk_css_shadow_value_get_extents (const GtkCssValue *shadow, GtkBorder *border);