summaryrefslogtreecommitdiff
path: root/gtk/gtkcssrgbavalue.c
diff options
context:
space:
mode:
Diffstat (limited to 'gtk/gtkcssrgbavalue.c')
-rw-r--r--gtk/gtkcssrgbavalue.c22
1 files changed, 22 insertions, 0 deletions
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) { &GTK_CSS_VALUE_RGBA, 1, { 0, 0, 0, 0 }};
+static GtkCssValue transparent_white_singleton = (GtkCssValue) { &GTK_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, &GTK_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)
{