workspace: only scale a layout row when it doesn't fit

Instead of applying an additional scale factor to all the rows in the
layout, only do it for those rows that don't fit.
This avoids the visual distraction of resizing a row when there's no
need to.
This commit is contained in:
Cosimo Cecchi 2013-04-22 18:04:56 -04:00
parent c37259b01d
commit ab26fc438a

View File

@ -768,27 +768,25 @@ const LayoutStrategy = new Lang.Class({
let slots = []; let slots = [];
// Do this in three parts. // Do this in three parts.
let width = 0;
let height = 0; let height = 0;
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
let row = rows[i]; let row = rows[i];
width = Math.max(width, row.width);
height += row.height + this._rowSpacing; height += row.height + this._rowSpacing;
} }
height -= this._rowSpacing; height -= this._rowSpacing;
// If the window layout doesn't fit in the actual
// geometry, then apply this additional scale to
// tne entire layout.
let additionalScale = Math.min(1, area.width / width, area.height / height);
let y = 0; let y = 0;
for (let i = 0; i < rows.length; i++) { for (let i = 0; i < rows.length; i++) {
let row = rows[i]; let row = rows[i];
row.x = area.x + (Math.max(area.width - row.width, 0) / 2) * additionalScale;
row.y = area.y + (y + Math.max(area.height - height, 0) / 2) * additionalScale; // If this window layout row doesn't fit in the actual
// geometry, then apply an additional scale to it.
row.additionalScale = Math.min(1, area.width / row.width, area.height / height);
row.x = area.x + (Math.max(area.width - row.width, 0) / 2) * row.additionalScale;
row.y = area.y + (y + Math.max(area.height - height, 0) / 2) * row.additionalScale;
y += row.height + this._rowSpacing; y += row.height + this._rowSpacing;
row.windows.sort(Lang.bind(this, function(a, b) { row.windows.sort(Lang.bind(this, function(a, b) {
@ -802,7 +800,7 @@ const LayoutStrategy = new Lang.Class({
for (let j = 0; j < row.windows.length; j++) { for (let j = 0; j < row.windows.length; j++) {
let window = row.windows[j]; let window = row.windows[j];
let s = scale * this._computeWindowScale(window) * additionalScale; let s = scale * this._computeWindowScale(window) * row.additionalScale;
let cellWidth = window.actor.width * s; let cellWidth = window.actor.width * s;
let cellHeight = window.actor.height * s; let cellHeight = window.actor.height * s;