[gnome-shell] boxpointer: add animateDisappear/animateAppear methods
- From: Maxim Ermilov <mermilov src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [gnome-shell] boxpointer: add animateDisappear/animateAppear methods
- Date: Tue, 19 Oct 2010 19:24:41 +0000 (UTC)
commit 4d18d54d9d4d8f52aee545f5bfc743f2e06d45d4
Author: Maxim Ermilov <zaspire rambler ru>
Date: Fri Oct 15 08:53:34 2010 +0400
boxpointer: add animateDisappear/animateAppear methods
https://bugzilla.gnome.org/show_bug.cgi?id=624900
js/ui/boxpointer.js | 78 +++++++++++++++++++++++++++++++++++++++++++++++++++
js/ui/popupMenu.js | 13 +-------
2 files changed, 80 insertions(+), 11 deletions(-)
---
diff --git a/js/ui/boxpointer.js b/js/ui/boxpointer.js
index d6bd0d0..68cea44 100644
--- a/js/ui/boxpointer.js
+++ b/js/ui/boxpointer.js
@@ -5,6 +5,10 @@ const Lang = imports.lang;
const St = imports.gi.St;
const Shell = imports.gi.Shell;
+const Tweener = imports.ui.tweener;
+
+const POPUP_ANIMATION_TIME = 0.15;
+
/**
* BoxPointer:
* @side: A St.Side type; currently only St.Side.TOP is implemented
@@ -38,6 +42,80 @@ BoxPointer.prototype = {
this.bin.raise(this._border);
},
+ animateAppear: function(onComplete) {
+ let x = this.actor.x;
+ let y = this.actor.y;
+ let themeNode = this.actor.get_theme_node();
+ let [found, rise] = themeNode.get_length('-arrow-rise', false);
+ if (!found)
+ rise = 0;
+
+ this.actor.opacity = 0;
+ this.actor.show();
+
+ switch (this._arrowSide) {
+ case St.Side.TOP:
+ this.actor.y -= rise;
+ break;
+ case St.Side.BOTTOM:
+ this.actor.y += rise;
+ break;
+ case St.Side.LEFT:
+ this.actor.x -= rise;
+ break;
+ case St.Side.RIGHT:
+ this.actor.x += rise;
+ break;
+ }
+
+ Tweener.addTween(this.actor, { opacity: 255,
+ x: x,
+ y: y,
+ transition: "linear",
+ onComplete: onComplete,
+ time: POPUP_ANIMATION_TIME });
+ },
+
+ animateDisappear: function(onComplete) {
+ let x = this.actor.x;
+ let y = this.actor.y;
+ let originalX = this.actor.x;
+ let originalY = this.actor.y;
+ let themeNode = this.actor.get_theme_node();
+ let [found, rise] = themeNode.get_length('-arrow-rise', false);
+ if (!found)
+ rise = 0;
+
+ switch (this._arrowSide) {
+ case St.Side.TOP:
+ y += rise;
+ break;
+ case St.Side.BOTTOM:
+ y -= rise;
+ break;
+ case St.Side.LEFT:
+ x += rise;
+ break;
+ case St.Side.RIGHT:
+ x -= rise;
+ break;
+ }
+
+ Tweener.addTween(this.actor, { opacity: 0,
+ x: x,
+ y: y,
+ transition: "linear",
+ time: POPUP_ANIMATION_TIME,
+ onComplete: Lang.bind(this, function () {
+ this.actor.hide();
+ this.actor.x = originalX;
+ this.actor.y = originalY;
+ if (onComplete)
+ onComplete();
+ })
+ });
+ },
+
_adjustAllocationForArrow: function(isWidth, alloc) {
let themeNode = this.actor.get_theme_node();
let found, borderWidth, base, rise;
diff --git a/js/ui/popupMenu.js b/js/ui/popupMenu.js
index 7e60fe8..60f9011 100644
--- a/js/ui/popupMenu.js
+++ b/js/ui/popupMenu.js
@@ -16,8 +16,6 @@ const Tweener = imports.ui.tweener;
const Gettext = imports.gettext.domain('gnome-shell');
const _ = Gettext.gettext;
-const POPUP_ANIMATION_TIME = 0.1;
-
function Switch() {
this._init.apply(this, arguments);
}
@@ -639,11 +637,8 @@ PopupMenu.prototype = {
this.actor.y = Math.floor(menuY);
// Now show it
- this.actor.opacity = 0;
this.actor.reactive = true;
- Tweener.addTween(this.actor, { opacity: 255,
- transition: "easeOutQuad",
- time: POPUP_ANIMATION_TIME });
+ this._boxPointer.animateAppear();
this.isOpen = true;
this.emit('open-state-changed', true);
},
@@ -657,11 +652,7 @@ PopupMenu.prototype = {
if (this._activeMenuItem)
this._activeMenuItem.setActive(false);
this.actor.reactive = false;
- Tweener.addTween(this.actor, { opacity: 0,
- transition: "easeOutQuad",
- time: POPUP_ANIMATION_TIME,
- onComplete: Lang.bind(this, function () { this.actor.hide(); })});
-
+ this._boxPointer.animateDisappear();
this.isOpen = false;
this.emit('open-state-changed', false);
},
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]