From f30fa1adc77265cbaff2497c7abc7eed310fde72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marco=20Trevisan=20=28Trevi=C3=B1o=29?= Date: Fri, 18 Jun 2021 19:11:34 +0200 Subject: [PATCH] WorkspaceBackground: Fully take care of workarea geometry on allocation The background group is currently allocated taking care of the workarea x, y offset but not of its width/height and this may lead to building a wrongly sized workspace view when the workarea size is not matching the monitor size (like when there are struts set). So, take care of the difference between the workarea and monitor absolute end coordinates to allocate the background scaled content box. Part-of: --- js/ui/workspace.js | 20 ++++++++++++++------ 1 file changed, 14 insertions(+), 6 deletions(-) diff --git a/js/ui/workspace.js b/js/ui/workspace.js index 75efe4d99..fafa368ce 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -1012,13 +1012,21 @@ class WorkspaceBackground extends St.Widget { const [contentWidth, contentHeight] = contentBox.get_size(); const monitor = Main.layoutManager.monitors[this._monitorIndex]; - const xOff = (contentWidth / this._workarea.width) * - (this._workarea.x - monitor.x); - const yOff = (contentHeight / this._workarea.height) * - (this._workarea.y - monitor.y); + const [mX1, mX2] = [monitor.x, monitor.x + monitor.width]; + const [mY1, mY2] = [monitor.y, monitor.y + monitor.height]; + const [wX1, wX2] = [this._workarea.x, this._workarea.x + this._workarea.width]; + const [wY1, wY2] = [this._workarea.y, this._workarea.y + this._workarea.height]; + const xScale = contentWidth / this._workarea.width; + const yScale = contentHeight / this._workarea.height; + const leftOffset = wX1 - mX1; + const topOffset = wY1 - mY1; + const rightOffset = mX2 - wX2; + const bottomOffset = mY2 - wY2; - contentBox.set_origin(-xOff, -yOff); - contentBox.set_size(xOff + contentWidth, yOff + contentHeight); + contentBox.set_origin(-leftOffset * xScale, -topOffset * yScale); + contentBox.set_size( + contentWidth + (leftOffset + rightOffset) * xScale, + contentHeight + (topOffset + bottomOffset) * yScale); this._backgroundGroup.allocate(contentBox); }