[Overview] Base minimum motion on actors
When figuring out where to position window previews, use the clone's position instead of the the original meta window. There shouldn't be a difference when entering the overview, but it makes the motion when opening/closing new windows in the overview tinier and more predictable. https://bugzilla.gnome.org/show_bug.cgi?id=611167
This commit is contained in:
parent
40a8e9c1a6
commit
499c5737da
@ -855,7 +855,7 @@ Workspace.prototype = {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* _computeWindowMotion:
|
* _computeWindowMotion:
|
||||||
* @metaWindow: A #MetaWindow
|
* @actor: A #WindowClone's #ClutterActor
|
||||||
* @slot: An element of #POSITIONS
|
* @slot: An element of #POSITIONS
|
||||||
* @slotGeometry: Layout of @slot
|
* @slotGeometry: Layout of @slot
|
||||||
*
|
*
|
||||||
@ -864,15 +864,15 @@ Workspace.prototype = {
|
|||||||
* Currently this is the square of the distance between the
|
* Currently this is the square of the distance between the
|
||||||
* centers.
|
* centers.
|
||||||
*/
|
*/
|
||||||
_computeWindowMotion: function (metaWindow, slot) {
|
_computeWindowMotion: function (actor, slot) {
|
||||||
let rect = new Meta.Rectangle();
|
|
||||||
metaWindow.get_outer_rect(rect);
|
|
||||||
|
|
||||||
let [xCenter, yCenter, fraction] = slot;
|
let [xCenter, yCenter, fraction] = slot;
|
||||||
let xDelta, yDelta, distanceSquared;
|
let xDelta, yDelta, distanceSquared;
|
||||||
|
let actorWidth, actorHeight;
|
||||||
|
|
||||||
xDelta = rect.x + rect.width / 2.0 - xCenter * global.screen_width;
|
actorWidth = actor.width * actor.scale_x;
|
||||||
yDelta = rect.y + rect.height / 2.0 - yCenter * global.screen_height;
|
actorHeight = actor.height * actor.scale_y;
|
||||||
|
xDelta = actor.x + actorWidth / 2.0 - xCenter * global.screen_width;
|
||||||
|
yDelta = actor.y + actorHeight / 2.0 - yCenter * global.screen_height;
|
||||||
distanceSquared = xDelta * xDelta + yDelta * yDelta;
|
distanceSquared = xDelta * xDelta + yDelta * yDelta;
|
||||||
|
|
||||||
return distanceSquared;
|
return distanceSquared;
|
||||||
@ -891,10 +891,10 @@ Workspace.prototype = {
|
|||||||
this._forEachPermutations(clones, Lang.bind(this, function (permutation) {
|
this._forEachPermutations(clones, Lang.bind(this, function (permutation) {
|
||||||
let motion = 0;
|
let motion = 0;
|
||||||
for (let i = 0; i < permutation.length; i++) {
|
for (let i = 0; i < permutation.length; i++) {
|
||||||
let metaWindow = permutation[i].metaWindow;
|
let cloneActor = permutation[i].actor;
|
||||||
let slot = slots[i];
|
let slot = slots[i];
|
||||||
|
|
||||||
let delta = this._computeWindowMotion(metaWindow, slot);
|
let delta = this._computeWindowMotion(cloneActor, slot);
|
||||||
|
|
||||||
motion += delta;
|
motion += delta;
|
||||||
}
|
}
|
||||||
@ -924,8 +924,8 @@ Workspace.prototype = {
|
|||||||
let minimumMotionIndex = -1;
|
let minimumMotionIndex = -1;
|
||||||
let minimumMotion = -1;
|
let minimumMotion = -1;
|
||||||
for (let j = 0; j < clonesCopy.length; j++) {
|
for (let j = 0; j < clonesCopy.length; j++) {
|
||||||
let metaWindow = clonesCopy[j].metaWindow;
|
let cloneActor = clonesCopy[j].actor;
|
||||||
let delta = this._computeWindowMotion(metaWindow, slot);
|
let delta = this._computeWindowMotion(cloneActor, slot);
|
||||||
if (minimumMotionIndex == -1 || delta < minimumMotion) {
|
if (minimumMotionIndex == -1 || delta < minimumMotion) {
|
||||||
minimumMotionIndex = j;
|
minimumMotionIndex = j;
|
||||||
minimumMotion = delta;
|
minimumMotion = delta;
|
||||||
|
Loading…
Reference in New Issue
Block a user