diff options
author | Timm Bäder <mail@baedert.org> | 2019-08-17 19:53:32 +0200 |
---|---|---|
committer | Timm Bäder <mail@baedert.org> | 2019-09-09 17:36:23 +0200 |
commit | ad1340cab44a1c70b6045b115e7852f9e625867d (patch) | |
tree | 76c46ed44ea0b8b254aff6e43730c3cbaedcf489 | |
parent | 3a3a59c1882296aec8f37e21c78f71e82a127e30 (diff) | |
download | gtk+-ad1340cab44a1c70b6045b115e7852f9e625867d.tar.gz |
cssrgbavalue: Add a singleton for transparent colors
The most common background color is no background color.
-rw-r--r-- | gtk/gtkcsscolorvalue.c | 6 | ||||
-rw-r--r-- | gtk/gtkcssrgbavalue.c | 22 | ||||
-rw-r--r-- | gtk/gtkcssrgbavalueprivate.h | 3 | ||||
-rw-r--r-- | gtk/gtkcssshadowvalue.c | 4 | ||||
-rw-r--r-- | gtk/gtkcssstylepropertyimpl.c | 2 |
5 files changed, 28 insertions, 9 deletions
diff --git a/gtk/gtkcsscolorvalue.c b/gtk/gtkcsscolorvalue.c index 617f92bdc1..091cb07c85 100644 --- a/gtk/gtkcsscolorvalue.c +++ b/gtk/gtkcsscolorvalue.c @@ -97,8 +97,6 @@ gtk_css_value_color_get_fallback (guint property_id, GtkCssStyle *style, GtkCssStyle *parent_style) { - static const GdkRGBA transparent = { 0, 0, 0, 0 }; - switch (property_id) { case GTK_CSS_PROPERTY_BACKGROUND_IMAGE: @@ -106,7 +104,7 @@ gtk_css_value_color_get_fallback (guint property_id, case GTK_CSS_PROPERTY_TEXT_SHADOW: case GTK_CSS_PROPERTY_ICON_SHADOW: case GTK_CSS_PROPERTY_BOX_SHADOW: - return _gtk_css_rgba_value_new_from_rgba (&transparent); + return _gtk_css_rgba_value_new_transparent (); case GTK_CSS_PROPERTY_COLOR: case GTK_CSS_PROPERTY_BACKGROUND_COLOR: case GTK_CSS_PROPERTY_BORDER_TOP_COLOR: @@ -127,7 +125,7 @@ gtk_css_value_color_get_fallback (guint property_id, if (property_id < GTK_CSS_PROPERTY_N_PROPERTIES) g_warning ("No fallback color defined for property '%s'", _gtk_style_property_get_name (GTK_STYLE_PROPERTY (_gtk_css_style_property_lookup_by_id (property_id)))); - return _gtk_css_rgba_value_new_from_rgba (&transparent); + return _gtk_css_rgba_value_new_transparent (); } } diff --git a/gtk/gtkcssrgbavalue.c b/gtk/gtkcssrgbavalue.c index a7134ef465..f840160bde 100644 --- a/gtk/gtkcssrgbavalue.c +++ b/gtk/gtkcssrgbavalue.c @@ -107,6 +107,9 @@ static const GtkCssValueClass GTK_CSS_VALUE_RGBA = { gtk_css_value_rgba_print }; +static GtkCssValue transparent_black_singleton = (GtkCssValue) { >K_CSS_VALUE_RGBA, 1, { 0, 0, 0, 0 }}; +static GtkCssValue transparent_white_singleton = (GtkCssValue) { >K_CSS_VALUE_RGBA, 1, { 1, 1, 1, 0 }}; + GtkCssValue * _gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba) { @@ -114,12 +117,31 @@ _gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba) g_return_val_if_fail (rgba != NULL, NULL); + if (gdk_rgba_is_clear (rgba)) + { + if (rgba->red == 1 && + rgba->green == 1 && + rgba->blue == 1) + return _gtk_css_value_ref (&transparent_white_singleton); + + if (rgba->red == 0 && + rgba->green == 0 && + rgba->blue == 0) + return _gtk_css_value_ref (&transparent_black_singleton); + } + value = _gtk_css_value_new (GtkCssValue, >K_CSS_VALUE_RGBA); value->rgba = *rgba; return value; } +GtkCssValue * +_gtk_css_rgba_value_new_transparent (void) +{ + return _gtk_css_value_ref (&transparent_black_singleton); +} + const GdkRGBA * _gtk_css_rgba_value_get_rgba (const GtkCssValue *rgba) { diff --git a/gtk/gtkcssrgbavalueprivate.h b/gtk/gtkcssrgbavalueprivate.h index 60a0cffd6f..56760c275e 100644 --- a/gtk/gtkcssrgbavalueprivate.h +++ b/gtk/gtkcssrgbavalueprivate.h @@ -26,7 +26,8 @@ G_BEGIN_DECLS -GtkCssValue * _gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba); +GtkCssValue * _gtk_css_rgba_value_new_from_rgba (const GdkRGBA *rgba); +GtkCssValue * _gtk_css_rgba_value_new_transparent (void); const GdkRGBA * _gtk_css_rgba_value_get_rgba (const GtkCssValue *rgba) G_GNUC_PURE; diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c index f0b2fc243d..d2febe7522 100644 --- a/gtk/gtkcssshadowvalue.c +++ b/gtk/gtkcssshadowvalue.c @@ -189,8 +189,6 @@ gtk_css_shadow_value_new (GtkCssValue *hoffset, GtkCssValue * _gtk_css_shadow_value_new_for_transition (GtkCssValue *target) { - GdkRGBA transparent = { 0, 0, 0, 0 }; - g_return_val_if_fail (target->class == >K_CSS_VALUE_SHADOW, NULL); return gtk_css_shadow_value_new (_gtk_css_number_value_new (0, GTK_CSS_PX), @@ -198,7 +196,7 @@ _gtk_css_shadow_value_new_for_transition (GtkCssValue *target) _gtk_css_number_value_new (0, GTK_CSS_PX), _gtk_css_number_value_new (0, GTK_CSS_PX), target->inset, - _gtk_css_rgba_value_new_from_rgba (&transparent)); + _gtk_css_rgba_value_new_transparent ()); } enum { diff --git a/gtk/gtkcssstylepropertyimpl.c b/gtk/gtkcssstylepropertyimpl.c index a1987b751a..af2869121b 100644 --- a/gtk/gtkcssstylepropertyimpl.c +++ b/gtk/gtkcssstylepropertyimpl.c @@ -991,7 +991,7 @@ _gtk_css_style_property_init_properties (void) GTK_CSS_AFFECTS_BACKGROUND, color_parse, color_query, - _gtk_css_color_value_new_rgba (0, 0, 0, 0)); + _gtk_css_rgba_value_new_transparent ()); gtk_css_style_property_register ("font-family", GTK_CSS_PROPERTY_FONT_FAMILY, |