X-Git-Url: http://pileus.org/git/?a=blobdiff_plain;f=gtk%2Fgtkcsstransition.c;h=08db4285fc9638b1b1b6ad89f4d04ec0840316b9;hb=45ad8a06ad511ad95a74172172b9fe459bc666ad;hp=79b803d93dd2053c27a17866f4db5b3d0b2c4b55;hpb=9c57b96f56829be4454d144a25750100745cb675;p=~andy%2Fgtk diff --git a/gtk/gtkcsstransition.c b/gtk/gtkcsstransition.c index 79b803d93..08db4285f 100644 --- a/gtk/gtkcsstransition.c +++ b/gtk/gtkcsstransition.c @@ -25,36 +25,39 @@ G_DEFINE_TYPE (GtkCssTransition, _gtk_css_transition, GTK_TYPE_STYLE_ANIMATION) -static GtkBitmask * +static void gtk_css_transition_set_values (GtkStyleAnimation *animation, - GtkBitmask *changed, gint64 for_time_us, GtkCssComputedValues *values) { GtkCssTransition *transition = GTK_CSS_TRANSITION (animation); - GtkCssValue *value; + GtkCssValue *value, *end; double progress; + end = _gtk_css_computed_values_get_intrinsic_value (values, transition->property); + if (transition->start_time >= for_time_us) value = _gtk_css_value_ref (transition->start); - else if (transition->end_time <= for_time_us) - value = _gtk_css_value_ref (transition->end); - else + else if (transition->end_time > for_time_us) { progress = (double) (for_time_us - transition->start_time) / (transition->end_time - transition->start_time); progress = _gtk_css_ease_value_transform (transition->ease, progress); value = _gtk_css_value_transition (transition->start, - transition->end, + end, + transition->property, progress); if (value == NULL) - value = _gtk_css_value_ref (transition->end); + value = _gtk_css_value_ref (end); } + else + value = NULL; - _gtk_css_computed_values_set_value (values, transition->property, value, NULL); - _gtk_css_value_unref (value); - - return _gtk_bitmask_set (changed, transition->property, TRUE); + if (value) + { + _gtk_css_computed_values_set_animated_value (values, transition->property, value); + _gtk_css_value_unref (value); + } } static gboolean @@ -66,13 +69,21 @@ gtk_css_transition_is_finished (GtkStyleAnimation *animation, return at_time_us >= transition->end_time; } +static gboolean +gtk_css_transition_is_static (GtkStyleAnimation *animation, + gint64 at_time_us) +{ + GtkCssTransition *transition = GTK_CSS_TRANSITION (animation); + + return at_time_us >= transition->end_time; +} + static void gtk_css_transition_finalize (GObject *object) { GtkCssTransition *transition = GTK_CSS_TRANSITION (object); _gtk_css_value_unref (transition->start); - _gtk_css_value_unref (transition->end); _gtk_css_value_unref (transition->ease); G_OBJECT_CLASS (_gtk_css_transition_parent_class)->finalize (object); @@ -88,6 +99,7 @@ _gtk_css_transition_class_init (GtkCssTransitionClass *klass) animation_class->set_values = gtk_css_transition_set_values; animation_class->is_finished = gtk_css_transition_is_finished; + animation_class->is_static = gtk_css_transition_is_static; } static void @@ -98,7 +110,6 @@ _gtk_css_transition_init (GtkCssTransition *transition) GtkStyleAnimation * _gtk_css_transition_new (guint property, GtkCssValue *start, - GtkCssValue *end, GtkCssValue *ease, gint64 start_time_us, gint64 end_time_us) @@ -106,7 +117,6 @@ _gtk_css_transition_new (guint property, GtkCssTransition *transition; g_return_val_if_fail (start != NULL, NULL); - g_return_val_if_fail (end != NULL, NULL); g_return_val_if_fail (ease != NULL, NULL); g_return_val_if_fail (start_time_us <= end_time_us, NULL); @@ -114,7 +124,6 @@ _gtk_css_transition_new (guint property, transition->property = property; transition->start = _gtk_css_value_ref (start); - transition->end = _gtk_css_value_ref (end); transition->ease = _gtk_css_value_ref (ease); transition->start_time = start_time_us; transition->end_time = end_time_us;