From 5b8896f1db5a4ffa57634b66ab2f916a981135a8 Mon Sep 17 00:00:00 2001 From: Matthias Clasen Date: Sat, 6 Feb 2021 09:00:32 -0500 Subject: [PATCH] cssshadowvalue: Add gtk_css_shadow_value_pop_snapshot This is the counterpart ot gtk_css_shadow_value_push_snapshot. To make this easy, move the determination whether we need a shadow out of the push function and save it. --- gtk/gtkcssshadowvalue.c | 24 +++++++++++++++++++++++- gtk/gtkcssshadowvalueprivate.h | 6 ++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index a691d157e2..f4d60c9bcd 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -308,6 +308,7 @@ gtk_css_shadow_value_new (ShadowValue *shadows, memcpy (retval->shadows, shadows, sizeof (ShadowValue) * n_shadows); retval->is_computed = TRUE; + for (i = 0; i < n_shadows; i++) { const ShadowValue *shadow = &retval->shadows[i]; @@ -706,7 +707,6 @@ gtk_css_shadow_value_push_snapshot (const GtkCssValue *value, gboolean need_shadow = FALSE; guint i; - /* TODO: We can save this as a flag once and then reuse it */ for (i = 0; i < value->n_shadows; i++) { const ShadowValue *shadow = &value->shadows[i]; @@ -737,3 +737,25 @@ gtk_css_shadow_value_push_snapshot (const GtkCssValue *value, return need_shadow; } + +void +gtk_css_shadow_value_pop_snapshot (const GtkCssValue *value, + GtkSnapshot *snapshot) +{ + gboolean need_shadow = FALSE; + guint i; + + for (i = 0; i < value->n_shadows; i++) + { + const ShadowValue *shadow = &value->shadows[i]; + + if (!gdk_rgba_is_clear (gtk_css_color_value_get_rgba (shadow->color))) + { + need_shadow = TRUE; + break; + } + } + + if (need_shadow) + gtk_snapshot_pop (snapshot); +} diff --git a/gtk/gtkcssshadowvalueprivate.h b/gtk/gtkcssshadowvalueprivate.h index fa2050e080..21efac1908 100644 --- a/gtk/gtkcssshadowvalueprivate.h +++ b/gtk/gtkcssshadowvalueprivate.h @@ -34,12 +34,12 @@ G_BEGIN_DECLS -GtkCssValue * gtk_css_shadow_value_new_none (void); +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); +GtkCssValue * gtk_css_shadow_value_parse_filter (GtkCssParser *parser); void gtk_css_shadow_value_get_extents (const GtkCssValue *shadow, GtkBorder *border); @@ -55,6 +55,8 @@ gboolean gtk_css_shadow_value_is_none (const GtkCssValue gboolean gtk_css_shadow_value_push_snapshot (const GtkCssValue *value, GtkSnapshot *snapshot); +void gtk_css_shadow_value_pop_snapshot (const GtkCssValue *value, + GtkSnapshot *snapshot); G_END_DECLS