]> Pileus Git - ~andy/gtk/blobdiff - gtk/gtkcsscolorvalue.c
Add GtkBubbleWindow
[~andy/gtk] / gtk / gtkcsscolorvalue.c
index 39e1a3c9bd54fc524f52636b2875c5c7bef8ebae..9ff0a052107e20c605cd48ce675e2967564a0698 100644 (file)
@@ -24,7 +24,6 @@
 #include "gtkhslaprivate.h"
 #include "gtkstylepropertyprivate.h"
 #include "gtkstyleproperties.h"
-#include "gtksymboliccolorprivate.h"
 #include "gtkwin32themeprivate.h"
 
 typedef enum {
@@ -136,39 +135,37 @@ gtk_css_value_color_get_fallback (guint                    property_id,
     }
 }
 
-static GtkCssValue *
-gtk_css_color_value_resolve_full (GtkCssValue             *color,
-                                  GtkStyleProviderPrivate *provider,
-                                  GtkCssValue             *current,
-                                  GtkCssDependencies       current_deps,
-                                  GtkCssDependencies      *dependencies)
+GtkCssValue *
+_gtk_css_color_value_resolve (GtkCssValue             *color,
+                              GtkStyleProviderPrivate *provider,
+                              GtkCssValue             *current,
+                              GtkCssDependencies       current_deps,
+                              GtkCssDependencies      *dependencies)
 {
   GtkCssDependencies unused;
   GtkCssValue *value;
 
-  g_return_val_if_fail (color != NULL, FALSE);
-  g_return_val_if_fail (provider == NULL || GTK_IS_STYLE_PROVIDER_PRIVATE (provider), FALSE);
-  g_return_val_if_fail (current != NULL, FALSE);
+  g_return_val_if_fail (color != NULL, NULL);
+  g_return_val_if_fail (provider == NULL || GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
+  g_return_val_if_fail (current != NULL, NULL);
 
   if (dependencies == NULL)
     dependencies = &unused;
   *dependencies = 0;
 
-  value = NULL;
   switch (color->type)
     {
     case COLOR_TYPE_LITERAL:
       return _gtk_css_value_ref (color->last_value);
     case COLOR_TYPE_NAME:
       {
-       GtkSymbolicColor *symbolic;
-
-        symbolic = _gtk_style_provider_private_get_color (provider, color->sym_col.name);
+       GtkCssValue *named;
 
-       if (!symbolic)
+        named = _gtk_style_provider_private_get_color (provider, color->sym_col.name);
+       if (named == NULL)
          return NULL;
 
-        value = _gtk_symbolic_color_resolve_full (symbolic, provider, current, current_deps, dependencies);
+        value = _gtk_css_color_value_resolve (named, provider, current, current_deps, dependencies);
       }
 
       break;
@@ -178,19 +175,14 @@ gtk_css_color_value_resolve_full (GtkCssValue             *color,
         GtkHSLA hsla;
        GdkRGBA shade;
 
-       val = gtk_css_color_value_resolve_full (color->sym_col.shade.color, provider, current, current_deps, dependencies);
+       val = _gtk_css_color_value_resolve (color->sym_col.shade.color, provider, current, current_deps, dependencies);
        if (val == NULL)
          return NULL;
 
         *dependencies = _gtk_css_dependencies_union (*dependencies, 0);
         
         _gtk_hsla_init_from_rgba (&hsla, _gtk_css_rgba_value_get_rgba (val));
-
-        hsla.lightness *= color->sym_col.shade.factor;
-        hsla.lightness = CLAMP (hsla.lightness, 0.0, 1.0);
-
-        hsla.saturation *= color->sym_col.shade.factor;
-        hsla.saturation = CLAMP (hsla.saturation, 0.0, 1.0);
+        _gtk_hsla_shade (&hsla, &hsla, color->sym_col.shade.factor);
 
         _gdk_rgba_init_from_hsla (&shade, &hsla);
 
@@ -205,7 +197,7 @@ gtk_css_color_value_resolve_full (GtkCssValue             *color,
        GtkCssValue *val;
        GdkRGBA alpha;
 
-       val = gtk_css_color_value_resolve_full (color->sym_col.alpha.color, provider, current, current_deps, dependencies);
+       val = _gtk_css_color_value_resolve (color->sym_col.alpha.color, provider, current, current_deps, dependencies);
        if (val == NULL)
          return NULL;
 
@@ -225,13 +217,13 @@ gtk_css_color_value_resolve_full (GtkCssValue             *color,
        GdkRGBA color1, color2, res;
         GtkCssDependencies dep1, dep2;
 
-       val = gtk_css_color_value_resolve_full (color->sym_col.mix.color1, provider, current, current_deps, &dep1);
+       val = _gtk_css_color_value_resolve (color->sym_col.mix.color1, provider, current, current_deps, &dep1);
        if (val == NULL)
          return NULL;
        color1 = *_gtk_css_rgba_value_get_rgba (val);
        _gtk_css_value_unref (val);
 
-       val = gtk_css_color_value_resolve_full (color->sym_col.mix.color2, provider, current, current_deps, &dep2);
+       val = _gtk_css_color_value_resolve (color->sym_col.mix.color2, provider, current, current_deps, &dep2);
        if (val == NULL)
          return NULL;
        color2 = *_gtk_css_rgba_value_get_rgba (val);
@@ -272,26 +264,23 @@ gtk_css_color_value_resolve_full (GtkCssValue             *color,
         }
       break;
     default:
+      value = NULL;
       g_assert_not_reached ();
     }
 
-  if (value != NULL)
+  if (color->last_value != NULL &&
+      _gtk_css_value_equal (color->last_value, value))
     {
-      if (color->last_value != NULL &&
-          _gtk_css_value_equal (color->last_value, value))
-       {
-         _gtk_css_value_unref (value);
-         value = _gtk_css_value_ref (color->last_value);
-       }
-      else
-       {
-         if (color->last_value != NULL)
-           _gtk_css_value_unref (color->last_value);
-         color->last_value = _gtk_css_value_ref (value);
-       }
+      _gtk_css_value_unref (value);
+      value = _gtk_css_value_ref (color->last_value);
+    }
+  else
+    {
+      if (color->last_value != NULL)
+        _gtk_css_value_unref (color->last_value);
+      color->last_value = _gtk_css_value_ref (value);
     }
 
-  _gtk_css_rgba_value_get_rgba (value);
   return value;
 }
 
@@ -329,11 +318,11 @@ gtk_css_value_color_compute (GtkCssValue             *value,
       current_deps = GTK_CSS_DEPENDS_ON_COLOR;
     }
   
-  resolved = gtk_css_color_value_resolve_full (value,
-                                               provider,
-                                               current,
-                                               current_deps,
-                                               dependencies);
+  resolved = _gtk_css_color_value_resolve (value,
+                                           provider,
+                                           current,
+                                           current_deps,
+                                           dependencies);
 
   if (resolved == NULL)
     return gtk_css_value_color_get_fallback (property_id, provider, values, parent_values);