X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcsscolorvalue.c;h=9ff0a052107e20c605cd48ce675e2967564a0698;hb=1865b9a1116d166c9abc5c75f5d01270574007c5;hp=6268262588e3c4498e230209af0326c313efba3d;hpb=e3f407a71d09be1ad151af013f8b89c74f1fb809;p=~andy%2Fgtk diff --git a/gtk/gtkcsscolorvalue.c b/gtk/gtkcsscolorvalue.c index 626826258..9ff0a0521 100644 --- a/gtk/gtkcsscolorvalue.c +++ b/gtk/gtkcsscolorvalue.c @@ -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; + GtkCssValue *named; - symbolic = _gtk_style_provider_private_get_color (provider, color->sym_col.name); - - 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.hue *= color->sym_col.shade.factor; - hsla.hue = CLAMP (hsla.hue, 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); @@ -434,7 +423,7 @@ gtk_css_value_color_print (const GtkCssValue *value, g_string_append (string, ", "); _gtk_css_value_print (value->sym_col.mix.color2, string); g_string_append (string, ", "); - g_ascii_dtostr (factor, sizeof (factor), value->sym_col.alpha.factor); + g_ascii_dtostr (factor, sizeof (factor), value->sym_col.mix.factor); g_string_append (string, factor); g_string_append (string, ")"); }