From 21641d892508ea651e419cb10c89c8e3e24af92c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Florian=20M=C3=BCllner?= Date: Wed, 17 Feb 2010 02:53:18 +0100 Subject: [PATCH] Clip workspace area in grid view When workspaces slide in/out in mosaic view, they may cross with the workspace controls, which looks pretty weird. Also adjust the vertical spacing in the grid view so that the grid height matches the workspace height in the linear view. https://bugzilla.gnome.org/show_bug.cgi?id=610350 --- js/ui/workspacesView.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/js/ui/workspacesView.js b/js/ui/workspacesView.js index 5f03607ff..f87211ced 100644 --- a/js/ui/workspacesView.js +++ b/js/ui/workspacesView.js @@ -275,6 +275,10 @@ MosaicView.prototype = { GenericWorkspacesView.prototype._init.call(this, width, height, x, y, animate); this.actor.style_class = "workspaces mosaic"; + this._actor.set_clip(x - Workspace.FRAME_SIZE, + y - Workspace.FRAME_SIZE, + width + 2 * Workspace.FRAME_SIZE, + height + 2 * Workspace.FRAME_SIZE); this._workspaces[global.screen.get_active_workspace_index()].setSelected(true); this._removeButton = null; @@ -295,8 +299,12 @@ MosaicView.prototype = { let gridWidth = Math.ceil(Math.sqrt(this._workspaces.length)); let gridHeight = Math.ceil(this._workspaces.length / gridWidth); + // adjust vertical spacing so workspaces can preserve their aspect + // ratio without exceeding this._height + let verticalSpacing = this._spacing * this._height / this._width; + let wsWidth = (this._width - (gridWidth - 1) * this._spacing) / gridWidth; - let wsHeight = (this._height - (gridHeight - 1) * this._spacing) / gridHeight; + let wsHeight = (this._height - (gridHeight - 1) * verticalSpacing) / gridHeight; let scale = wsWidth / global.screen_width; let span = 1, n = 0, row = 0, col = 0, horiz = true; @@ -308,7 +316,7 @@ MosaicView.prototype = { workspace.gridCol = col; workspace.gridX = this._x + workspace.gridCol * (wsWidth + this._spacing); - workspace.gridY = this._y + workspace.gridRow * (wsHeight + this._spacing); + workspace.gridY = this._y + workspace.gridRow * (wsHeight + verticalSpacing); workspace.scale = scale; if (horiz) {