[gtk+/wip/watson/progress-tracker: 48/60] scrolledwindow: port indicator fade to progress tracker



commit 83c4012f758a1e375d0461416dccb7a821f27d06
Author: Matt Watson <mattdangerw gmail com>
Date:   Mon Mar 28 14:54:34 2016 -0700

    scrolledwindow: port indicator fade to progress tracker

 gtk/gtkscrolledwindow.c |   51 ++++++++++++++--------------------------------
 1 files changed, 16 insertions(+), 35 deletions(-)
---
diff --git a/gtk/gtkscrolledwindow.c b/gtk/gtkscrolledwindow.c
index 8a98490..26364e3 100644
--- a/gtk/gtkscrolledwindow.c
+++ b/gtk/gtkscrolledwindow.c
@@ -45,6 +45,7 @@
 #include "gtkkineticscrolling.h"
 #include "a11y/gtkscrolledwindowaccessible.h"
 #include "gtkstylecontextprivate.h"
+#include "gtkprogresstrackerprivate.h"
 
 #include <math.h>
 
@@ -193,8 +194,7 @@ typedef struct
   gdouble    current_pos;
   gdouble    source_pos;
   gdouble    target_pos;
-  gint64     start_time;
-  gint64     end_time;
+  GtkProgressTracker tracker;
   guint      tick_id;
   guint      over_timeout_id;
 } Indicator;
@@ -4002,40 +4002,22 @@ indicator_set_fade (Indicator *indicator,
     }
 }
 
-static double
-ease_out_cubic (double t)
-{
-  double p = t - 1;
-  return p * p * p + 1;
-}
-
-static void
-indicator_fade_step (Indicator *indicator,
-                     gint64     now)
-{
-  gdouble t;
-
-  if (now < indicator->end_time)
-    t = (now - indicator->start_time) / (gdouble) (indicator->end_time - indicator->start_time);
-  else
-    t = 1.0;
-  t = ease_out_cubic (t);
-
-  indicator_set_fade (indicator,
-                      indicator->source_pos + (t * (indicator->target_pos - indicator->source_pos)));
-}
-
 static gboolean
 indicator_fade_cb (GtkWidget     *widget,
                    GdkFrameClock *frame_clock,
                    gpointer       user_data)
 {
   Indicator *indicator = user_data;
-  gint64 now;
+  gdouble t;
+
+  gtk_progress_tracker_next_frame (&indicator->tracker,
+                                   gdk_frame_clock_get_frame_time (frame_clock));
+  t = gtk_progress_tracker_get_ease_out_cubic (&indicator->tracker, FALSE);
 
-  now = gdk_frame_clock_get_frame_time (frame_clock);
-  indicator_fade_step (indicator, now);
-  if (indicator->current_pos == indicator->target_pos)
+  indicator_set_fade (indicator,
+                      indicator->source_pos + (t * (indicator->target_pos - indicator->source_pos)));
+
+  if (gtk_progress_tracker_get_state (&indicator->tracker) == GTK_PROGRESS_STATE_AFTER)
     {
       indicator->tick_id = 0;
       return FALSE;
@@ -4065,12 +4047,9 @@ indicator_start_fade (Indicator *indicator,
   if (gtk_widget_get_mapped (indicator->scrollbar) && animations_enabled)
     {
       indicator->source_pos = indicator->current_pos;
-      indicator->start_time = gdk_frame_clock_get_frame_time (gtk_widget_get_frame_clock 
(indicator->scrollbar));
-      indicator->end_time = indicator->start_time + INDICATOR_FADE_OUT_DURATION * 1000;
+      gtk_progress_tracker_start (&indicator->tracker, INDICATOR_FADE_OUT_DURATION * 1000, 0, 1.0);
       if (indicator->tick_id == 0)
         indicator->tick_id = gtk_widget_add_tick_callback (indicator->scrollbar, indicator_fade_cb, 
indicator, NULL);
-
-      indicator_fade_step (indicator, indicator->start_time);
     }
   else
     indicator_set_fade (indicator, target);
@@ -4093,8 +4072,9 @@ indicator_stop_fade (Indicator *indicator)
     }
 
   gdk_window_hide (indicator->window);
+  gtk_progress_tracker_finish (&indicator->tracker);
   indicator->current_pos = indicator->source_pos = indicator->target_pos = 0;
-  indicator->start_time = indicator->end_time = indicator->last_scroll_time = 0;
+  indicator->last_scroll_time = 0;
 }
 
 static gboolean
@@ -4297,8 +4277,9 @@ indicator_reset (Indicator *indicator)
 
   indicator->scrollbar = NULL;
   indicator->over = FALSE;
+  gtk_progress_tracker_finish (&indicator->tracker);
   indicator->current_pos = indicator->source_pos = indicator->target_pos = 0;
-  indicator->start_time = indicator->end_time = indicator->last_scroll_time = 0;
+  indicator->last_scroll_time = 0;
 }
 
 static void


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]