[gnome-shell] st: Move slow-down-factor into settings



commit 12b8fb15b10fc74ad5b26d72008b2b89e80f0a70
Author: Florian Müllner <fmuellner gnome org>
Date:   Thu Jul 25 12:50:26 2019 +0200

    st: Move slow-down-factor into settings
    
    Now that we have a Settings singleton, we have a better place for the
    slow-down-factor than an awkward extern variable.
    
    https://gitlab.gnome.org/GNOME/gnome-shell/merge_requests/656

 js/ui/environment.js   |  8 +++++++-
 js/ui/lookingGlass.js  | 12 ++++++++----
 js/ui/tweener.js       |  5 +++--
 src/st/st-scroll-bar.c | 10 +++++++---
 src/st/st-settings.c   | 36 +++++++++++++++++++++++++++++++++++-
 src/st/st-theme-node.c | 12 ++++++++----
 src/st/st-widget.c     | 26 --------------------------
 src/st/st-widget.h     |  2 --
 8 files changed, 68 insertions(+), 43 deletions(-)
---
diff --git a/js/ui/environment.js b/js/ui/environment.js
index 61524facd..ce0c875fe 100644
--- a/js/ui/environment.js
+++ b/js/ui/environment.js
@@ -107,6 +107,12 @@ function init() {
         }
     });
 
+    St.set_slow_down_factor = function(factor) {
+        let { stack } = new Error();
+        log(`St.set_slow_down_factor() is deprecated, use St.Settings.slow_down_factor\n${stack}`);
+        St.Settings.get().slow_down_factor = factor;
+    };
+
     let origToString = Object.prototype.toString;
     Object.prototype.toString = function() {
         let base = origToString.call(this);
@@ -129,7 +135,7 @@ function init() {
     if (slowdownEnv) {
         let factor = parseFloat(slowdownEnv);
         if (!isNaN(factor) && factor > 0.0)
-            St.set_slow_down_factor(factor);
+            St.Settings.get().slow_down_factor = factor;
     }
 
     // OK, now things are initialized enough that we can import shell JS
diff --git a/js/ui/lookingGlass.js b/js/ui/lookingGlass.js
index ffd49364f..f33390d34 100644
--- a/js/ui/lookingGlass.js
+++ b/js/ui/lookingGlass.js
@@ -949,9 +949,10 @@ var LookingGlass = class LookingGlass {
         if (this._completionActor.visible) {
             this._completionActor.height = naturalHeight;
         } else {
+            let settings = St.Settings.get();
             this._completionActor.show();
             Tweener.removeTweens(this._completionActor);
-            Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION 
/ St.get_slow_down_factor(),
+            Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION 
/ settings.slow_down_factor,
                                                       transition: 'easeOutQuad',
                                                       height: naturalHeight,
                                                       opacity: 255
@@ -961,8 +962,9 @@ var LookingGlass = class LookingGlass {
 
     _hideCompletions() {
         if (this._completionActor) {
+            let settings = St.Settings.get();
             Tweener.removeTweens(this._completionActor);
-            Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION 
/ St.get_slow_down_factor(),
+            Tweener.addTween(this._completionActor, { time: AUTO_COMPLETE_SHOW_COMPLETION_ANIMATION_DURATION 
/ settings.slow_down_factor,
                                                       transition: 'easeOutQuad',
                                                       height: 0,
                                                       opacity: 0,
@@ -1082,7 +1084,8 @@ var LookingGlass = class LookingGlass {
 
         // We inverse compensate for the slow-down so you can change the factor
         // through LookingGlass without long waits.
-        Tweener.addTween(this.actor, { time: 0.5 / St.get_slow_down_factor(),
+        let settings = St.Settings.get();
+        Tweener.addTween(this.actor, { time: 0.5 / settings.slow_down_factor,
                                        transition: 'easeOutQuad',
                                        y: this._targetY
                                      });
@@ -1101,7 +1104,8 @@ var LookingGlass = class LookingGlass {
 
         Main.popModal(this._entry);
 
-        Tweener.addTween(this.actor, { time: Math.min(0.5 / St.get_slow_down_factor(), 0.5),
+        let settings = St.Settings.get();
+        Tweener.addTween(this.actor, { time: Math.min(0.5 / settings.slow_down_factor, 0.5),
                                        transition: 'easeOutQuad',
                                        y: this._hiddenY,
                                        onComplete: () => {
diff --git a/js/ui/tweener.js b/js/ui/tweener.js
index 28a96fd8b..d9fab4f6a 100644
--- a/js/ui/tweener.js
+++ b/js/ui/tweener.js
@@ -211,8 +211,9 @@ var ClutterFrameTicker = class {
     }
 
     start() {
-        if (St.get_slow_down_factor() > 0)
-            Tweener.setTimeScale(1 / St.get_slow_down_factor());
+        let settings = St.Settings.get();
+        if (settings.slow_down_factor > 0)
+            Tweener.setTimeScale(1 / settings.slow_down_factor);
         this._timeline.start();
         global.begin_work();
     }
diff --git a/src/st/st-scroll-bar.c b/src/st/st-scroll-bar.c
index 9c55e5488..9d0ca819f 100644
--- a/src/st/st-scroll-bar.c
+++ b/src/st/st-scroll-bar.c
@@ -40,6 +40,7 @@
 #include "st-enum-types.h"
 #include "st-private.h"
 #include "st-button.h"
+#include "st-settings.h"
 
 #define PAGING_INITIAL_REPEAT_TIMEOUT 500
 #define PAGING_SUBSEQUENT_REPEAT_TIMEOUT 200
@@ -96,8 +97,6 @@ enum
 
 static guint signals[LAST_SIGNAL] = { 0, };
 
-extern gfloat st_slow_down_factor;
-
 static gboolean
 handle_button_press_event_cb (ClutterActor       *actor,
                               ClutterButtonEvent *event,
@@ -683,9 +682,11 @@ static gboolean
 trough_paging_cb (StScrollBar *self)
 {
   StScrollBarPrivate *priv = st_scroll_bar_get_instance_private (self);
+  StSettings *settings;
   gfloat handle_pos, event_pos, tx, ty;
   gdouble value, new_value;
   gdouble page_increment;
+  gdouble slow_down_factor;
   gboolean ret;
 
   gulong mode;
@@ -776,13 +777,16 @@ trough_paging_cb (StScrollBar *self)
       clutter_timeline_stop (CLUTTER_TIMELINE (priv->paging_animation));
     }
 
+  settings = st_settings_get ();
+  g_object_get (settings, "slow-down-factor", &slow_down_factor, NULL);
+
   /* FIXME: Creating a new transition for each scroll is probably not the best
   * idea, but it's a lot less involved than extending the current animation */
   priv->paging_animation = g_object_new (CLUTTER_TYPE_PROPERTY_TRANSITION,
                                          "animatable", priv->adjustment,
                                          "property-name", "value",
                                         "interval", clutter_interval_new (G_TYPE_DOUBLE, value, new_value),
-                                         "duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * 
st_slow_down_factor),
+                                         "duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * 
slow_down_factor),
                                          "progress-mode", mode,
                                          NULL);
   g_signal_connect (priv->paging_animation, "stopped",
diff --git a/src/st/st-settings.c b/src/st/st-settings.c
index a90e9f1b1..66f390873 100644
--- a/src/st/st-settings.c
+++ b/src/st/st-settings.c
@@ -21,6 +21,7 @@
 #include "config.h"
 #endif
 
+#include <math.h>
 #include <gio/gio.h>
 
 #include "st-private.h"
@@ -41,6 +42,7 @@ enum {
   PROP_GTK_THEME,
   PROP_GTK_ICON_THEME,
   PROP_MAGNIFIER_ACTIVE,
+  PROP_SLOW_DOWN_FACTOR,
   N_PROPS
 };
 
@@ -59,10 +61,24 @@ struct _StSettings
   gboolean primary_paste;
   gboolean magnifier_active;
   gint drag_threshold;
+  double slow_down_factor;
 };
 
 G_DEFINE_TYPE (StSettings, st_settings, G_TYPE_OBJECT)
 
+#define EPSILON (1e-10)
+
+static void
+st_settings_set_slow_down_factor (StSettings *settings,
+                                  double      factor)
+{
+  if (fabs (settings->slow_down_factor - factor) < EPSILON)
+    return;
+
+  settings->slow_down_factor = factor;
+  g_object_notify_by_pspec (G_OBJECT (settings), props[PROP_SLOW_DOWN_FACTOR]);
+}
+
 static void
 st_settings_finalize (GObject *object)
 {
@@ -82,7 +98,16 @@ st_settings_set_property (GObject      *object,
                           const GValue *value,
                           GParamSpec   *pspec)
 {
-  G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+  StSettings *settings = ST_SETTINGS (object);
+
+  switch (prop_id)
+    {
+    case PROP_SLOW_DOWN_FACTOR:
+      st_settings_set_slow_down_factor (settings, g_value_get_double (value));
+      break;
+    default:
+      G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
+    }
 }
 
 static void
@@ -113,6 +138,9 @@ st_settings_get_property (GObject    *object,
     case PROP_MAGNIFIER_ACTIVE:
       g_value_set_boolean (value, settings->magnifier_active);
       break;
+    case PROP_SLOW_DOWN_FACTOR:
+      g_value_set_double (value, settings->slow_down_factor);
+      break;
     default:
       G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
     }
@@ -157,6 +185,11 @@ st_settings_class_init (StSettingsClass *klass)
                                                       "Weather the a11y magnifier is active",
                                                       FALSE,
                                                       ST_PARAM_READABLE);
+  props[PROP_SLOW_DOWN_FACTOR] = g_param_spec_double("slow-down-factor",
+                                                      "Slow down factor",
+                                                      "Factor applied to all animation durations",
+                                                      EPSILON, G_MAXDOUBLE, 1.0,
+                                                      ST_PARAM_READWRITE);
 
   g_object_class_install_properties (object_class, N_PROPS, props);
 }
@@ -242,6 +275,7 @@ st_settings_init (StSettings *settings)
                                                  KEY_DRAG_THRESHOLD);
   settings->magnifier_active = g_settings_get_boolean (settings->a11y_settings,
                                                        KEY_MAGNIFIER_ACTIVE);
+  settings->slow_down_factor = 1.;
 }
 
 /**
diff --git a/src/st/st-theme-node.c b/src/st/st-theme-node.c
index 8e910f831..1261e9257 100644
--- a/src/st/st-theme-node.c
+++ b/src/st/st-theme-node.c
@@ -26,6 +26,7 @@
 #include <stdlib.h>
 #include <string.h>
 
+#include "st-settings.h"
 #include "st-theme-private.h"
 #include "st-theme-context.h"
 #include "st-theme-node-private.h"
@@ -39,8 +40,6 @@ static const ClutterColor DEFAULT_SUCCESS_COLOR = { 0x4e, 0x9a, 0x06, 0xff };
 static const ClutterColor DEFAULT_WARNING_COLOR = { 0xf5, 0x79, 0x3e, 0xff };
 static const ClutterColor DEFAULT_ERROR_COLOR = { 0xcc, 0x00, 0x00, 0xff };
 
-extern gfloat st_slow_down_factor;
-
 G_DEFINE_TYPE (StThemeNode, st_theme_node, G_TYPE_OBJECT)
 
 static void
@@ -2348,18 +2347,23 @@ st_theme_node_get_margin (StThemeNode *node,
 int
 st_theme_node_get_transition_duration (StThemeNode *node)
 {
+  StSettings *settings;
   gdouble value = 0.0;
+  gdouble factor;
 
   g_return_val_if_fail (ST_IS_THEME_NODE (node), 0);
 
+  settings = st_settings_get ();
+  g_object_get (settings, "slow-down-factor", &factor, NULL);
+
   if (node->transition_duration > -1)
-    return st_slow_down_factor * node->transition_duration;
+    return factor * node->transition_duration;
 
   st_theme_node_lookup_time (node, "transition-duration", FALSE, &value);
 
   node->transition_duration = (int)value;
 
-  return st_slow_down_factor * node->transition_duration;
+  return factor * node->transition_duration;
 }
 
 StIconStyle
diff --git a/src/st/st-widget.c b/src/st/st-widget.c
index 5fa676dca..1f7b99d23 100644
--- a/src/st/st-widget.c
+++ b/src/st/st-widget.c
@@ -133,8 +133,6 @@ enum
 
 static guint signals[LAST_SIGNAL] = { 0, };
 
-gfloat st_slow_down_factor = 1.0;
-
 G_DEFINE_TYPE_WITH_PRIVATE (StWidget, st_widget, CLUTTER_TYPE_ACTOR);
 #define ST_WIDGET_PRIVATE(w) ((StWidgetPrivate *)st_widget_get_instance_private (w))
 
@@ -2449,30 +2447,6 @@ st_describe_actor (ClutterActor *actor)
   return g_string_free (desc, FALSE);
 }
 
-/**
- * st_set_slow_down_factor:
- * @factor: new slow-down factor
- *
- * Set a global factor applied to all animation durations
- */
-void
-st_set_slow_down_factor (gfloat factor)
-{
-  st_slow_down_factor = factor;
-}
-
-/**
- * st_get_slow_down_factor:
- *
- * Returns: the global factor applied to all animation durations
- */
-gfloat
-st_get_slow_down_factor (void)
-{
-  return st_slow_down_factor;
-}
-
-
 /**
  * st_widget_get_label_actor:
  * @widget: a #StWidget
diff --git a/src/st/st-widget.h b/src/st/st-widget.h
index 7c76c5136..d6e3ca2bf 100644
--- a/src/st/st-widget.h
+++ b/src/st/st-widget.h
@@ -143,8 +143,6 @@ gboolean              st_widget_get_resource_scale        (StWidget        *widg
 
 /* debug methods */
 char  *st_describe_actor       (ClutterActor *actor);
-void   st_set_slow_down_factor (gfloat factor);
-gfloat st_get_slow_down_factor (void);
 
 /* accessibility methods */
 void                  st_widget_set_accessible_role      (StWidget    *widget,


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