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: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1892>
This commit is contained in:
Marco Trevisan (Treviño) 2021-06-18 19:11:34 +02:00 committed by Florian Müllner
parent 28a42da947
commit f30fa1adc7

View File

@ -1012,13 +1012,21 @@ class WorkspaceBackground extends St.Widget {
const [contentWidth, contentHeight] = contentBox.get_size(); const [contentWidth, contentHeight] = contentBox.get_size();
const monitor = Main.layoutManager.monitors[this._monitorIndex]; const monitor = Main.layoutManager.monitors[this._monitorIndex];
const xOff = (contentWidth / this._workarea.width) * const [mX1, mX2] = [monitor.x, monitor.x + monitor.width];
(this._workarea.x - monitor.x); const [mY1, mY2] = [monitor.y, monitor.y + monitor.height];
const yOff = (contentHeight / this._workarea.height) * const [wX1, wX2] = [this._workarea.x, this._workarea.x + this._workarea.width];
(this._workarea.y - monitor.y); 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_origin(-leftOffset * xScale, -topOffset * yScale);
contentBox.set_size(xOff + contentWidth, yOff + contentHeight); contentBox.set_size(
contentWidth + (leftOffset + rightOffset) * xScale,
contentHeight + (topOffset + bottomOffset) * yScale);
this._backgroundGroup.allocate(contentBox); this._backgroundGroup.allocate(contentBox);
} }