messageTray: Fix some artifacts when tweening back from the tray

The math to calculate the clip isn't quite right here -- it overcompensates
in the Y value.

https://bugzilla.gnome.org/show_bug.cgi?id=685341
This commit is contained in:
Jasper St. Pierre 2012-10-02 19:14:14 -03:00
parent 3ed5f9cd15
commit 9fac285b69

View File

@ -2094,16 +2094,25 @@ const MessageTray = new Lang.Class({
return true; return true;
}, },
_updateDesktopCloneClip: function() {
let geometry = this._bottomMonitorGeometry;
let progress = -Math.round(this._desktopClone.y);
this._desktopClone.set_clip(geometry.x,
geometry.y + progress,
geometry.width,
geometry.height - progress);
},
_showDesktopClone: function() { _showDesktopClone: function() {
let bottomMonitor = Main.layoutManager.bottomMonitor; let bottomMonitor = Main.layoutManager.bottomMonitor;
let geometry = new Clutter.Geometry({ x: bottomMonitor.x, this._bottomMonitorGeometry = { x: bottomMonitor.x,
y: bottomMonitor.y, y: bottomMonitor.y,
width: bottomMonitor.width, width: bottomMonitor.width,
height: bottomMonitor.height height: bottomMonitor.height };
});
if (this._desktopClone) if (this._desktopClone)
this._desktopClone.destroy(); this._desktopClone.destroy();
this._desktopClone = new Clutter.Clone({ source: global.window_group, clip: geometry }); this._desktopClone = new Clutter.Clone({ source: global.window_group, clip: new Clutter.Geometry(this._bottomMonitorGeometry) });
Main.uiGroup.insert_child_above(this._desktopClone, global.window_group); Main.uiGroup.insert_child_above(this._desktopClone, global.window_group);
this._desktopClone.x = 0; this._desktopClone.x = 0;
this._desktopClone.y = 0; this._desktopClone.y = 0;
@ -2113,13 +2122,7 @@ const MessageTray = new Lang.Class({
{ y: -this.actor.height, { y: -this.actor.height,
time: ANIMATION_TIME, time: ANIMATION_TIME,
transition: 'easeOutQuad', transition: 'easeOutQuad',
onUpdate: function() { onUpdate: Lang.bind(this, this._updateDesktopCloneClip)
let progress = Math.round(-this.y);
this.set_clip(geometry.x,
geometry.y + progress,
geometry.width,
geometry.height - progress);
}
}); });
}, },
@ -2142,10 +2145,10 @@ const MessageTray = new Lang.Class({
this._desktopClone.destroy(); this._desktopClone.destroy();
this._desktopClone = null; this._desktopClone = null;
this._desktopCloneState = State.HIDDEN; this._desktopCloneState = State.HIDDEN;
this._bottomMonitorGeometry = null;
return; return;
} }
let geometry = this._desktopClone.clip;
this._tween(this._desktopClone, '_desktopCloneState', State.HIDDEN, this._tween(this._desktopClone, '_desktopCloneState', State.HIDDEN,
{ y: 0, { y: 0,
time: ANIMATION_TIME, time: ANIMATION_TIME,
@ -2153,14 +2156,9 @@ const MessageTray = new Lang.Class({
onComplete: Lang.bind(this, function() { onComplete: Lang.bind(this, function() {
this._desktopClone.destroy(); this._desktopClone.destroy();
this._desktopClone = null; this._desktopClone = null;
this._bottomMonitorGeometry = null;
}), }),
onUpdate: function() { onUpdate: Lang.bind(this, this._updateDesktopCloneClip)
let progress = Math.round(-this.y);
this.set_clip(geometry.x,
geometry.y - progress,
geometry.width,
geometry.height + progress);
}
}); });
}, },