Move Tweener.slowDownFactor into St
It has probably crossed the line to evil by a mile or so, but here it is: a Tweener.slowDownFactor replacement used by all animations without exception. While at it, update Tweener to use the new setTimeScale() upstream function instead of adjusting the timeline directly. https://bugzilla.gnome.org/show_bug.cgi?id=622249
This commit is contained in:
parent
4b1fea2fa4
commit
35764fa09e
@ -1,6 +1,7 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;;
|
const Clutter = imports.gi.Clutter;;
|
||||||
|
const GLib = imports.gi.GLib;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
const St = imports.gi.St;
|
const St = imports.gi.St;
|
||||||
const Gettext_gtk20 = imports.gettext.domain('gtk20');
|
const Gettext_gtk20 = imports.gettext.domain('gtk20');
|
||||||
@ -68,6 +69,13 @@ function init() {
|
|||||||
St.Widget.set_default_direction(St.TextDirection.RTL);
|
St.Widget.set_default_direction(St.TextDirection.RTL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
|
||||||
|
if (slowdownEnv) {
|
||||||
|
let factor = parseFloat(slowdownEnv);
|
||||||
|
if (!isNaN(factor) && factor > 0.0)
|
||||||
|
St.set_slow_down_factor(factor);
|
||||||
|
}
|
||||||
|
|
||||||
_patchContainerClass(St.BoxLayout);
|
_patchContainerClass(St.BoxLayout);
|
||||||
_patchContainerClass(St.Table);
|
_patchContainerClass(St.Table);
|
||||||
|
|
||||||
|
@ -1,10 +1,10 @@
|
|||||||
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
/* -*- mode: js2; js2-basic-offset: 4; indent-tabs-mode: nil -*- */
|
||||||
|
|
||||||
const Clutter = imports.gi.Clutter;
|
const Clutter = imports.gi.Clutter;
|
||||||
const GLib = imports.gi.GLib;
|
|
||||||
const Lang = imports.lang;
|
const Lang = imports.lang;
|
||||||
const Mainloop = imports.mainloop;
|
const Mainloop = imports.mainloop;
|
||||||
const Shell = imports.gi.Shell;
|
const Shell = imports.gi.Shell;
|
||||||
|
const St = imports.gi.St;
|
||||||
const Signals = imports.signals;
|
const Signals = imports.signals;
|
||||||
const Tweener = imports.tweener.tweener;
|
const Tweener = imports.tweener.tweener;
|
||||||
|
|
||||||
@ -43,17 +43,8 @@ const Tweener = imports.tweener.tweener;
|
|||||||
// calls any of these is almost certainly wrong anyway, because they
|
// calls any of these is almost certainly wrong anyway, because they
|
||||||
// affect the entire application.)
|
// affect the entire application.)
|
||||||
|
|
||||||
let slowDownFactor = 1.0;
|
|
||||||
|
|
||||||
// Called from Main.start
|
// Called from Main.start
|
||||||
function init() {
|
function init() {
|
||||||
let slowdownEnv = GLib.getenv('GNOME_SHELL_SLOWDOWN_FACTOR');
|
|
||||||
if (slowdownEnv) {
|
|
||||||
let factor = parseFloat(slowdownEnv);
|
|
||||||
if (!isNaN(factor) && factor > 0.0)
|
|
||||||
slowDownFactor = factor;
|
|
||||||
}
|
|
||||||
|
|
||||||
Tweener.setFrameTicker(new ClutterFrameTicker());
|
Tweener.setFrameTicker(new ClutterFrameTicker());
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -216,7 +207,6 @@ ClutterFrameTicker.prototype = {
|
|||||||
// when we need to stop, so use 1000 seconds as "infinity"
|
// when we need to stop, so use 1000 seconds as "infinity"
|
||||||
this._timeline = new Clutter.Timeline({ duration: 1000*1000 });
|
this._timeline = new Clutter.Timeline({ duration: 1000*1000 });
|
||||||
this._startTime = -1;
|
this._startTime = -1;
|
||||||
this._currentTime = -1;
|
|
||||||
|
|
||||||
this._timeline.connect('new-frame', Lang.bind(this,
|
this._timeline.connect('new-frame', Lang.bind(this,
|
||||||
function(timeline, frame) {
|
function(timeline, frame) {
|
||||||
@ -243,17 +233,18 @@ ClutterFrameTicker.prototype = {
|
|||||||
|
|
||||||
// currentTime is in milliseconds
|
// currentTime is in milliseconds
|
||||||
let perf_log = Shell.PerfLog.get_default();
|
let perf_log = Shell.PerfLog.get_default();
|
||||||
this._currentTime = (this._timeline.get_elapsed_time() - this._startTime) / slowDownFactor;
|
|
||||||
perf_log.event("tweener.framePrepareStart");
|
perf_log.event("tweener.framePrepareStart");
|
||||||
this.emit('prepare-frame');
|
this.emit('prepare-frame');
|
||||||
perf_log.event("tweener.framePrepareDone");
|
perf_log.event("tweener.framePrepareDone");
|
||||||
},
|
},
|
||||||
|
|
||||||
getTime : function() {
|
getTime : function() {
|
||||||
return this._currentTime;
|
return this._timeline.get_elapsed_time();
|
||||||
},
|
},
|
||||||
|
|
||||||
start : function() {
|
start : function() {
|
||||||
|
if (St.get_slow_down_factor() > 0)
|
||||||
|
Tweener.setTimeScale(1 / St.get_slow_down_factor());
|
||||||
this._timeline.start();
|
this._timeline.start();
|
||||||
global.begin_work();
|
global.begin_work();
|
||||||
},
|
},
|
||||||
@ -261,7 +252,6 @@ ClutterFrameTicker.prototype = {
|
|||||||
stop : function() {
|
stop : function() {
|
||||||
this._timeline.stop();
|
this._timeline.stop();
|
||||||
this._startTime = -1;
|
this._startTime = -1;
|
||||||
this._currentTime = -1;
|
|
||||||
global.end_work();
|
global.end_work();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
@ -106,6 +106,8 @@ enum
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
|
extern gfloat st_slow_down_factor;
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
handle_button_press_event_cb (ClutterActor *actor,
|
handle_button_press_event_cb (ClutterActor *actor,
|
||||||
ClutterButtonEvent *event,
|
ClutterButtonEvent *event,
|
||||||
@ -875,7 +877,7 @@ trough_paging_cb (StScrollBar *self)
|
|||||||
* idea, but it's a lot less involved than extenind the current animation */
|
* idea, but it's a lot less involved than extenind the current animation */
|
||||||
a = self->priv->paging_animation = g_object_new (CLUTTER_TYPE_ANIMATION,
|
a = self->priv->paging_animation = g_object_new (CLUTTER_TYPE_ANIMATION,
|
||||||
"object", self->priv->adjustment,
|
"object", self->priv->adjustment,
|
||||||
"duration", PAGING_SUBSEQUENT_REPEAT_TIMEOUT,
|
"duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * st_slow_down_factor),
|
||||||
"mode", mode,
|
"mode", mode,
|
||||||
NULL);
|
NULL);
|
||||||
g_value_init (&v, G_TYPE_DOUBLE);
|
g_value_init (&v, G_TYPE_DOUBLE);
|
||||||
@ -961,7 +963,7 @@ stepper_move_on (StScrollBarPrivate *priv,
|
|||||||
|
|
||||||
a = g_object_new (CLUTTER_TYPE_ANIMATION,
|
a = g_object_new (CLUTTER_TYPE_ANIMATION,
|
||||||
"object", priv->adjustment,
|
"object", priv->adjustment,
|
||||||
"duration", PAGING_SUBSEQUENT_REPEAT_TIMEOUT,
|
"duration", (guint)(PAGING_SUBSEQUENT_REPEAT_TIMEOUT * st_slow_down_factor),
|
||||||
"mode", mode,
|
"mode", mode,
|
||||||
NULL);
|
NULL);
|
||||||
|
|
||||||
|
@ -15,6 +15,8 @@ static void st_theme_node_finalize (GObject *object);
|
|||||||
static const ClutterColor BLACK_COLOR = { 0, 0, 0, 0xff };
|
static const ClutterColor BLACK_COLOR = { 0, 0, 0, 0xff };
|
||||||
static const ClutterColor TRANSPARENT_COLOR = { 0, 0, 0, 0 };
|
static const ClutterColor TRANSPARENT_COLOR = { 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
extern gfloat st_slow_down_factor;
|
||||||
|
|
||||||
G_DEFINE_TYPE (StThemeNode, st_theme_node, G_TYPE_OBJECT)
|
G_DEFINE_TYPE (StThemeNode, st_theme_node, G_TYPE_OBJECT)
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -1683,13 +1685,13 @@ st_theme_node_get_transition_duration (StThemeNode *node)
|
|||||||
g_return_val_if_fail (ST_IS_THEME_NODE (node), 0);
|
g_return_val_if_fail (ST_IS_THEME_NODE (node), 0);
|
||||||
|
|
||||||
if (node->transition_duration > -1)
|
if (node->transition_duration > -1)
|
||||||
return node->transition_duration;
|
return st_slow_down_factor * node->transition_duration;
|
||||||
|
|
||||||
st_theme_node_get_double (node, "transition-duration", FALSE, &value);
|
st_theme_node_get_double (node, "transition-duration", FALSE, &value);
|
||||||
|
|
||||||
node->transition_duration = (int)value;
|
node->transition_duration = (int)value;
|
||||||
|
|
||||||
return node->transition_duration;
|
return st_slow_down_factor * node->transition_duration;
|
||||||
}
|
}
|
||||||
|
|
||||||
StTextDecoration
|
StTextDecoration
|
||||||
|
@ -68,6 +68,8 @@ struct _StTooltipPrivate
|
|||||||
ClutterGeometry *tip_area;
|
ClutterGeometry *tip_area;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
extern gfloat st_slow_down_factor;
|
||||||
|
|
||||||
G_DEFINE_TYPE (StTooltip, st_tooltip, ST_TYPE_WIDGET);
|
G_DEFINE_TYPE (StTooltip, st_tooltip, ST_TYPE_WIDGET);
|
||||||
|
|
||||||
static void
|
static void
|
||||||
@ -540,7 +542,7 @@ st_tooltip_hide (StTooltip *tooltip)
|
|||||||
NULL);
|
NULL);
|
||||||
animation =
|
animation =
|
||||||
clutter_actor_animate (CLUTTER_ACTOR (tooltip), CLUTTER_EASE_IN_SINE,
|
clutter_actor_animate (CLUTTER_ACTOR (tooltip), CLUTTER_EASE_IN_SINE,
|
||||||
150,
|
(guint)(150 * st_slow_down_factor),
|
||||||
"scale-x", 0.0,
|
"scale-x", 0.0,
|
||||||
"scale-y", 0.0,
|
"scale-y", 0.0,
|
||||||
NULL);
|
NULL);
|
||||||
|
@ -105,6 +105,8 @@ enum
|
|||||||
|
|
||||||
static guint signals[LAST_SIGNAL] = { 0, };
|
static guint signals[LAST_SIGNAL] = { 0, };
|
||||||
|
|
||||||
|
gfloat st_slow_down_factor = 1.0;
|
||||||
|
|
||||||
G_DEFINE_ABSTRACT_TYPE (StWidget, st_widget, CLUTTER_TYPE_ACTOR);
|
G_DEFINE_ABSTRACT_TYPE (StWidget, st_widget, CLUTTER_TYPE_ACTOR);
|
||||||
|
|
||||||
#define ST_WIDGET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_WIDGET, StWidgetPrivate))
|
#define ST_WIDGET_GET_PRIVATE(obj) (G_TYPE_INSTANCE_GET_PRIVATE ((obj), ST_TYPE_WIDGET, StWidgetPrivate))
|
||||||
@ -1704,3 +1706,27 @@ st_describe_actor (ClutterActor *actor)
|
|||||||
|
|
||||||
return g_string_free (desc, FALSE);
|
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 ()
|
||||||
|
{
|
||||||
|
return st_slow_down_factor;
|
||||||
|
}
|
||||||
|
@ -141,8 +141,10 @@ void st_widget_set_direction (StWidget *self
|
|||||||
void st_widget_style_changed (StWidget *widget);
|
void st_widget_style_changed (StWidget *widget);
|
||||||
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
StThemeNode * st_widget_get_theme_node (StWidget *widget);
|
||||||
|
|
||||||
/* debug method */
|
/* debug methods */
|
||||||
char *st_describe_actor (ClutterActor *actor);
|
char *st_describe_actor (ClutterActor *actor);
|
||||||
|
void st_set_slow_down_factor (gfloat factor);
|
||||||
|
gfloat st_get_slow_down_factor (void);
|
||||||
|
|
||||||
G_END_DECLS
|
G_END_DECLS
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user