summaryrefslogtreecommitdiff
path: root/gtk
diff options
context:
space:
mode:
Diffstat (limited to 'gtk')
-rw-r--r--gtk/gtkcssarrayvalue.c12
-rw-r--r--gtk/gtkcssbgsizevalue.c14
-rw-r--r--gtk/gtkcssbordervalue.c12
-rw-r--r--gtk/gtkcsscomputedvalues.c40
-rw-r--r--gtk/gtkcsscomputedvaluesprivate.h9
-rw-r--r--gtk/gtkcsscornervalue.c14
-rw-r--r--gtk/gtkcsseasevalue.c10
-rw-r--r--gtk/gtkcssenginevalue.c10
-rw-r--r--gtk/gtkcssenumvalue.c10
-rw-r--r--gtk/gtkcssimage.c27
-rw-r--r--gtk/gtkcssimagegradient.c12
-rw-r--r--gtk/gtkcssimagelinear.c16
-rw-r--r--gtk/gtkcssimageprivate.h96
-rw-r--r--gtk/gtkcssimagevalue.c12
-rw-r--r--gtk/gtkcssinheritvalue.c20
-rw-r--r--gtk/gtkcssinitialvalue.c14
-rw-r--r--gtk/gtkcsskeyframes.c14
-rw-r--r--gtk/gtkcsskeyframesprivate.h6
-rw-r--r--gtk/gtkcsslookup.c13
-rw-r--r--gtk/gtkcsslookupprivate.h36
-rw-r--r--gtk/gtkcssnumbervalue.c24
-rw-r--r--gtk/gtkcsspositionvalue.c14
-rw-r--r--gtk/gtkcssrepeatvalue.c10
-rw-r--r--gtk/gtkcssrgbavalue.c10
-rw-r--r--gtk/gtkcssshadowsvalue.c12
-rw-r--r--gtk/gtkcssshadowvalue.c20
-rw-r--r--gtk/gtkcssstringvalue.c10
-rw-r--r--gtk/gtkcssstylefuncs.c98
-rw-r--r--gtk/gtkcssstylefuncsprivate.h18
-rw-r--r--gtk/gtkcsstypedvalue.c12
-rw-r--r--gtk/gtkcssvalue.c23
-rw-r--r--gtk/gtkcssvalueprivate.h9
-rw-r--r--gtk/gtkgradient.c45
-rw-r--r--gtk/gtkstylecontext.c36
-rw-r--r--gtk/gtkstylecontextprivate.h3
-rw-r--r--gtk/gtkstylepropertiesprivate.h8
-rw-r--r--gtk/gtksymboliccolor.c36
37 files changed, 461 insertions, 324 deletions
diff --git a/gtk/gtkcssarrayvalue.c b/gtk/gtkcssarrayvalue.c
index dadedba90d..e822619dff 100644
--- a/gtk/gtkcssarrayvalue.c
+++ b/gtk/gtkcssarrayvalue.c
@@ -43,10 +43,12 @@ gtk_css_value_array_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_array_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_array_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *result;
gboolean changed = FALSE;
@@ -59,7 +61,7 @@ gtk_css_value_array_compute (GtkCssValue *value,
result = _gtk_css_array_value_new_from_array (value->values, value->n_values);
for (i = 0; i < value->n_values; i++)
{
- result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, &child_deps);
+ result->values[i] = _gtk_css_value_compute (value->values[i], property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
diff --git a/gtk/gtkcssbgsizevalue.c b/gtk/gtkcssbgsizevalue.c
index e545f61b34..01db83d34f 100644
--- a/gtk/gtkcssbgsizevalue.c
+++ b/gtk/gtkcssbgsizevalue.c
@@ -41,10 +41,12 @@ gtk_css_value_bg_size_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_bg_size_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_bg_size_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *x, *y;
GtkCssDependencies x_deps, y_deps;
@@ -56,10 +58,10 @@ gtk_css_value_bg_size_compute (GtkCssValue *value,
x = y = NULL;
if (value->x)
- x = _gtk_css_value_compute (value->x, property_id, context, &x_deps);
+ x = _gtk_css_value_compute (value->x, property_id, provider, values, parent_values, &x_deps);
if (value->y)
- y = _gtk_css_value_compute (value->y, property_id, context, &y_deps);
+ y = _gtk_css_value_compute (value->y, property_id, provider, values, parent_values, &y_deps);
*dependencies = _gtk_css_dependencies_union (x_deps, y_deps);
diff --git a/gtk/gtkcssbordervalue.c b/gtk/gtkcssbordervalue.c
index 953ab53ca5..62487f8f8a 100644
--- a/gtk/gtkcssbordervalue.c
+++ b/gtk/gtkcssbordervalue.c
@@ -42,10 +42,12 @@ gtk_css_value_border_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_border_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_border_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *computed;
GtkCssDependencies child_deps;
@@ -59,7 +61,7 @@ gtk_css_value_border_compute (GtkCssValue *value,
{
if (value->values[i])
{
- computed->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, &child_deps);
+ computed->values[i] = _gtk_css_value_compute (value->values[i], property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
changed |= (computed->values[i] != value->values[i]);
}
diff --git a/gtk/gtkcsscomputedvalues.c b/gtk/gtkcsscomputedvalues.c
index 250b0b0d29..b60324eaa0 100644
--- a/gtk/gtkcsscomputedvalues.c
+++ b/gtk/gtkcsscomputedvalues.c
@@ -110,17 +110,19 @@ maybe_unref_section (gpointer section)
}
void
-_gtk_css_computed_values_compute_value (GtkCssComputedValues *values,
- GtkStyleContext *context,
- guint id,
- GtkCssValue *specified,
- GtkCssSection *section)
+_gtk_css_computed_values_compute_value (GtkCssComputedValues *values,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *parent_values,
+ guint id,
+ GtkCssValue *specified,
+ GtkCssSection *section)
{
GtkCssDependencies dependencies;
GtkCssValue *value;
g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values));
- g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+ g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
+ g_return_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values));
/* http://www.w3.org/TR/css3-cascade/#cascade
* Then, for every element, the value for each property can be found
@@ -139,7 +141,7 @@ _gtk_css_computed_values_compute_value (GtkCssComputedValues *values,
else
_gtk_css_value_ref (specified);
- value = _gtk_css_value_compute (specified, id, context, &dependencies);
+ value = _gtk_css_value_compute (specified, id, provider, values, parent_values, &dependencies);
_gtk_css_computed_values_set_value (values, id, value, dependencies, section);
@@ -432,17 +434,16 @@ gtk_css_computed_values_find_animation (GtkCssComputedValues *values,
}
static void
-gtk_css_computed_values_create_css_animations (GtkCssComputedValues *values,
- gint64 timestamp,
- GtkCssComputedValues *source,
- GtkStyleContext *context)
+gtk_css_computed_values_create_css_animations (GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ gint64 timestamp,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *source)
{
- GtkStyleProviderPrivate *provider;
GtkCssValue *durations, *delays, *timing_functions, *animations;
GtkCssValue *iteration_counts, *directions, *play_states, *fill_modes;
guint i;
- provider = _gtk_style_context_get_style_provider (context);
animations = _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_ANIMATION_NAME);
durations = _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_ANIMATION_DURATION);
delays = _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_ANIMATION_DELAY);
@@ -481,7 +482,7 @@ gtk_css_computed_values_create_css_animations (GtkCssComputedValues *values,
if (keyframes == NULL)
continue;
- keyframes = _gtk_css_keyframes_compute (keyframes, context);
+ keyframes = _gtk_css_keyframes_compute (keyframes, provider, values, parent_values);
animation = _gtk_css_animation_new (name,
keyframes,
@@ -501,14 +502,15 @@ gtk_css_computed_values_create_css_animations (GtkCssComputedValues *values,
/* PUBLIC API */
void
-_gtk_css_computed_values_create_animations (GtkCssComputedValues *values,
- gint64 timestamp,
- GtkCssComputedValues *source,
- GtkStyleContext *context)
+_gtk_css_computed_values_create_animations (GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ gint64 timestamp,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *source)
{
if (source != NULL)
gtk_css_computed_values_create_css_transitions (values, timestamp, source);
- gtk_css_computed_values_create_css_animations (values, timestamp, source, context);
+ gtk_css_computed_values_create_css_animations (values, parent_values, timestamp, provider, source);
}
GtkBitmask *
diff --git a/gtk/gtkcsscomputedvaluesprivate.h b/gtk/gtkcsscomputedvaluesprivate.h
index ef8130aef0..28afec3807 100644
--- a/gtk/gtkcsscomputedvaluesprivate.h
+++ b/gtk/gtkcsscomputedvaluesprivate.h
@@ -24,7 +24,6 @@
#include "gtk/gtkbitmaskprivate.h"
#include "gtk/gtkcsssection.h"
-#include "gtk/gtkstylecontext.h"
#include "gtk/gtkcssvalueprivate.h"
G_BEGIN_DECLS
@@ -66,7 +65,8 @@ GType _gtk_css_computed_values_get_type (void) G_G
GtkCssComputedValues * _gtk_css_computed_values_new (void);
void _gtk_css_computed_values_compute_value (GtkCssComputedValues *values,
- GtkStyleContext *context,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *parent_values,
guint id,
GtkCssValue *specified,
GtkCssSection *section);
@@ -89,9 +89,10 @@ GtkBitmask * _gtk_css_computed_values_get_difference (GtkCssCom
GtkCssComputedValues *other);
void _gtk_css_computed_values_create_animations (GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
gint64 timestamp,
- GtkCssComputedValues *source,
- GtkStyleContext *context);
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *source);
GtkBitmask * _gtk_css_computed_values_advance (GtkCssComputedValues *values,
gint64 timestamp);
void _gtk_css_computed_values_cancel_animations (GtkCssComputedValues *values);
diff --git a/gtk/gtkcsscornervalue.c b/gtk/gtkcsscornervalue.c
index 48586dfa12..394675c71a 100644
--- a/gtk/gtkcsscornervalue.c
+++ b/gtk/gtkcsscornervalue.c
@@ -37,16 +37,18 @@ gtk_css_value_corner_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_corner_compute (GtkCssValue *corner,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_corner_compute (GtkCssValue *corner,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *x, *y;
GtkCssDependencies x_deps, y_deps;
- x = _gtk_css_value_compute (corner->x, property_id, context, &x_deps);
- y = _gtk_css_value_compute (corner->y, property_id, context, &y_deps);
+ x = _gtk_css_value_compute (corner->x, property_id, provider, values, parent_values, &x_deps);
+ y = _gtk_css_value_compute (corner->y, property_id, provider, values, parent_values, &y_deps);
*dependencies = _gtk_css_dependencies_union (x_deps, y_deps);
if (x == corner->x && y == corner->y)
{
diff --git a/gtk/gtkcsseasevalue.c b/gtk/gtkcsseasevalue.c
index cea938f001..81cdea8e37 100644
--- a/gtk/gtkcsseasevalue.c
+++ b/gtk/gtkcsseasevalue.c
@@ -50,10 +50,12 @@ gtk_css_value_ease_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_ease_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_ease_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssenginevalue.c b/gtk/gtkcssenginevalue.c
index 851c6310c5..f382df9d94 100644
--- a/gtk/gtkcssenginevalue.c
+++ b/gtk/gtkcssenginevalue.c
@@ -35,10 +35,12 @@ gtk_css_value_engine_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_engine_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_engine_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssenumvalue.c b/gtk/gtkcssenumvalue.c
index a101eaf271..b739567970 100644
--- a/gtk/gtkcssenumvalue.c
+++ b/gtk/gtkcssenumvalue.c
@@ -36,10 +36,12 @@ gtk_css_value_enum_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_enum_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_enum_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssimage.c b/gtk/gtkcssimage.c
index d990fc79fe..89dc6f2699 100644
--- a/gtk/gtkcssimage.c
+++ b/gtk/gtkcssimage.c
@@ -21,6 +21,8 @@
#include "gtkcssimageprivate.h"
+#include "gtkcsscomputedvaluesprivate.h"
+
/* for the types only */
#include "gtk/gtkcssimagecrossfadeprivate.h"
#include "gtk/gtkcssimagegradientprivate.h"
@@ -57,10 +59,12 @@ gtk_css_image_real_get_aspect_ratio (GtkCssImage *image)
}
static GtkCssImage *
-gtk_css_image_real_compute (GtkCssImage *image,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_image_real_compute (GtkCssImage *image,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return g_object_ref (image);
}
@@ -116,16 +120,19 @@ _gtk_css_image_get_aspect_ratio (GtkCssImage *image)
}
GtkCssImage *
-_gtk_css_image_compute (GtkCssImage *image,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+_gtk_css_image_compute (GtkCssImage *image,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssDependencies unused;
GtkCssImageClass *klass;
g_return_val_if_fail (GTK_IS_CSS_IMAGE (image), NULL);
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+ g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL);
+ g_return_val_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values), NULL);
if (dependencies == NULL)
dependencies = &unused;
@@ -133,7 +140,7 @@ _gtk_css_image_compute (GtkCssImage *image,
klass = GTK_CSS_IMAGE_GET_CLASS (image);
- return klass->compute (image, property_id, context, dependencies);
+ return klass->compute (image, property_id, provider, values, parent_values, dependencies);
}
void
diff --git a/gtk/gtkcssimagegradient.c b/gtk/gtkcssimagegradient.c
index d8db2e2d77..2e710672cc 100644
--- a/gtk/gtkcssimagegradient.c
+++ b/gtk/gtkcssimagegradient.c
@@ -28,10 +28,12 @@
G_DEFINE_TYPE (GtkCssImageGradient, _gtk_css_image_gradient, GTK_TYPE_CSS_IMAGE)
static GtkCssImage *
-gtk_css_image_gradient_compute (GtkCssImage *image,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_image_gradient_compute (GtkCssImage *image,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssImageGradient *gradient = GTK_CSS_IMAGE_GRADIENT (image);
GtkCssImageGradient *copy;
@@ -41,7 +43,7 @@ gtk_css_image_gradient_compute (GtkCssImage *image,
copy = g_object_new (GTK_TYPE_CSS_IMAGE_GRADIENT, NULL);
copy->gradient = gtk_gradient_ref (gradient->gradient);
- copy->pattern = _gtk_gradient_resolve_full (copy->gradient, context, dependencies);
+ copy->pattern = _gtk_gradient_resolve_full (copy->gradient, provider, values, parent_values, dependencies);
return GTK_CSS_IMAGE (copy);
}
diff --git a/gtk/gtkcssimagelinear.c b/gtk/gtkcssimagelinear.c
index 8dee6972bc..39b6b3e781 100644
--- a/gtk/gtkcssimagelinear.c
+++ b/gtk/gtkcssimagelinear.c
@@ -409,10 +409,12 @@ gtk_css_image_linear_print (GtkCssImage *image,
}
static GtkCssImage *
-gtk_css_image_linear_compute (GtkCssImage *image,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_image_linear_compute (GtkCssImage *image,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssImageLinear *linear = GTK_CSS_IMAGE_LINEAR (image);
GtkCssImageLinear *copy;
@@ -421,7 +423,7 @@ gtk_css_image_linear_compute (GtkCssImage *image,
copy = g_object_new (GTK_TYPE_CSS_IMAGE_LINEAR, NULL);
copy->repeating = linear->repeating;
- copy->angle = _gtk_css_value_compute (linear->angle, property_id, context, dependencies);
+ copy->angle = _gtk_css_value_compute (linear->angle, property_id, provider, values, parent_values, dependencies);
g_array_set_size (copy->stops, linear->stops->len);
for (i = 0; i < linear->stops->len; i++)
@@ -432,12 +434,12 @@ gtk_css_image_linear_compute (GtkCssImage *image,
stop = &g_array_index (linear->stops, GtkCssImageLinearColorStop, i);
scopy = &g_array_index (copy->stops, GtkCssImageLinearColorStop, i);
- scopy->color = _gtk_css_value_compute (stop->color, property_id, context, &child_deps);
+ scopy->color = _gtk_css_value_compute (stop->color, property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
if (stop->offset)
{
- scopy->offset = _gtk_css_value_compute (stop->offset, property_id, context, &child_deps);
+ scopy->offset = _gtk_css_value_compute (stop->offset, property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
}
else
diff --git a/gtk/gtkcssimageprivate.h b/gtk/gtkcssimageprivate.h
index 2899ef2822..4b8362b0de 100644
--- a/gtk/gtkcssimageprivate.h
+++ b/gtk/gtkcssimageprivate.h
@@ -23,8 +23,8 @@
#include <cairo.h>
#include <glib-object.h>
-#include "gtk/gtkstylecontext.h"
#include "gtk/gtkcssparserprivate.h"
+#include "gtk/gtkcsstypesprivate.h"
G_BEGIN_DECLS
@@ -48,64 +48,68 @@ struct _GtkCssImageClass
GObjectClass parent_class;
/* width of image or 0 if it has no width (optional) */
- int (* get_width) (GtkCssImage *image);
+ int (* get_width) (GtkCssImage *image);
/* height of image or 0 if it has no height (optional) */
- int (* get_height) (GtkCssImage *image);
+ int (* get_height) (GtkCssImage *image);
/* aspect ratio (width / height) of image or 0 if it has no aspect ratio (optional) */
- double (* get_aspect_ratio) (GtkCssImage *image);
+ double (* get_aspect_ratio) (GtkCssImage *image);
/* create "computed value" in CSS terms, returns a new reference */
- GtkCssImage *(* compute) (GtkCssImage *image,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies);
+ GtkCssImage *(* compute) (GtkCssImage *image,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies);
/* draw to 0,0 with the given width and height */
- void (* draw) (GtkCssImage *image,
- cairo_t *cr,
- double width,
- double height);
+ void (* draw) (GtkCssImage *image,
+ cairo_t *cr,
+ double width,
+ double height);
/* parse CSS, return TRUE on success */
- gboolean (* parse) (GtkCssImage *image,
- GtkCssParser *parser);
+ gboolean (* parse) (GtkCssImage *image,
+ GtkCssParser *parser);
/* print to CSS */
- void (* print) (GtkCssImage *image,
- GString *string);
+ void (* print) (GtkCssImage *image,
+ GString *string);
};
GType _gtk_css_image_get_type (void) G_GNUC_CONST;
-gboolean _gtk_css_image_can_parse (GtkCssParser *parser);
-GtkCssImage * _gtk_css_image_new_parse (GtkCssParser *parser);
-
-int _gtk_css_image_get_width (GtkCssImage *image);
-int _gtk_css_image_get_height (GtkCssImage *image);
-double _gtk_css_image_get_aspect_ratio (GtkCssImage *image);
-
-GtkCssImage * _gtk_css_image_compute (GtkCssImage *image,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies);
-
-void _gtk_css_image_draw (GtkCssImage *image,
- cairo_t *cr,
- double width,
- double height);
-void _gtk_css_image_print (GtkCssImage *image,
- GString *string);
-
-void _gtk_css_image_get_concrete_size (GtkCssImage *image,
- double specified_width,
- double specified_height,
- double default_width,
- double default_height,
- double *concrete_width,
- double *concrete_height);
+gboolean _gtk_css_image_can_parse (GtkCssParser *parser);
+GtkCssImage * _gtk_css_image_new_parse (GtkCssParser *parser);
+
+int _gtk_css_image_get_width (GtkCssImage *image);
+int _gtk_css_image_get_height (GtkCssImage *image);
+double _gtk_css_image_get_aspect_ratio (GtkCssImage *image);
+
+GtkCssImage * _gtk_css_image_compute (GtkCssImage *image,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies);
+
+void _gtk_css_image_draw (GtkCssImage *image,
+ cairo_t *cr,
+ double width,
+ double height);
+void _gtk_css_image_print (GtkCssImage *image,
+ GString *string);
+
+void _gtk_css_image_get_concrete_size (GtkCssImage *image,
+ double specified_width,
+ double specified_height,
+ double default_width,
+ double default_height,
+ double *concrete_width,
+ double *concrete_height);
cairo_surface_t *
- _gtk_css_image_get_surface (GtkCssImage *image,
- cairo_surface_t *target,
- int surface_width,
- int surface_height);
+ _gtk_css_image_get_surface (GtkCssImage *image,
+ cairo_surface_t *target,
+ int surface_width,
+ int surface_height);
G_END_DECLS
diff --git a/gtk/gtkcssimagevalue.c b/gtk/gtkcssimagevalue.c
index b8baa509f2..d44e72be1e 100644
--- a/gtk/gtkcssimagevalue.c
+++ b/gtk/gtkcssimagevalue.c
@@ -34,10 +34,12 @@ gtk_css_value_image_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_image_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_image_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssImage *image, *computed;
@@ -46,7 +48,7 @@ gtk_css_value_image_compute (GtkCssValue *value,
if (image == NULL)
return _gtk_css_value_ref (value);
- computed = _gtk_css_image_compute (image, property_id, context, dependencies);
+ computed = _gtk_css_image_compute (image, property_id, provider, values, parent_values, dependencies);
if (computed == image)
{
diff --git a/gtk/gtkcssinheritvalue.c b/gtk/gtkcssinheritvalue.c
index 585a9760e5..296b1e3f99 100644
--- a/gtk/gtkcssinheritvalue.c
+++ b/gtk/gtkcssinheritvalue.c
@@ -34,23 +34,25 @@ gtk_css_value_inherit_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_inherit_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_inherit_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
- GtkStyleContext *parent = gtk_style_context_get_parent (context);
-
- if (parent)
+ if (parent_values)
{
*dependencies = GTK_CSS_EQUALS_PARENT;
- return _gtk_css_value_ref (_gtk_style_context_peek_property (parent, property_id));
+ return _gtk_css_value_ref (_gtk_css_computed_values_get_value (parent_values, property_id));
}
else
{
return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)),
property_id,
- context,
+ provider,
+ values,
+ parent_values,
dependencies);
}
}
diff --git a/gtk/gtkcssinitialvalue.c b/gtk/gtkcssinitialvalue.c
index d9d960f0fc..36ca6a09a3 100644
--- a/gtk/gtkcssinitialvalue.c
+++ b/gtk/gtkcssinitialvalue.c
@@ -33,14 +33,18 @@ gtk_css_value_initial_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_initial_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_initial_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)),
property_id,
- context,
+ provider,
+ values,
+ parent_values,
dependencies);
}
diff --git a/gtk/gtkcsskeyframes.c b/gtk/gtkcsskeyframes.c
index f25ccef3f2..f909871594 100644
--- a/gtk/gtkcsskeyframes.c
+++ b/gtk/gtkcsskeyframes.c
@@ -414,14 +414,18 @@ _gtk_css_keyframes_print (GtkCssKeyframes *keyframes,
}
GtkCssKeyframes *
-_gtk_css_keyframes_compute (GtkCssKeyframes *keyframes,
- GtkStyleContext *context)
+_gtk_css_keyframes_compute (GtkCssKeyframes *keyframes,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values)
{
GtkCssKeyframes *resolved;
guint k, p;
g_return_val_if_fail (keyframes != NULL, NULL);
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+ g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
+ g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL);
+ g_return_val_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values), NULL);
resolved = gtk_css_keyframes_new ();
resolved->n_keyframes = keyframes->n_keyframes;
@@ -439,7 +443,9 @@ _gtk_css_keyframes_compute (GtkCssKeyframes *keyframes,
KEYFRAMES_VALUE (resolved, k, p) = _gtk_css_value_compute (KEYFRAMES_VALUE (keyframes, k, p),
resolved->property_ids[p],
- context,
+ provider,
+ values,
+ parent_values,
NULL);
}
}
diff --git a/gtk/gtkcsskeyframesprivate.h b/gtk/gtkcsskeyframesprivate.h
index b08ce09083..9ec76fe6aa 100644
--- a/gtk/gtkcsskeyframesprivate.h
+++ b/gtk/gtkcsskeyframesprivate.h
@@ -36,8 +36,10 @@ void _gtk_css_keyframes_unref (GtkCssKeyframes
void _gtk_css_keyframes_print (GtkCssKeyframes *keyframes,
GString *string);
-GtkCssKeyframes * _gtk_css_keyframes_compute (GtkCssKeyframes *keyframes,
- GtkStyleContext *context);
+GtkCssKeyframes * _gtk_css_keyframes_compute (GtkCssKeyframes *keyframes,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values);
guint _gtk_css_keyframes_get_n_properties (GtkCssKeyframes *keyframes);
guint _gtk_css_keyframes_get_property_id (GtkCssKeyframes *keyframes,
diff --git a/gtk/gtkcsslookup.c b/gtk/gtkcsslookup.c
index 67d7b1c21b..3b124ac095 100644
--- a/gtk/gtkcsslookup.c
+++ b/gtk/gtkcsslookup.c
@@ -157,15 +157,17 @@ _gtk_css_lookup_set_computed (GtkCssLookup *lookup,
* an issue, go fix it.
**/
void
-_gtk_css_lookup_resolve (GtkCssLookup *lookup,
- GtkStyleContext *context,
- GtkCssComputedValues *values)
+_gtk_css_lookup_resolve (GtkCssLookup *lookup,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values)
{
guint i, n;
g_return_if_fail (lookup != NULL);
- g_return_if_fail (GTK_IS_STYLE_CONTEXT (context));
+ g_return_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider));
g_return_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values));
+ g_return_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values));
n = _gtk_css_style_property_get_n_properties ();
@@ -180,7 +182,8 @@ _gtk_css_lookup_resolve (GtkCssLookup *lookup,
else if (lookup->values[i].value ||
_gtk_bitmask_get (lookup->missing, i))
_gtk_css_computed_values_compute_value (values,
- context,
+ provider,
+ parent_values,
i,
lookup->values[i].value,
lookup->values[i].section);
diff --git a/gtk/gtkcsslookupprivate.h b/gtk/gtkcsslookupprivate.h
index 72b0b18fc2..aed2d51c85 100644
--- a/gtk/gtkcsslookupprivate.h
+++ b/gtk/gtkcsslookupprivate.h
@@ -22,30 +22,30 @@
#include "gtk/gtkbitmaskprivate.h"
#include "gtk/gtkcsscomputedvaluesprivate.h"
#include "gtk/gtkcsssection.h"
-#include "gtk/gtkstylecontext.h"
G_BEGIN_DECLS
typedef struct _GtkCssLookup GtkCssLookup;
-GtkCssLookup * _gtk_css_lookup_new (const GtkBitmask *relevant);
-void _gtk_css_lookup_free (GtkCssLookup *lookup);
-
-const GtkBitmask * _gtk_css_lookup_get_missing (const GtkCssLookup *lookup);
-gboolean _gtk_css_lookup_is_missing (const GtkCssLookup *lookup,
- guint id);
-void _gtk_css_lookup_set (GtkCssLookup *lookup,
- guint id,
- GtkCssSection *section,
- GtkCssValue *value);
-void _gtk_css_lookup_set_computed (GtkCssLookup *lookup,
- guint id,
- GtkCssSection *section,
- GtkCssValue *value);
-void _gtk_css_lookup_resolve (GtkCssLookup *lookup,
- GtkStyleContext *context,
- GtkCssComputedValues *values);
+GtkCssLookup * _gtk_css_lookup_new (const GtkBitmask *relevant);
+void _gtk_css_lookup_free (GtkCssLookup *lookup);
+
+const GtkBitmask * _gtk_css_lookup_get_missing (const GtkCssLookup *lookup);
+gboolean _gtk_css_lookup_is_missing (const GtkCssLookup *lookup,
+ guint id);
+void _gtk_css_lookup_set (GtkCssLookup *lookup,
+ guint id,
+ GtkCssSection *section,
+ GtkCssValue *value);
+void _gtk_css_lookup_set_computed (GtkCssLookup *lookup,
+ guint id,
+ GtkCssSection *section,
+ GtkCssValue *value);
+void _gtk_css_lookup_resolve (GtkCssLookup *lookup,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values);
G_END_DECLS
diff --git a/gtk/gtkcssnumbervalue.c b/gtk/gtkcssnumbervalue.c
index c84bce6a1b..58f4652511 100644
--- a/gtk/gtkcssnumbervalue.c
+++ b/gtk/gtkcssnumbervalue.c
@@ -35,10 +35,12 @@ gtk_css_value_number_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_number_compute (GtkCssValue *number,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_number_compute (GtkCssValue *number,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkBorderStyle border_style;
@@ -46,27 +48,27 @@ gtk_css_value_number_compute (GtkCssValue *number,
switch (property_id)
{
case GTK_CSS_PROPERTY_BORDER_TOP_WIDTH:
- border_style = _gtk_css_border_style_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_TOP_STYLE));
+ border_style = _gtk_css_border_style_value_get (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_BORDER_TOP_STYLE));
if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN)
return _gtk_css_number_value_new (0, GTK_CSS_PX);
break;
case GTK_CSS_PROPERTY_BORDER_RIGHT_WIDTH:
- border_style = _gtk_css_border_style_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE));
+ border_style = _gtk_css_border_style_value_get (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_BORDER_RIGHT_STYLE));
if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN)
return _gtk_css_number_value_new (0, GTK_CSS_PX);
break;
case GTK_CSS_PROPERTY_BORDER_BOTTOM_WIDTH:
- border_style = _gtk_css_border_style_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE));
+ border_style = _gtk_css_border_style_value_get (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_BORDER_BOTTOM_STYLE));
if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN)
return _gtk_css_number_value_new (0, GTK_CSS_PX);
break;
case GTK_CSS_PROPERTY_BORDER_LEFT_WIDTH:
- border_style = _gtk_css_border_style_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_BORDER_LEFT_STYLE));
+ border_style = _gtk_css_border_style_value_get (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_BORDER_LEFT_STYLE));
if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN)
return _gtk_css_number_value_new (0, GTK_CSS_PX);
break;
case GTK_CSS_PROPERTY_OUTLINE_WIDTH:
- border_style = _gtk_css_border_style_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_OUTLINE_STYLE));
+ border_style = _gtk_css_border_style_value_get (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_OUTLINE_STYLE));
if (border_style == GTK_BORDER_STYLE_NONE || border_style == GTK_BORDER_STYLE_HIDDEN)
return _gtk_css_number_value_new (0, GTK_CSS_PX);
break;
@@ -107,14 +109,14 @@ gtk_css_value_number_compute (GtkCssValue *number,
case GTK_CSS_EM:
*dependencies = GTK_CSS_DEPENDS_ON_FONT_SIZE;
return _gtk_css_number_value_new (number->value *
- _gtk_css_number_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_FONT_SIZE), 100),
+ _gtk_css_number_value_get (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_FONT_SIZE), 100),
GTK_CSS_PX);
break;
case GTK_CSS_EX:
/* for now we pretend ex is half of em */
*dependencies = GTK_CSS_DEPENDS_ON_FONT_SIZE;
return _gtk_css_number_value_new (number->value * 0.5 *
- _gtk_css_number_value_get (_gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_FONT_SIZE), 100),
+ _gtk_css_number_value_get (_gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_FONT_SIZE), 100),
GTK_CSS_PX);
case GTK_CSS_RAD:
return _gtk_css_number_value_new (number->value * 360.0 / (2 * G_PI),
diff --git a/gtk/gtkcsspositionvalue.c b/gtk/gtkcsspositionvalue.c
index 077ab8429b..6f33de73a1 100644
--- a/gtk/gtkcsspositionvalue.c
+++ b/gtk/gtkcsspositionvalue.c
@@ -37,16 +37,18 @@ gtk_css_value_position_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_position_compute (GtkCssValue *position,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_position_compute (GtkCssValue *position,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *x, *y;
GtkCssDependencies x_deps, y_deps;
- x = _gtk_css_value_compute (position->x, property_id, context, &x_deps);
- y = _gtk_css_value_compute (position->y, property_id, context, &y_deps);
+ x = _gtk_css_value_compute (position->x, property_id, provider, values, parent_values, &x_deps);
+ y = _gtk_css_value_compute (position->y, property_id, provider, values, parent_values, &y_deps);
*dependencies = _gtk_css_dependencies_union (x_deps, y_deps);
if (x == position->x && y == position->y)
{
diff --git a/gtk/gtkcssrepeatvalue.c b/gtk/gtkcssrepeatvalue.c
index b9387eb7de..eda6fef423 100644
--- a/gtk/gtkcssrepeatvalue.c
+++ b/gtk/gtkcssrepeatvalue.c
@@ -34,10 +34,12 @@ gtk_css_value_repeat_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_repeat_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_repeat_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssrgbavalue.c b/gtk/gtkcssrgbavalue.c
index 99bcfa2b00..ccccac2fe8 100644
--- a/gtk/gtkcssrgbavalue.c
+++ b/gtk/gtkcssrgbavalue.c
@@ -35,10 +35,12 @@ gtk_css_value_rgba_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_rgba_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_rgba_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c
index d565d89d72..267c41c439 100644
--- a/gtk/gtkcssshadowsvalue.c
+++ b/gtk/gtkcssshadowsvalue.c
@@ -48,10 +48,12 @@ gtk_css_value_shadows_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_shadows_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_shadows_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *result;
GtkCssDependencies child_deps;
@@ -63,7 +65,7 @@ gtk_css_value_shadows_compute (GtkCssValue *value,
result = gtk_css_shadows_value_new (value->values, value->len);
for (i = 0; i < value->len; i++)
{
- result->values[i] = _gtk_css_value_compute (value->values[i], property_id, context, &child_deps);
+ result->values[i] = _gtk_css_value_compute (value->values[i], property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
}
diff --git a/gtk/gtkcssshadowvalue.c b/gtk/gtkcssshadowvalue.c
index 56ebe3af1b..be215972ad 100644
--- a/gtk/gtkcssshadowvalue.c
+++ b/gtk/gtkcssshadowvalue.c
@@ -61,32 +61,34 @@ gtk_css_value_shadow_free (GtkCssValue *shadow)
}
static GtkCssValue *
-gtk_css_value_shadow_compute (GtkCssValue *shadow,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_shadow_compute (GtkCssValue *shadow,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *hoffset, *voffset, *radius, *spread, *color;
GtkCssDependencies child_deps;
child_deps = 0;
- hoffset = _gtk_css_value_compute (shadow->hoffset, property_id, context, &child_deps);
+ hoffset = _gtk_css_value_compute (shadow->hoffset, property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
child_deps = 0;
- voffset = _gtk_css_value_compute (shadow->voffset, property_id, context, &child_deps);
+ voffset = _gtk_css_value_compute (shadow->voffset, property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
child_deps = 0;
- radius = _gtk_css_value_compute (shadow->radius, property_id, context, &child_deps);
+ radius = _gtk_css_value_compute (shadow->radius, property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
child_deps = 0;
- spread = _gtk_css_value_compute (shadow->spread, property_id, context, &child_deps),
+ spread = _gtk_css_value_compute (shadow->spread, property_id, provider, values, parent_values, &child_deps),
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
child_deps = 0;
- color = _gtk_css_value_compute (shadow->color, property_id, context, &child_deps);
+ color = _gtk_css_value_compute (shadow->color, property_id, provider, values, parent_values, &child_deps);
*dependencies = _gtk_css_dependencies_union (*dependencies, child_deps);
return gtk_css_shadow_value_new (hoffset, voffset, radius, spread, shadow->inset, color);
diff --git a/gtk/gtkcssstringvalue.c b/gtk/gtkcssstringvalue.c
index 02405f4106..82e7c37b6e 100644
--- a/gtk/gtkcssstringvalue.c
+++ b/gtk/gtkcssstringvalue.c
@@ -34,10 +34,12 @@ gtk_css_value_string_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_string_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_string_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
return _gtk_css_value_ref (value);
}
diff --git a/gtk/gtkcssstylefuncs.c b/gtk/gtkcssstylefuncs.c
index e893a2c292..182837a16c 100644
--- a/gtk/gtkcssstylefuncs.c
+++ b/gtk/gtkcssstylefuncs.c
@@ -29,6 +29,7 @@
#include "gtkcssimagegradientprivate.h"
#include "gtkcssprovider.h"
+#include "gtkcssrgbavalueprivate.h"
#include "gtkcsstypedvalueprivate.h"
#include "gtkcsstypesprivate.h"
#include "gtkgradient.h"
@@ -49,13 +50,15 @@ static GHashTable *parse_funcs = NULL;
static GHashTable *print_funcs = NULL;
static GHashTable *compute_funcs = NULL;
-typedef gboolean (* GtkStyleParseFunc) (GtkCssParser *parser,
- GValue *value);
-typedef void (* GtkStylePrintFunc) (const GValue *value,
- GString *string);
-typedef GtkCssValue * (* GtkStyleComputeFunc) (GtkStyleContext *context,
- GtkCssValue *specified,
- GtkCssDependencies *dependencies);
+typedef gboolean (* GtkStyleParseFunc) (GtkCssParser *parser,
+ GValue *value);
+typedef void (* GtkStylePrintFunc) (const GValue *value,
+ GString *string);
+typedef GtkCssValue * (* GtkStyleComputeFunc) (GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssValue *specified,
+ GtkCssDependencies *dependencies);
static void
register_conversion_function (GType type,
@@ -204,9 +207,11 @@ rgba_value_print (const GValue *value,
}
static GtkCssValue *
-rgba_value_compute (GtkStyleContext *context,
- GtkCssValue *specified,
- GtkCssDependencies *dependencies)
+rgba_value_compute (GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssValue *specified,
+ GtkCssDependencies *dependencies)
{
GdkRGBA white = { 1, 1, 1, 1 };
const GValue *value;
@@ -216,10 +221,21 @@ rgba_value_compute (GtkStyleContext *context,
if (G_VALUE_HOLDS (value, GTK_TYPE_SYMBOLIC_COLOR))
{
GtkSymbolicColor *symbolic = g_value_get_boxed (value);
+ GtkCssValue *val;
GValue new_value = G_VALUE_INIT;
GdkRGBA rgba;
- if (!_gtk_style_context_resolve_color (context, symbolic, &rgba, dependencies))
+ val = _gtk_symbolic_color_resolve_full (symbolic,
+ provider,
+ _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_COLOR),
+ GTK_CSS_DEPENDS_ON_COLOR,
+ dependencies);
+ if (val != NULL)
+ {
+ rgba = *_gtk_css_rgba_value_get_rgba (val);
+ _gtk_css_value_unref (val);
+ }
+ else
rgba = white;
g_value_init (&new_value, GDK_TYPE_RGBA);
@@ -278,11 +294,12 @@ color_value_print (const GValue *value,
}
static GtkCssValue *
-color_value_compute (GtkStyleContext *context,
- GtkCssValue *specified,
- GtkCssDependencies *dependencies)
+color_value_compute (GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssValue *specified,
+ GtkCssDependencies *dependencies)
{
- GdkRGBA rgba;
GdkColor color = { 0, 65535, 65535, 65535 };
const GValue *value;
@@ -291,15 +308,20 @@ color_value_compute (GtkStyleContext *context,
if (G_VALUE_HOLDS (value, GTK_TYPE_SYMBOLIC_COLOR))
{
GValue new_value = G_VALUE_INIT;
-
- if (_gtk_style_context_resolve_color (context,
- g_value_get_boxed (value),
- &rgba,
- dependencies))
+ GtkCssValue *val;
+
+ val = _gtk_symbolic_color_resolve_full ((GtkSymbolicColor *) g_value_get_boxed (value),
+ provider,
+ _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_COLOR),
+ GTK_CSS_DEPENDS_ON_COLOR,
+ dependencies);
+ if (val != NULL)
{
- color.red = rgba.red * 65535. + 0.5;
- color.green = rgba.green * 65535. + 0.5;
- color.blue = rgba.blue * 65535. + 0.5;
+ const GdkRGBA *rgba = _gtk_css_rgba_value_get_rgba (val);
+ color.red = rgba->red * 65535. + 0.5;
+ color.green = rgba->green * 65535. + 0.5;
+ color.blue = rgba->blue * 65535. + 0.5;
+ _gtk_css_value_unref (val);
}
g_value_init (&new_value, GDK_TYPE_COLOR);
@@ -822,9 +844,11 @@ pattern_value_print (const GValue *value,
}
static GtkCssValue *
-pattern_value_compute (GtkStyleContext *context,
- GtkCssValue *specified,
- GtkCssDependencies *dependencies)
+pattern_value_compute (GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssValue *specified,
+ GtkCssDependencies *dependencies)
{
const GValue *value = _gtk_css_typed_value_get (specified);
@@ -833,7 +857,7 @@ pattern_value_compute (GtkStyleContext *context,
GValue new_value = G_VALUE_INIT;
cairo_pattern_t *gradient;
- gradient = _gtk_gradient_resolve_full (g_value_get_boxed (value), context, dependencies);
+ gradient = _gtk_gradient_resolve_full (g_value_get_boxed (value), provider, values, parent_values, dependencies);
g_value_init (&new_value, CAIRO_GOBJECT_TYPE_PATTERN);
g_value_take_boxed (&new_value, gradient);
@@ -1088,7 +1112,9 @@ _gtk_css_style_print_value (const GValue *value,
/**
* _gtk_css_style_compute_value:
- * @context: the context to use for computing the value
+ * @provider: Style provider to look up information from
+ * @values: The values to compute for
+ * @parent_values: Values to look up inherited values from
* @target_type: Type the resulting value should have
* @specified: the value to use for the computation
* @dependencies: (out): Value initialized with 0 to take the dependencies
@@ -1102,14 +1128,18 @@ _gtk_css_style_print_value (const GValue *value,
* Returns: the resulting value
**/
GtkCssValue *
-_gtk_css_style_compute_value (GtkStyleContext *context,
- GType target_type,
- GtkCssValue *specified,
- GtkCssDependencies *dependencies)
+_gtk_css_style_compute_value (GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GType target_type,
+ GtkCssValue *specified,
+ GtkCssDependencies *dependencies)
{
GtkStyleComputeFunc func;
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+ g_return_val_if_fail (GTK_IS_STYLE_PROVIDER (provider), NULL);
+ g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL);
+ g_return_val_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values), NULL);
g_return_val_if_fail (*dependencies == 0, NULL);
gtk_css_style_funcs_init ();
@@ -1121,7 +1151,7 @@ _gtk_css_style_compute_value (GtkStyleContext *context,
GSIZE_TO_POINTER (g_type_fundamental (target_type)));
if (func)
- return func (context, specified, dependencies);
+ return func (provider, values, parent_values, specified, dependencies);
else
return _gtk_css_value_ref (specified);
}
diff --git a/gtk/gtkcssstylefuncsprivate.h b/gtk/gtkcssstylefuncsprivate.h
index e4f1ec46ce..df13b80949 100644
--- a/gtk/gtkcssstylefuncsprivate.h
+++ b/gtk/gtkcssstylefuncsprivate.h
@@ -24,14 +24,16 @@
G_BEGIN_DECLS
-gboolean _gtk_css_style_parse_value (GValue *value,
- GtkCssParser *parser);
-void _gtk_css_style_print_value (const GValue *value,
- GString *string);
-GtkCssValue * _gtk_css_style_compute_value (GtkStyleContext *context,
- GType target_type,
- GtkCssValue *specified,
- GtkCssDependencies *dependencies);
+gboolean _gtk_css_style_parse_value (GValue *value,
+ GtkCssParser *parser);
+void _gtk_css_style_print_value (const GValue *value,
+ GString *string);
+GtkCssValue * _gtk_css_style_compute_value (GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GType target_type,
+ GtkCssValue *specified,
+ GtkCssDependencies *dependencies);
G_END_DECLS
diff --git a/gtk/gtkcsstypedvalue.c b/gtk/gtkcsstypedvalue.c
index 5ce5effae5..aecee31d73 100644
--- a/gtk/gtkcsstypedvalue.c
+++ b/gtk/gtkcsstypedvalue.c
@@ -35,14 +35,16 @@ gtk_css_value_typed_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_typed_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_typed_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssCustomProperty *custom = GTK_CSS_CUSTOM_PROPERTY (_gtk_css_style_property_lookup_by_id (property_id));
- return _gtk_css_style_compute_value (context, custom->pspec->value_type, value, dependencies);
+ return _gtk_css_style_compute_value (provider, values, parent_values, custom->pspec->value_type, value, dependencies);
}
static gboolean
diff --git a/gtk/gtkcssvalue.c b/gtk/gtkcssvalue.c
index 0dcbe0c499..c5e5bdcfc1 100644
--- a/gtk/gtkcssvalue.c
+++ b/gtk/gtkcssvalue.c
@@ -19,6 +19,9 @@
#include "gtkcssvalueprivate.h"
+#include "gtkcsscomputedvaluesprivate.h"
+#include "gtkstyleproviderprivate.h"
+
struct _GtkCssValue {
GTK_CSS_VALUE_BASE
};
@@ -65,7 +68,9 @@ _gtk_css_value_unref (GtkCssValue *value)
* _gtk_css_value_compute:
* @value: the value to compute from
* @property_id: the ID of the property to compute
- * @context: the context to use for resolving
+ * @provider: Style provider for looking up extra information
+ * @values: values to compute for
+ * @parent_values: parent values to use for inherited values
* @dependencies: (out) (allow-none): Set to the dependencies of the
* computed values that indicate when this value needs to be
* recomputed and how.
@@ -79,21 +84,25 @@ _gtk_css_value_unref (GtkCssValue *value)
* Returns: the computed value
**/
GtkCssValue *
-_gtk_css_value_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+_gtk_css_value_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssDependencies fallback;
g_return_val_if_fail (value != NULL, NULL);
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+ g_return_val_if_fail (GTK_IS_STYLE_PROVIDER_PRIVATE (provider), NULL);
+ g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL);
+ g_return_val_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values), NULL);
if (dependencies == NULL)
dependencies = &fallback;
*dependencies = 0;
- return value->class->compute (value, property_id, context, dependencies);
+ return value->class->compute (value, property_id, provider, values, parent_values, dependencies);
}
gboolean
diff --git a/gtk/gtkcssvalueprivate.h b/gtk/gtkcssvalueprivate.h
index 35a0f7f794..1d2424e5f7 100644
--- a/gtk/gtkcssvalueprivate.h
+++ b/gtk/gtkcssvalueprivate.h
@@ -22,7 +22,6 @@
#include <glib-object.h>
#include "gtkcsstypesprivate.h"
-#include "gtktypes.h"
G_BEGIN_DECLS
@@ -43,7 +42,9 @@ struct _GtkCssValueClass {
GtkCssValue * (* compute) (GtkCssValue *value,
guint property_id,
- GtkStyleContext *context,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
GtkCssDependencies *dependencies);
gboolean (* equal) (const GtkCssValue *value1,
const GtkCssValue *value2);
@@ -66,7 +67,9 @@ void _gtk_css_value_unref (GtkCssValue
GtkCssValue *_gtk_css_value_compute (GtkCssValue *value,
guint property_id,
- GtkStyleContext *context,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
GtkCssDependencies *dependencies);
gboolean _gtk_css_value_equal (const GtkCssValue *value1,
const GtkCssValue *value2);
diff --git a/gtk/gtkgradient.c b/gtk/gtkgradient.c
index ba4e30340b..1586757c9b 100644
--- a/gtk/gtkgradient.c
+++ b/gtk/gtkgradient.c
@@ -17,9 +17,10 @@
#include "config.h"
#include "gtkgradient.h"
+#include "gtkcssrgbavalueprivate.h"
#include "gtkstylecontextprivate.h"
#include "gtkstyleproperties.h"
-#include "gtkintl.h"
+#include "gtkstylepropertiesprivate.h"
/**
* SECTION:gtkgradient
@@ -281,15 +282,19 @@ gtk_gradient_resolve (GtkGradient *gradient,
}
cairo_pattern_t *
-_gtk_gradient_resolve_full (GtkGradient *gradient,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+_gtk_gradient_resolve_full (GtkGradient *gradient,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
cairo_pattern_t *pattern;
guint i;
g_return_val_if_fail (gradient != NULL, NULL);
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+ g_return_val_if_fail (GTK_IS_STYLE_PROVIDER (provider), NULL);
+ g_return_val_if_fail (GTK_IS_CSS_COMPUTED_VALUES (values), NULL);
+ g_return_val_if_fail (parent_values == NULL || GTK_IS_CSS_COMPUTED_VALUES (parent_values), NULL);
g_return_val_if_fail (*dependencies == 0, NULL);
if (gradient->radius0 == 0 && gradient->radius1 == 0)
@@ -304,16 +309,28 @@ _gtk_gradient_resolve_full (GtkGradient *gradient,
for (i = 0; i < gradient->stops->len; i++)
{
ColorStop *stop;
+ GtkCssValue *val;
GdkRGBA rgba;
GtkCssDependencies stop_deps;
stop = &g_array_index (gradient->stops, ColorStop, i);
/* if color resolving fails, assume transparency */
- if (!_gtk_style_context_resolve_color (context, stop->color, &rgba, &stop_deps))
- rgba.red = rgba.green = rgba.blue = rgba.alpha = 0.0;
+ val = _gtk_symbolic_color_resolve_full (stop->color,
+ provider,
+ _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_COLOR),
+ GTK_CSS_DEPENDS_ON_COLOR,
+ &stop_deps);
+ if (val)
+ {
+ rgba = *_gtk_css_rgba_value_get_rgba (val);
+ *dependencies = _gtk_css_dependencies_union (*dependencies, stop_deps);
+ }
+ else
+ {
+ rgba.red = rgba.green = rgba.blue = rgba.alpha = 0.0;
+ }
- *dependencies = _gtk_css_dependencies_union (*dependencies, stop_deps);
cairo_pattern_add_color_stop_rgba (pattern, stop->offset,
rgba.red, rgba.green,
rgba.blue, rgba.alpha);
@@ -322,18 +339,6 @@ _gtk_gradient_resolve_full (GtkGradient *gradient,
return pattern;
}
-cairo_pattern_t *
-gtk_gradient_resolve_for_context (GtkGradient *gradient,
- GtkStyleContext *context)
-{
- GtkCssDependencies ignored = 0;
-
- g_return_val_if_fail (gradient != NULL, NULL);
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
-
- return _gtk_gradient_resolve_full (gradient, context, &ignored);
-}
-
static void
append_number (GString *str,
double d,
diff --git a/gtk/gtkstylecontext.c b/gtk/gtkstylecontext.c
index 99b2091741..ebaeb1bef1 100644
--- a/gtk/gtkstylecontext.c
+++ b/gtk/gtkstylecontext.c
@@ -697,14 +697,6 @@ gtk_style_context_set_cascade (GtkStyleContext *context,
gtk_style_context_cascade_changed (cascade, context);
}
-GtkStyleProviderPrivate *
-_gtk_style_context_get_style_provider (GtkStyleContext *context)
-{
- g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
-
- return GTK_STYLE_PROVIDER_PRIVATE (context->priv->cascade);
-}
-
static void
gtk_style_context_init (GtkStyleContext *style_context)
{
@@ -987,7 +979,10 @@ build_properties (GtkStyleContext *context,
&matcher,
lookup);
- _gtk_css_lookup_resolve (lookup, context, values);
+ _gtk_css_lookup_resolve (lookup,
+ GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
+ values,
+ priv->parent ? style_data_lookup (priv->parent)->store : NULL);
_gtk_css_lookup_free (lookup);
gtk_widget_path_free (path);
@@ -3146,9 +3141,10 @@ _gtk_style_context_validate (GtkStyleContext *context,
data = style_data_lookup (context);
_gtk_css_computed_values_create_animations (data->store,
+ priv->parent ? style_data_lookup (priv->parent)->store : NULL,
timestamp,
- current && gtk_style_context_should_create_transitions (context) ? current->store : NULL,
- context);
+ GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
+ current && gtk_style_context_should_create_transitions (context) ? current->store : NULL);
if (_gtk_css_computed_values_is_static (data->store))
change &= ~GTK_CSS_CHANGE_ANIMATE;
else
@@ -4584,3 +4580,21 @@ _gtk_style_context_get_attributes (AtkAttributeSet *attributes,
return attributes;
}
+
+cairo_pattern_t *
+gtk_gradient_resolve_for_context (GtkGradient *gradient,
+ GtkStyleContext *context)
+{
+ GtkStyleContextPrivate *priv = context->priv;
+ GtkCssDependencies ignored = 0;
+
+ g_return_val_if_fail (gradient != NULL, NULL);
+ g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
+
+ return _gtk_gradient_resolve_full (gradient,
+ GTK_STYLE_PROVIDER_PRIVATE (priv->cascade),
+ style_data_lookup (context)->store,
+ priv->parent ? style_data_lookup (priv->parent)->store : NULL,
+ &ignored);
+}
+
diff --git a/gtk/gtkstylecontextprivate.h b/gtk/gtkstylecontextprivate.h
index bd73dfc750..7987b713b9 100644
--- a/gtk/gtkstylecontextprivate.h
+++ b/gtk/gtkstylecontextprivate.h
@@ -58,9 +58,6 @@ void _gtk_style_context_get_cursor_color (GtkStyleContext
GdkRGBA *primary_color,
GdkRGBA *secondary_color);
-GtkStyleProviderPrivate *
- _gtk_style_context_get_style_provider (GtkStyleContext *context);
-
void _gtk_style_context_update_animating (GtkStyleContext *context);
G_END_DECLS
diff --git a/gtk/gtkstylepropertiesprivate.h b/gtk/gtkstylepropertiesprivate.h
index d459307cd7..2e1bd97af7 100644
--- a/gtk/gtkstylepropertiesprivate.h
+++ b/gtk/gtkstylepropertiesprivate.h
@@ -34,9 +34,11 @@ void _gtk_style_properties_set_property_by_property (GtkStylePropertie
GtkCssValue *value);
cairo_pattern_t *
- _gtk_gradient_resolve_full (GtkGradient *gradient,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies);
+ _gtk_gradient_resolve_full (GtkGradient *gradient,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies);
G_END_DECLS
diff --git a/gtk/gtksymboliccolor.c b/gtk/gtksymboliccolor.c
index 6a7b4c11fe..e68eb9155e 100644
--- a/gtk/gtksymboliccolor.c
+++ b/gtk/gtksymboliccolor.c
@@ -120,8 +120,10 @@ gtk_css_value_symbolic_free (GtkCssValue *value)
}
static GtkCssValue *
-gtk_css_value_symbolic_get_fallback (guint property_id,
- GtkStyleContext *context)
+gtk_css_value_symbolic_get_fallback (guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values)
{
static const GdkRGBA transparent = { 0, 0, 0, 0 };
@@ -142,7 +144,9 @@ gtk_css_value_symbolic_get_fallback (guint property_id,
case GTK_CSS_PROPERTY_OUTLINE_COLOR:
return _gtk_css_value_compute (_gtk_css_style_property_get_initial_value (_gtk_css_style_property_lookup_by_id (property_id)),
property_id,
- context,
+ provider,
+ values,
+ parent_values,
NULL);
default:
if (property_id < GTK_CSS_PROPERTY_N_PROPERTIES)
@@ -153,10 +157,12 @@ gtk_css_value_symbolic_get_fallback (guint property_id,
}
static GtkCssValue *
-gtk_css_value_symbolic_compute (GtkCssValue *value,
- guint property_id,
- GtkStyleContext *context,
- GtkCssDependencies *dependencies)
+gtk_css_value_symbolic_compute (GtkCssValue *value,
+ guint property_id,
+ GtkStyleProviderPrivate *provider,
+ GtkCssComputedValues *values,
+ GtkCssComputedValues *parent_values,
+ GtkCssDependencies *dependencies)
{
GtkCssValue *resolved, *current;
GtkCssDependencies current_deps;
@@ -167,11 +173,9 @@ gtk_css_value_symbolic_compute (GtkCssValue *value,
*/
if (property_id == GTK_CSS_PROPERTY_COLOR)
{
- GtkStyleContext *parent = gtk_style_context_get_parent (context);
-
- if (parent)
+ if (parent_values)
{
- current = _gtk_style_context_peek_property (parent, GTK_CSS_PROPERTY_COLOR);
+ current = _gtk_css_computed_values_get_value (parent_values, GTK_CSS_PROPERTY_COLOR);
current_deps = GTK_CSS_EQUALS_PARENT;
}
else
@@ -182,14 +186,18 @@ gtk_css_value_symbolic_compute (GtkCssValue *value,
}
else
{
- current = _gtk_style_context_peek_property (context, GTK_CSS_PROPERTY_COLOR);
+ current = _gtk_css_computed_values_get_value (values, GTK_CSS_PROPERTY_COLOR);
current_deps = GTK_CSS_DEPENDS_ON_COLOR;
}
- resolved = _gtk_style_context_resolve_color_value (context, current, current_deps, value, dependencies);
+ resolved = _gtk_symbolic_color_resolve_full ((GtkSymbolicColor *) value,
+ provider,
+ current,
+ current_deps,
+ dependencies);
if (resolved == NULL)
- return gtk_css_value_symbolic_get_fallback (property_id, context);
+ return gtk_css_value_symbolic_get_fallback (property_id, provider, values, parent_values);
return resolved;
}