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:
parent
28a42da947
commit
f30fa1adc7
@ -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);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user