[gtk+/wip/watson/progress-tracker: 1/2] progresstracker: add GTK_SLOWDOWN environment variable



commit 18b24fc9992ffd54c0a4dceded0877e8741b5361
Author: Matt Watson <mattdangerw gmail com>
Date:   Mon Mar 14 03:38:23 2016 -0700

    progresstracker: add GTK_SLOWDOWN environment variable
    
    As we consolidate widgets to use progress tracker, this will allow
    us to control the speed of all animations in a centralized place

 gtk/gtkmain.c            |    8 ++++++++
 gtk/gtkprivate.h         |    4 ++++
 gtk/gtkprogresstracker.c |   20 +++++++++++++++++++-
 3 files changed, 31 insertions(+), 1 deletions(-)
---
diff --git a/gtk/gtkmain.c b/gtk/gtkmain.c
index f1d4b37..f3d35eb 100644
--- a/gtk/gtkmain.c
+++ b/gtk/gtkmain.c
@@ -636,6 +636,7 @@ do_pre_parse_initialization (int    *argc,
                              char ***argv)
 {
   const gchar *env_string;
+  double slowdown;
   
   if (pre_initialized)
     return;
@@ -673,6 +674,13 @@ do_pre_parse_initialization (int    *argc,
 
       g_string_append (gtk_modules_string, env_string);
     }
+
+  env_string = g_getenv ("GTK_SLOWDOWN");
+  if (env_string)
+    {
+      slowdown = g_ascii_strtod (env_string, NULL);
+      _gtk_set_slowdown (slowdown);
+    }
 }
 
 static void
diff --git a/gtk/gtkprivate.h b/gtk/gtkprivate.h
index cd48558..7602394 100644
--- a/gtk/gtkprivate.h
+++ b/gtk/gtkprivate.h
@@ -91,6 +91,10 @@ gboolean        _gtk_propagate_captured_event  (GtkWidget       *widget,
                                                 GdkEvent        *event,
                                                 GtkWidget       *topmost);
 
+
+gdouble _gtk_get_slowdown ();
+void    _gtk_set_slowdown (gdouble slowdown_factor);
+
 #ifdef G_OS_WIN32
 void _gtk_load_dll_with_libgtk3_manifest (const char *dllname);
 #endif
diff --git a/gtk/gtkprogresstracker.c b/gtk/gtkprogresstracker.c
index e39824c..fdf1140 100644
--- a/gtk/gtkprogresstracker.c
+++ b/gtk/gtkprogresstracker.c
@@ -18,6 +18,7 @@
  */
 
 #include "gtkprogresstrackerprivate.h"
+#include "gtkprivate.h"
 #include "gtkcsseasevalueprivate.h"
 
 #include <math.h>
@@ -29,8 +30,25 @@
  *
  * Progress tracker will handle translating frame clock timestamps to a
  * fractional progress value for interpolating between animation targets.
+ *
+ * Progress tracker will use the GTK_SLOWDOWN environment variable to control
+ * the speed of animations. This can be useful for debugging.
  */
 
+static gdouble gtk_slowdown = 1.0;
+
+void
+_gtk_set_slowdown (gdouble factor)
+{
+  gtk_slowdown = factor;
+}
+
+gdouble
+_gtk_get_slowdown (gdouble factor)
+{
+  return gtk_slowdown;
+}
+
 /**
  * gtk_progress_tracker_start:
  * @tracker: The progress tracker
@@ -94,7 +112,7 @@ gtk_progress_tracker_next_frame (GtkProgressTracker *tracker,
       return;
     }
 
-  delta = (frame_time - tracker->last_frame_time) / (gdouble) tracker->duration;
+  delta = (frame_time - tracker->last_frame_time) / gtk_slowdown / tracker->duration;
   tracker->last_frame_time = frame_time;
   tracker->iteration += delta;
 }


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