Chromium Code Reviews| Index: third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp |
| diff --git a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp |
| index 85cfd59807b1c23ebcbcd70b8d39bdd30037b0da..b99d4c261c8fb26ceab93ca07985b2e888b63a83 100644 |
| --- a/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp |
| +++ b/third_party/WebKit/Source/core/paint/BackgroundImageGeometry.cpp |
| @@ -419,7 +419,7 @@ void BackgroundImageGeometry::calculate( |
| const LayoutRect& paintRect) { |
| LayoutUnit left; |
| LayoutUnit top; |
| - LayoutSize positioningAreaSize; |
| + LayoutRect positioningArea; |
| bool isLayoutView = obj.isLayoutView(); |
| const LayoutBox* rootBox = nullptr; |
| if (isLayoutView) { |
| @@ -481,8 +481,9 @@ void BackgroundImageGeometry::calculate( |
| // The background of the box generated by the root element covers the |
| // entire canvas and will be painted by the view object, but the we should |
| // still use the root element box for positioning. |
| - positioningAreaSize = |
| - rootBox->size() - LayoutSize(left + right, top + bottom); |
| + positioningArea.setSize(rootBox->size()); |
| + positioningArea.contractEdges(top, right, bottom, left); |
| + |
| // The input paint rect is specified in root element local coordinate |
| // (i.e. a transform is applied on the context for painting), and is |
| // expanded to cover the whole canvas. Since left/top is relative to the |
| @@ -490,12 +491,14 @@ void BackgroundImageGeometry::calculate( |
| left -= paintRect.x(); |
| top -= paintRect.y(); |
| } else { |
| - positioningAreaSize = |
| - (cellUsingContainerBackground |
| - ? getBackgroundObjectDimensions(toLayoutTableCell(obj), |
| - toLayoutBox(positioningBox)) |
| - : paintRect.size()) - |
| - LayoutSize(left + right, top + bottom); |
| + if (cellUsingContainerBackground) { |
| + positioningArea.setSize(getBackgroundObjectDimensions( |
| + toLayoutTableCell(obj), toLayoutBox(positioningBox))); |
| + } else { |
| + positioningArea = paintRect; |
| + } |
| + |
| + positioningArea.contractEdges(top, right, bottom, left); |
| } |
| } else { |
| setHasNonLocalGeometry(); |
| @@ -517,11 +520,11 @@ void BackgroundImageGeometry::calculate( |
| LayoutPoint(-paintContainer->localToAbsolute(FloatPoint()))); |
| setDestRect(viewportRect); |
| - positioningAreaSize = destRect().size(); |
| + positioningArea = viewportRect; |
| } |
| LayoutSize fillTileSize( |
| - calculateFillTileSize(positioningBox, fillLayer, positioningAreaSize)); |
| + calculateFillTileSize(positioningBox, fillLayer, positioningArea.size())); |
| // It's necessary to apply the heuristic here prior to any further |
| // calculations to avoid incorrectly using sub-pixel values that won't be |
| // present in the painted tile. |
| @@ -530,12 +533,10 @@ void BackgroundImageGeometry::calculate( |
| EFillRepeat backgroundRepeatX = fillLayer.repeatX(); |
| EFillRepeat backgroundRepeatY = fillLayer.repeatY(); |
| LayoutUnit unsnappedAvailableWidth = |
| - positioningAreaSize.width() - fillTileSize.width(); |
| + positioningArea.width() - fillTileSize.width(); |
| LayoutUnit unsnappedAvailableHeight = |
| - positioningAreaSize.height() - fillTileSize.height(); |
| - positioningAreaSize = |
| - LayoutSize(snapSizeToPixel(positioningAreaSize.width(), m_destRect.x()), |
| - snapSizeToPixel(positioningAreaSize.height(), m_destRect.y())); |
| + positioningArea.height() - fillTileSize.height(); |
| + LayoutSize positioningAreaSize(positioningArea.pixelSnappedSize()); |
|
Stephen Chennney
2017/03/01 14:48:29
This is a subtle change that might change snapping
Karl Øygard
2017/03/03 15:00:07
Good catch, this does not belong here. Thanks!
|
| LayoutUnit availableWidth = positioningAreaSize.width() - tileSize().width(); |
| LayoutUnit availableHeight = |
| positioningAreaSize.height() - tileSize().height(); |