зеркало из https://github.com/mozilla/gecko-dev.git
Bug 1191539 - DisplayPort should ForceInside frameRect to match compositor DisplayPort. r=kats
--HG-- extra : commitid : Ee4ufF6D1Pm extra : rebase_source : a0eb0d18b98cff49c82dd3e9f59e8461c4f0b3c0
This commit is contained in:
Родитель
1f3d931c95
Коммит
282b6c7b96
|
@ -920,6 +920,9 @@ GetDisplayPortFromMarginsData(nsIContent* aContent,
|
||||||
ScreenRect screenRect = LayoutDeviceRect::FromAppUnits(base, auPerDevPixel)
|
ScreenRect screenRect = LayoutDeviceRect::FromAppUnits(base, auPerDevPixel)
|
||||||
* parentRes;
|
* parentRes;
|
||||||
|
|
||||||
|
nsRect expandedScrollableRect =
|
||||||
|
nsLayoutUtils::CalculateExpandedScrollableRect(frame);
|
||||||
|
|
||||||
if (gfxPrefs::LayersTilesEnabled()) {
|
if (gfxPrefs::LayersTilesEnabled()) {
|
||||||
// Note on the correctness of applying the alignment in Screen space:
|
// Note on the correctness of applying the alignment in Screen space:
|
||||||
// The correct space to apply the alignment in would be Layer space, but
|
// The correct space to apply the alignment in would be Layer space, but
|
||||||
|
@ -955,12 +958,20 @@ GetDisplayPortFromMarginsData(nsIContent* aContent,
|
||||||
* res;
|
* res;
|
||||||
|
|
||||||
screenRect += scrollPosScreen;
|
screenRect += scrollPosScreen;
|
||||||
|
// Round-out the display port to the nearest alignment (tiles)
|
||||||
float x = alignmentX * floor(screenRect.x / alignmentX);
|
float x = alignmentX * floor(screenRect.x / alignmentX);
|
||||||
float y = alignmentY * floor(screenRect.y / alignmentY);
|
float y = alignmentY * floor(screenRect.y / alignmentY);
|
||||||
float w = alignmentX * ceil(screenRect.XMost() / alignmentX) - x;
|
float w = alignmentX * ceil(screenRect.width / alignmentX + 1);
|
||||||
float h = alignmentY * ceil(screenRect.YMost() / alignmentY) - y;
|
float h = alignmentY * ceil(screenRect.height / alignmentY + 1);
|
||||||
screenRect = ScreenRect(x, y, w, h);
|
screenRect = ScreenRect(x, y, w, h);
|
||||||
screenRect -= scrollPosScreen;
|
screenRect -= scrollPosScreen;
|
||||||
|
|
||||||
|
ScreenRect screenExpScrollableRect =
|
||||||
|
LayoutDeviceRect::FromAppUnits(expandedScrollableRect,
|
||||||
|
auPerDevPixel) * res;
|
||||||
|
|
||||||
|
// Make sure the displayport remains within the scrollable rect.
|
||||||
|
screenRect = screenRect.ForceInside(screenExpScrollableRect - scrollPosScreen);
|
||||||
} else {
|
} else {
|
||||||
nscoord maxSizeInAppUnits = GetMaxDisplayPortSize(aContent);
|
nscoord maxSizeInAppUnits = GetMaxDisplayPortSize(aContent);
|
||||||
if (maxSizeInAppUnits == nscoord_MAX) {
|
if (maxSizeInAppUnits == nscoord_MAX) {
|
||||||
|
@ -1001,7 +1012,6 @@ GetDisplayPortFromMarginsData(nsIContent* aContent,
|
||||||
result = ApplyRectMultiplier(result, aMultiplier);
|
result = ApplyRectMultiplier(result, aMultiplier);
|
||||||
|
|
||||||
// Finally, clamp it to the expanded scrollable rect.
|
// Finally, clamp it to the expanded scrollable rect.
|
||||||
nsRect expandedScrollableRect = nsLayoutUtils::CalculateExpandedScrollableRect(frame);
|
|
||||||
result = expandedScrollableRect.Intersect(result + scrollPos) - scrollPos;
|
result = expandedScrollableRect.Intersect(result + scrollPos) - scrollPos;
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
|
Загрузка…
Ссылка в новой задаче