diff options
author | Benjamin Otte <otte@redhat.com> | 2012-04-03 15:33:00 +0200 |
---|---|---|
committer | Benjamin Otte <otte@redhat.com> | 2012-04-17 08:59:18 +0200 |
commit | c366b5b8b72cc9d87be4e153c2dfc7eb5551c46a (patch) | |
tree | 34bdca830366c43c37c67008ae63fce18cd1d190 /gtk/gtkcssshadowsvalue.c | |
parent | ac6d61f6bb100022ba8db9c0d6896789f7296c3d (diff) | |
download | gtk+-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.c | 42 |
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) { |