[gtk/wip/baedert/for-master] csstransiton: Save finished state
- From: Timm Bäder <baedert src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gtk/wip/baedert/for-master] csstransiton: Save finished state
- Date: Wed, 6 May 2020 09:50:02 +0000 (UTC)
commit 798c39997ec20079ed8799882145c21871aae8e5
Author: Timm Bäder <mail baedert org>
Date: Wed May 6 11:37:51 2020 +0200
csstransiton: Save finished state
Once a transtion is finished it can't change to unfinished again, so we
don't have to consult the progress tracker all the time.
gtk/gtkcsstransition.c | 10 +++++++---
gtk/gtkcsstransitionprivate.h | 1 +
2 files changed, 8 insertions(+), 3 deletions(-)
---
diff --git a/gtk/gtkcsstransition.c b/gtk/gtkcsstransition.c
index 23478b618b..62731a513d 100644
--- a/gtk/gtkcsstransition.c
+++ b/gtk/gtkcsstransition.c
@@ -42,6 +42,7 @@ gtk_css_transition_advance (GtkStyleAnimation *style_animation,
gtk_progress_tracker_init_copy (&source->tracker, &transition->tracker);
gtk_progress_tracker_advance_frame (&transition->tracker, timestamp);
+ transition->finished = gtk_progress_tracker_get_state (&transition->tracker) == GTK_PROGRESS_STATE_AFTER;
return GTK_STYLE_ANIMATION (transition);
}
@@ -55,8 +56,10 @@ gtk_css_transition_apply_values (GtkStyleAnimation *style_animation,
double progress;
GtkProgressState state;
- end = gtk_css_animated_style_get_intrinsic_value (style, transition->property);
+ if (transition->finished)
+ return;
+ end = gtk_css_animated_style_get_intrinsic_value (style, transition->property);
state = gtk_progress_tracker_get_state (&transition->tracker);
if (state == GTK_PROGRESS_STATE_BEFORE)
@@ -85,7 +88,7 @@ gtk_css_transition_is_finished (GtkStyleAnimation *animation)
{
GtkCssTransition *transition = GTK_CSS_TRANSITION (animation);
- return gtk_progress_tracker_get_state (&transition->tracker) == GTK_PROGRESS_STATE_AFTER;
+ return transition->finished;
}
static gboolean
@@ -93,7 +96,7 @@ gtk_css_transition_is_static (GtkStyleAnimation *animation)
{
GtkCssTransition *transition = GTK_CSS_TRANSITION (animation);
- return gtk_progress_tracker_get_state (&transition->tracker) == GTK_PROGRESS_STATE_AFTER;
+ return transition->finished;
}
static void
@@ -146,6 +149,7 @@ _gtk_css_transition_new (guint property,
transition->ease = _gtk_css_value_ref (ease);
gtk_progress_tracker_start (&transition->tracker, duration_us, delay_us, 1.0);
gtk_progress_tracker_advance_frame (&transition->tracker, timestamp);
+ transition->finished = gtk_progress_tracker_get_state (&transition->tracker) == GTK_PROGRESS_STATE_AFTER;
return GTK_STYLE_ANIMATION (transition);
}
diff --git a/gtk/gtkcsstransitionprivate.h b/gtk/gtkcsstransitionprivate.h
index 822a8246d9..6f722023a1 100644
--- a/gtk/gtkcsstransitionprivate.h
+++ b/gtk/gtkcsstransitionprivate.h
@@ -43,6 +43,7 @@ struct _GtkCssTransition
GtkCssValue *start;
GtkCssValue *ease;
GtkProgressTracker tracker;
+ guint finished;
};
struct _GtkCssTransitionClass
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]