#include "gtkhslaprivate.h"
#include "gtkstylepropertyprivate.h"
#include "gtkstyleproperties.h"
-#include "gtksymboliccolorprivate.h"
#include "gtkwin32themeprivate.h"
typedef enum {
}
}
-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;
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);
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;
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);
}
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;
}
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);
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, ")");
}