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/frame/FrameView.h" | 8 #include "core/frame/FrameView.h" |
9 #include "core/layout/LayoutBox.h" | 9 #include "core/layout/LayoutBox.h" |
10 #include "core/layout/LayoutBoxModelObject.h" | 10 #include "core/layout/LayoutBoxModelObject.h" |
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
163 IntPoint alignedPoint = attachmentPoint; | 163 IntPoint alignedPoint = attachmentPoint; |
164 m_phase.move(std::max(alignedPoint.x() - m_destRect.x(), 0), std::max(aligne
dPoint.y() - m_destRect.y(), 0)); | 164 m_phase.move(std::max(alignedPoint.x() - m_destRect.x(), 0), std::max(aligne
dPoint.y() - m_destRect.y(), 0)); |
165 } | 165 } |
166 | 166 |
167 void BackgroundImageGeometry::clip(const IntRect& clipRect) | 167 void BackgroundImageGeometry::clip(const IntRect& clipRect) |
168 { | 168 { |
169 m_destRect.intersect(clipRect); | 169 m_destRect.intersect(clipRect); |
170 } | 170 } |
171 | 171 |
172 void BackgroundImageGeometry::calculate(const LayoutBoxModelObject& obj, const L
ayoutBoxModelObject* paintContainer, | 172 void BackgroundImageGeometry::calculate(const LayoutBoxModelObject& obj, const L
ayoutBoxModelObject* paintContainer, |
173 const GlobalPaintFlags globalPaintFlags, const FillLayer& fillLayer, const L
ayoutRect& paintRect, | 173 const GlobalPaintFlags globalPaintFlags, const FillLayer& fillLayer, const L
ayoutRect& paintRect) |
174 const LayoutObject* backgroundObject) | |
175 { | 174 { |
176 LayoutUnit left = 0; | 175 LayoutUnit left = 0; |
177 LayoutUnit top = 0; | 176 LayoutUnit top = 0; |
178 IntSize positioningAreaSize; | 177 IntSize positioningAreaSize; |
179 IntRect snappedPaintRect = pixelSnappedIntRect(paintRect); | 178 IntRect snappedPaintRect = pixelSnappedIntRect(paintRect); |
180 bool isLayoutView = obj.isLayoutView(); | 179 bool isLayoutView = obj.isLayoutView(); |
181 const LayoutBox* rootBox = nullptr; | 180 const LayoutBox* rootBox = nullptr; |
182 if (isLayoutView) { | 181 if (isLayoutView) { |
183 // It is only possible reach here when root element has a box. | 182 // It is only possible reach here when root element has a box. |
184 Element* documentElement = obj.document().documentElement(); | 183 Element* documentElement = obj.document().documentElement(); |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
250 | 249 |
251 if (paintContainer) { | 250 if (paintContainer) { |
252 IntPoint absoluteContainerOffset = roundedIntPoint(paintContainer->l
ocalToAbsolute(FloatPoint())); | 251 IntPoint absoluteContainerOffset = roundedIntPoint(paintContainer->l
ocalToAbsolute(FloatPoint())); |
253 viewportRect.moveBy(-absoluteContainerOffset); | 252 viewportRect.moveBy(-absoluteContainerOffset); |
254 } | 253 } |
255 | 254 |
256 setDestRect(viewportRect); | 255 setDestRect(viewportRect); |
257 positioningAreaSize = destRect().size(); | 256 positioningAreaSize = destRect().size(); |
258 } | 257 } |
259 | 258 |
260 const LayoutObject* clientForBackgroundImage = backgroundObject ? background
Object : &obj; | |
261 IntSize fillTileSize = calculateFillTileSize(positioningBox, fillLayer, posi
tioningAreaSize); | 259 IntSize fillTileSize = calculateFillTileSize(positioningBox, fillLayer, posi
tioningAreaSize); |
262 fillLayer.image()->setContainerSizeForLayoutObject(clientForBackgroundImage,
fillTileSize, obj.style()->effectiveZoom()); | |
263 setTileSize(fillTileSize); | 260 setTileSize(fillTileSize); |
| 261 setImageContainerSize(fillTileSize); |
264 | 262 |
265 EFillRepeat backgroundRepeatX = fillLayer.repeatX(); | 263 EFillRepeat backgroundRepeatX = fillLayer.repeatX(); |
266 EFillRepeat backgroundRepeatY = fillLayer.repeatY(); | 264 EFillRepeat backgroundRepeatY = fillLayer.repeatY(); |
267 int availableWidth = positioningAreaSize.width() - tileSize().width(); | 265 int availableWidth = positioningAreaSize.width() - tileSize().width(); |
268 int availableHeight = positioningAreaSize.height() - tileSize().height(); | 266 int availableHeight = positioningAreaSize.height() - tileSize().height(); |
269 | 267 |
270 LayoutUnit computedXPosition = roundedMinimumValueForLength(fillLayer.xPosit
ion(), availableWidth); | 268 LayoutUnit computedXPosition = roundedMinimumValueForLength(fillLayer.xPosit
ion(), availableWidth); |
271 if (backgroundRepeatX == RoundFill && positioningAreaSize.width() > 0 && fil
lTileSize.width() > 0) { | 269 if (backgroundRepeatX == RoundFill && positioningAreaSize.width() > 0 && fil
lTileSize.width() > 0) { |
272 long nrTiles = std::max(1l, lroundf((float)positioningAreaSize.width() /
fillTileSize.width())); | 270 long nrTiles = std::max(1l, lroundf((float)positioningAreaSize.width() /
fillTileSize.width())); |
273 | 271 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
345 setSpaceSize(IntSize(spaceSize().width(), 0)); | 343 setSpaceSize(IntSize(spaceSize().width(), 0)); |
346 } | 344 } |
347 | 345 |
348 if (fixedAttachment) | 346 if (fixedAttachment) |
349 useFixedAttachment(snappedPaintRect.location()); | 347 useFixedAttachment(snappedPaintRect.location()); |
350 | 348 |
351 clip(snappedPaintRect); | 349 clip(snappedPaintRect); |
352 } | 350 } |
353 | 351 |
354 } // namespace blink | 352 } // namespace blink |
OLD | NEW |