OLD | NEW |
---|---|
1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "config.h" | 5 #include "config.h" |
6 #include "core/paint/BackgroundImageGeometry.h" | 6 #include "core/paint/BackgroundImageGeometry.h" |
7 | 7 |
8 #include "core/layout/LayoutBox.h" | 8 #include "core/layout/LayoutBox.h" |
9 #include "core/layout/LayoutBoxModelObject.h" | 9 #include "core/layout/LayoutBoxModelObject.h" |
10 #include "core/layout/LayoutView.h" | 10 #include "core/layout/LayoutView.h" |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
149 m_phase.move(std::max(alignedPoint.x() - m_destRect.x(), 0), std::max(aligne dPoint.y() - m_destRect.y(), 0)); | 149 m_phase.move(std::max(alignedPoint.x() - m_destRect.x(), 0), std::max(aligne dPoint.y() - m_destRect.y(), 0)); |
150 } | 150 } |
151 | 151 |
152 void BackgroundImageGeometry::clip(const IntRect& clipRect) | 152 void BackgroundImageGeometry::clip(const IntRect& clipRect) |
153 { | 153 { |
154 m_destRect.intersect(clipRect); | 154 m_destRect.intersect(clipRect); |
155 } | 155 } |
156 | 156 |
157 void BackgroundImageGeometry::calculate(const LayoutBoxModelObject& obj, const L ayoutBoxModelObject* paintContainer, | 157 void BackgroundImageGeometry::calculate(const LayoutBoxModelObject& obj, const L ayoutBoxModelObject* paintContainer, |
158 const GlobalPaintFlags globalPaintFlags, const FillLayer& fillLayer, const L ayoutRect& paintRect, | 158 const GlobalPaintFlags globalPaintFlags, const FillLayer& fillLayer, const L ayoutRect& paintRect, |
159 LayoutObject* backgroundObject) | 159 const IntPoint& accumulatedScrollOffsetSincePaintContainer, LayoutObject* ba ckgroundObject) |
160 { | 160 { |
161 LayoutUnit left = 0; | 161 LayoutUnit left = 0; |
162 LayoutUnit top = 0; | 162 LayoutUnit top = 0; |
163 IntSize positioningAreaSize; | 163 IntSize positioningAreaSize; |
164 IntRect snappedPaintRect = pixelSnappedIntRect(paintRect); | 164 IntRect snappedPaintRect = pixelSnappedIntRect(paintRect); |
165 bool isLayoutView = obj.isLayoutView(); | 165 bool isLayoutView = obj.isLayoutView(); |
166 const LayoutBox* rootBox = nullptr; | 166 const LayoutBox* rootBox = nullptr; |
167 if (isLayoutView) { | 167 if (isLayoutView) { |
168 // It is only possible reach here when root element has a box. | 168 // It is only possible reach here when root element has a box. |
169 Element* documentElement = obj.document().documentElement(); | 169 Element* documentElement = obj.document().documentElement(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
216 // Since left/top is relative to the paint rect, we need to offset t hem back. | 216 // Since left/top is relative to the paint rect, we need to offset t hem back. |
217 left -= paintRect.x(); | 217 left -= paintRect.x(); |
218 top -= paintRect.y(); | 218 top -= paintRect.y(); |
219 } else { | 219 } else { |
220 positioningAreaSize = pixelSnappedIntSize(paintRect.size() - LayoutS ize(left + right, top + bottom), paintRect.location()); | 220 positioningAreaSize = pixelSnappedIntSize(paintRect.size() - LayoutS ize(left + right, top + bottom), paintRect.location()); |
221 } | 221 } |
222 } else { | 222 } else { |
223 setHasNonLocalGeometry(); | 223 setHasNonLocalGeometry(); |
224 | 224 |
225 IntRect viewportRect = pixelSnappedIntRect(obj.viewRect()); | 225 IntRect viewportRect = pixelSnappedIntRect(obj.viewRect()); |
226 if (fixedBackgroundPaintsInLocalCoordinates(obj, globalPaintFlags)) | 226 if (fixedBackgroundPaintsInLocalCoordinates(obj, globalPaintFlags)) { |
227 viewportRect.setLocation(IntPoint()); | 227 viewportRect.setLocation(IntPoint()); |
228 else if (FrameView* frameView = obj.view()->frameView()) | 228 } else { |
229 viewportRect.setLocation(frameView->scrollPosition()); | 229 if (FrameView* frameView = obj.view()->frameView()) { |
230 viewportRect.setLocation(frameView->scrollPosition()); | |
231 viewportRect.moveBy(accumulatedScrollOffsetSincePaintContainer); | |
232 } | |
230 | 233 |
231 if (paintContainer) { | 234 if (paintContainer) { |
232 IntPoint absoluteContainerOffset = roundedIntPoint(paintContainer->l ocalToAbsolute(FloatPoint())); | 235 IntPoint absoluteContainerOffset = roundedIntPoint(paintContainer->l ocalToAbsolute(FloatPoint())); |
chrishtr
2015/09/09 17:05:41
localToAbsolute includes scroll offsets...why isn'
Xianzhu
2015/09/09 17:09:09
It includes scroll offsets from root to the paint
chrishtr
2015/09/09 17:29:16
Oh right.
How about replacing your code with mapL
Xianzhu
2015/09/09 20:40:03
This seems not to work because we only need to com
chrishtr
2015/09/09 20:48:15
Maybe just make a one-off method that accumulates
Xianzhu
2015/09/09 22:04:06
Good idea! Done.
| |
233 viewportRect.moveBy(-absoluteContainerOffset); | 236 viewportRect.moveBy(-absoluteContainerOffset); |
234 } | 237 } |
235 | 238 |
236 setDestRect(viewportRect); | 239 setDestRect(viewportRect); |
237 positioningAreaSize = destRect().size(); | 240 positioningAreaSize = destRect().size(); |
238 } | 241 } |
239 | 242 |
240 const LayoutObject* clientForBackgroundImage = backgroundObject ? background Object : &obj; | 243 const LayoutObject* clientForBackgroundImage = backgroundObject ? background Object : &obj; |
241 IntSize fillTileSize = calculateFillTileSize(positioningBox, fillLayer, posi tioningAreaSize); | 244 IntSize fillTileSize = calculateFillTileSize(positioningBox, fillLayer, posi tioningAreaSize); |
242 fillLayer.image()->setContainerSizeForLayoutObject(clientForBackgroundImage, fillTileSize, obj.style()->effectiveZoom()); | 245 fillLayer.image()->setContainerSizeForLayoutObject(clientForBackgroundImage, fillTileSize, obj.style()->effectiveZoom()); |
(...skipping 82 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
325 setSpaceSize(IntSize(spaceSize().width(), 0)); | 328 setSpaceSize(IntSize(spaceSize().width(), 0)); |
326 } | 329 } |
327 | 330 |
328 if (fixedAttachment) | 331 if (fixedAttachment) |
329 useFixedAttachment(snappedPaintRect.location()); | 332 useFixedAttachment(snappedPaintRect.location()); |
330 | 333 |
331 clip(snappedPaintRect); | 334 clip(snappedPaintRect); |
332 } | 335 } |
333 | 336 |
334 } // namespace blink | 337 } // namespace blink |
OLD | NEW |