appDisplay: Ensure icon grid is always aligned with the pixel grid
When adaptToSize was called with an odd width, the calculated padding was not an integer and as a result the icon grid was no longer aligned to the pixel grid. Similarly it was possible for the page size to be a non-integer value, which was causing items to not be aligned for pages > 1. Fixes https://gitlab.gnome.org/GNOME/gnome-shell/-/issues/4015 Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/1799>
This commit is contained in:
parent
1b5d71130e
commit
6f0589313d
@ -1122,43 +1122,53 @@ var BaseAppView = GObject.registerClass({
|
||||
if (spaceRatio > gridRatio * 1.1) {
|
||||
// Enough room for some preview
|
||||
pageHeight = availHeight;
|
||||
pageWidth = availHeight * gridRatio;
|
||||
pageWidth = Math.ceil(availHeight * gridRatio);
|
||||
|
||||
if (spaceRatio > gridRatio * 1.5) {
|
||||
// Ultra-wide layout, give some extra space for
|
||||
// the page area, but up to an extent.
|
||||
const extraPageSpace = Math.min(
|
||||
(availWidth - pageWidth) / 2, MAX_PAGE_PADDING);
|
||||
Math.floor((availWidth - pageWidth) / 2), MAX_PAGE_PADDING);
|
||||
pageWidth += extraPageSpace;
|
||||
this._grid.layout_manager.pagePadding.left = extraPageSpace / 2;
|
||||
this._grid.layout_manager.pagePadding.right = extraPageSpace / 2;
|
||||
this._grid.layout_manager.pagePadding.left =
|
||||
Math.floor(extraPageSpace / 2);
|
||||
this._grid.layout_manager.pagePadding.right =
|
||||
Math.ceil(extraPageSpace / 2);
|
||||
}
|
||||
} else {
|
||||
// Not enough room, needs to shrink horizontally
|
||||
pageWidth = availWidth * 0.8;
|
||||
pageWidth = Math.ceil(availWidth * 0.8);
|
||||
pageHeight = availHeight;
|
||||
this._grid.layout_manager.pagePadding.left = availWidth * 0.02;
|
||||
this._grid.layout_manager.pagePadding.right = availWidth * 0.02;
|
||||
this._grid.layout_manager.pagePadding.left =
|
||||
Math.floor(availWidth * 0.02);
|
||||
this._grid.layout_manager.pagePadding.right =
|
||||
Math.ceil(availWidth * 0.02);
|
||||
}
|
||||
|
||||
this._grid.adaptToSize(pageWidth, pageHeight);
|
||||
|
||||
const horizontalPadding = (availWidth - this._grid.layout_manager.pageWidth) / 2;
|
||||
const verticalPadding = (availHeight - this._grid.layout_manager.pageHeight) / 2;
|
||||
const leftPadding = Math.floor(
|
||||
(availWidth - this._grid.layout_manager.pageWidth) / 2);
|
||||
const rightPadding = Math.ceil(
|
||||
(availWidth - this._grid.layout_manager.pageWidth) / 2);
|
||||
const topPadding = Math.floor(
|
||||
(availHeight - this._grid.layout_manager.pageHeight) / 2);
|
||||
const bottomPadding = Math.ceil(
|
||||
(availHeight - this._grid.layout_manager.pageHeight) / 2);
|
||||
|
||||
this._scrollView.content_padding = new Clutter.Margin({
|
||||
left: horizontalPadding,
|
||||
right: horizontalPadding,
|
||||
top: verticalPadding,
|
||||
bottom: verticalPadding,
|
||||
left: leftPadding,
|
||||
right: rightPadding,
|
||||
top: topPadding,
|
||||
bottom: bottomPadding,
|
||||
});
|
||||
|
||||
this._availWidth = availWidth;
|
||||
this._availHeight = availHeight;
|
||||
|
||||
this._pageIndicatorOffset = horizontalPadding;
|
||||
this._pageIndicatorOffset = leftPadding;
|
||||
this._pageArrowOffset = Math.max(
|
||||
horizontalPadding - PAGE_PREVIEW_MAX_ARROW_OFFSET, 0);
|
||||
leftPadding - PAGE_PREVIEW_MAX_ARROW_OFFSET, 0);
|
||||
}
|
||||
|
||||
_getIndicatorOffset(page, progress, baseOffset) {
|
||||
|
Loading…
Reference in New Issue
Block a user