summaryrefslogtreecommitdiff
path: root/gtk/gtkcssshadowsvalue.c
diff options
context:
space:
mode:
authorBenjamin Otte <otte@redhat.com>2012-04-03 15:33:00 +0200
committerBenjamin Otte <otte@redhat.com>2012-04-17 08:59:18 +0200
commitc366b5b8b72cc9d87be4e153c2dfc7eb5551c46a (patch)
tree34bdca830366c43c37c67008ae63fce18cd1d190 /gtk/gtkcssshadowsvalue.c
parentac6d61f6bb100022ba8db9c0d6896789f7296c3d (diff)
downloadgtk+-c366b5b8b72cc9d87be4e153c2dfc7eb5551c46a.tar.gz
shadow: Add equal and transition support
... and enable transitions for the shadow properties.
Diffstat (limited to 'gtk/gtkcssshadowsvalue.c')
-rw-r--r--gtk/gtkcssshadowsvalue.c42
1 files changed, 40 insertions, 2 deletions
diff --git a/gtk/gtkcssshadowsvalue.c b/gtk/gtkcssshadowsvalue.c
index 41b521fb6d..d4f7655b52 100644
--- a/gtk/gtkcssshadowsvalue.c
+++ b/gtk/gtkcssshadowsvalue.c
@@ -31,6 +31,9 @@ struct _GtkCssValue {
GtkCssValue *values[1];
};
+static GtkCssValue * gtk_css_shadows_value_new (GtkCssValue **values,
+ guint len);
+
static void
gtk_css_value_shadows_free (GtkCssValue *value)
{
@@ -69,7 +72,42 @@ gtk_css_value_shadows_transition (GtkCssValue *start,
GtkCssValue *end,
double progress)
{
- return NULL;
+ GtkCssValue *result;
+ guint i;
+
+ /* catches the important case of 2 none values */
+ if (start == end)
+ return _gtk_css_value_ref (start);
+
+ if (start->len > end->len)
+ result = gtk_css_shadows_value_new (start->values, start->len);
+ else
+ result = gtk_css_shadows_value_new (end->values, end->len);
+
+ for (i = 0; i < MIN (start->len, end->len); i++)
+ {
+ result->values[i] = _gtk_css_value_transition (start->values[i], end->values[i], progress);
+ }
+ if (start->len > end->len)
+ {
+ for (; i < result->len; i++)
+ {
+ GtkCssValue *fill = _gtk_css_shadow_value_new_for_transition (start->values[i]);
+ result->values[i] = _gtk_css_value_transition (start->values[i], fill, progress);
+ _gtk_css_value_unref (fill);
+ }
+ }
+ else
+ {
+ for (; i < result->len; i++)
+ {
+ GtkCssValue *fill = _gtk_css_shadow_value_new_for_transition (end->values[i]);
+ result->values[i] = _gtk_css_value_transition (fill, end->values[i], progress);
+ _gtk_css_value_unref (fill);
+ }
+ }
+
+ return result;
}
static void
@@ -107,7 +145,7 @@ _gtk_css_shadows_value_new_none (void)
return _gtk_css_value_ref (&none_singleton);
}
-GtkCssValue *
+static GtkCssValue *
gtk_css_shadows_value_new (GtkCssValue **values,
guint len)
{