| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. | 2 * Copyright (C) 2006, 2007, 2008, 2009, 2010, 2011, 2012 Apple Inc. All rights
reserved. |
| 3 * | 3 * |
| 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. | 4 * Portions are Copyright (C) 1998 Netscape Communications Corporation. |
| 5 * | 5 * |
| 6 * Other contributors: | 6 * Other contributors: |
| 7 * Robert O'Callahan <roc+@cs.cmu.edu> | 7 * Robert O'Callahan <roc+@cs.cmu.edu> |
| 8 * David Baron <dbaron@fas.harvard.edu> | 8 * David Baron <dbaron@fas.harvard.edu> |
| 9 * Christian Biesinger <cbiesinger@web.de> | 9 * Christian Biesinger <cbiesinger@web.de> |
| 10 * Randall Jesup <rjesup@wgate.com> | 10 * Randall Jesup <rjesup@wgate.com> |
| (...skipping 1992 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2003 | 2003 |
| 2004 if (paintFlags & PaintLayerPaintingRootBackgroundOnly && !renderer()->isRend
erView() && !renderer()->isRoot()) | 2004 if (paintFlags & PaintLayerPaintingRootBackgroundOnly && !renderer()->isRend
erView() && !renderer()->isRoot()) |
| 2005 return; | 2005 return; |
| 2006 | 2006 |
| 2007 // Ensure our lists are up-to-date. | 2007 // Ensure our lists are up-to-date. |
| 2008 m_stackingNode->updateLayerListsIfNeeded(); | 2008 m_stackingNode->updateLayerListsIfNeeded(); |
| 2009 | 2009 |
| 2010 LayoutPoint offsetFromRoot; | 2010 LayoutPoint offsetFromRoot; |
| 2011 convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); | 2011 convertToLayerCoords(paintingInfo.rootLayer, offsetFromRoot); |
| 2012 | 2012 |
| 2013 IntRect rootRelativeBounds; | 2013 if (compositingState() == PaintsIntoOwnBacking) |
| 2014 offsetFromRoot.move(m_compositedLayerMapping->subpixelAccumulation()); |
| 2015 |
| 2016 LayoutRect rootRelativeBounds; |
| 2014 bool rootRelativeBoundsComputed = false; | 2017 bool rootRelativeBoundsComputed = false; |
| 2015 | 2018 |
| 2016 // Apply clip-path to context. | 2019 // Apply clip-path to context. |
| 2017 bool hasClipPath = false; | 2020 bool hasClipPath = false; |
| 2018 RenderStyle* style = renderer()->style(); | 2021 RenderStyle* style = renderer()->style(); |
| 2019 RenderSVGResourceClipper* resourceClipper = 0; | 2022 RenderSVGResourceClipper* resourceClipper = 0; |
| 2020 ClipperContext clipperContext; | 2023 ClipperContext clipperContext; |
| 2021 if (renderer()->hasClipPath() && !context->paintingDisabled() && style) { | 2024 if (renderer()->hasClipPath() && !context->paintingDisabled() && style) { |
| 2022 ASSERT(style->clipPath()); | 2025 ASSERT(style->clipPath()); |
| 2023 if (style->clipPath()->getOperationType() == ClipPathOperation::SHAPE) { | 2026 if (style->clipPath()->getOperationType() == ClipPathOperation::SHAPE) { |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2125 paintBehavior |= PaintBehaviorSkipRootBackground; | 2128 paintBehavior |= PaintBehaviorSkipRootBackground; |
| 2126 else if (paintFlags & PaintLayerPaintingRootBackgroundOnly) | 2129 else if (paintFlags & PaintLayerPaintingRootBackgroundOnly) |
| 2127 paintBehavior |= PaintBehaviorRootBackgroundOnly; | 2130 paintBehavior |= PaintBehaviorRootBackgroundOnly; |
| 2128 | 2131 |
| 2129 LayerFragments layerFragments; | 2132 LayerFragments layerFragments; |
| 2130 if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars)
{ | 2133 if (shouldPaintContent || shouldPaintOutline || isPaintingOverlayScrollbars)
{ |
| 2131 // Collect the fragments. This will compute the clip rectangles and pain
t offsets for each layer fragment, as well as whether or not the content of each | 2134 // Collect the fragments. This will compute the clip rectangles and pain
t offsets for each layer fragment, as well as whether or not the content of each |
| 2132 // fragment should paint. | 2135 // fragment should paint. |
| 2133 collectFragments(layerFragments, localPaintingInfo.rootLayer, localPaint
ingInfo.region, localPaintingInfo.paintDirtyRect, | 2136 collectFragments(layerFragments, localPaintingInfo.rootLayer, localPaint
ingInfo.region, localPaintingInfo.paintDirtyRect, |
| 2134 (paintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects : P
aintingClipRects, IgnoreOverlayScrollbarSize, | 2137 (paintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects : P
aintingClipRects, IgnoreOverlayScrollbarSize, |
| 2135 (isPaintingOverflowContents) ? IgnoreOverflowClip : RespectOverflowC
lip, &offsetFromRoot); | 2138 (isPaintingOverflowContents) ? IgnoreOverflowClip : RespectOverflowC
lip, &offsetFromRoot, localPaintingInfo.subPixelAccumulation); |
| 2136 updatePaintingInfoForFragments(layerFragments, localPaintingInfo, paintF
lags, shouldPaintContent, &offsetFromRoot); | 2139 updatePaintingInfoForFragments(layerFragments, localPaintingInfo, paintF
lags, shouldPaintContent, &offsetFromRoot); |
| 2137 } | 2140 } |
| 2138 | 2141 |
| 2139 if (shouldPaintBackground) | 2142 if (shouldPaintBackground) |
| 2140 paintBackgroundForFragments(layerFragments, context, transparencyLayerCo
ntext, paintingInfo.paintDirtyRect, haveTransparency, | 2143 paintBackgroundForFragments(layerFragments, context, transparencyLayerCo
ntext, paintingInfo.paintDirtyRect, haveTransparency, |
| 2141 localPaintingInfo, paintBehavior, paintingRootForRenderer); | 2144 localPaintingInfo, paintBehavior, paintingRootForRenderer); |
| 2142 | 2145 |
| 2143 if (shouldPaintNegZOrderList) | 2146 if (shouldPaintNegZOrderList) |
| 2144 paintList(m_stackingNode->negZOrderList(), context, localPaintingInfo, p
aintFlags); | 2147 paintList(m_stackingNode->negZOrderList(), context, localPaintingInfo, p
aintFlags); |
| 2145 | 2148 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2230 RenderLayer* childLayer = list->at(i)->layer(); | 2233 RenderLayer* childLayer = list->at(i)->layer(); |
| 2231 if (!childLayer->isPaginated()) | 2234 if (!childLayer->isPaginated()) |
| 2232 childLayer->paintLayer(context, paintingInfo, paintFlags); | 2235 childLayer->paintLayer(context, paintingInfo, paintFlags); |
| 2233 else | 2236 else |
| 2234 paintPaginatedChildLayer(childLayer, context, paintingInfo, paintFla
gs); | 2237 paintPaginatedChildLayer(childLayer, context, paintingInfo, paintFla
gs); |
| 2235 } | 2238 } |
| 2236 } | 2239 } |
| 2237 | 2240 |
| 2238 void RenderLayer::collectFragments(LayerFragments& fragments, const RenderLayer*
rootLayer, RenderRegion* region, const LayoutRect& dirtyRect, | 2241 void RenderLayer::collectFragments(LayerFragments& fragments, const RenderLayer*
rootLayer, RenderRegion* region, const LayoutRect& dirtyRect, |
| 2239 ClipRectsType clipRectsType, OverlayScrollbarSizeRelevancy inOverlayScrollba
rSizeRelevancy, ShouldRespectOverflowClip respectOverflowClip, const LayoutPoint
* offsetFromRoot, | 2242 ClipRectsType clipRectsType, OverlayScrollbarSizeRelevancy inOverlayScrollba
rSizeRelevancy, ShouldRespectOverflowClip respectOverflowClip, const LayoutPoint
* offsetFromRoot, |
| 2240 const LayoutRect* layerBoundingBox) | 2243 const LayoutSize& subPixelAccumulation, const LayoutRect* layerBoundingBox) |
| 2241 { | 2244 { |
| 2242 if (!enclosingPaginationLayer() || hasTransform()) { | 2245 if (!enclosingPaginationLayer() || hasTransform()) { |
| 2243 // For unpaginated layers, there is only one fragment. | 2246 // For unpaginated layers, there is only one fragment. |
| 2244 LayerFragment fragment; | 2247 LayerFragment fragment; |
| 2245 ClipRectsContext clipRectsContext(rootLayer, region, clipRectsType, inOv
erlayScrollbarSizeRelevancy, respectOverflowClip); | 2248 ClipRectsContext clipRectsContext(rootLayer, region, clipRectsType, inOv
erlayScrollbarSizeRelevancy, respectOverflowClip, subPixelAccumulation); |
| 2246 calculateRects(clipRectsContext, dirtyRect, fragment.layerBounds, fragme
nt.backgroundRect, fragment.foregroundRect, fragment.outlineRect, offsetFromRoot
); | 2249 calculateRects(clipRectsContext, dirtyRect, fragment.layerBounds, fragme
nt.backgroundRect, fragment.foregroundRect, fragment.outlineRect, offsetFromRoot
); |
| 2247 fragments.append(fragment); | 2250 fragments.append(fragment); |
| 2248 return; | 2251 return; |
| 2249 } | 2252 } |
| 2250 | 2253 |
| 2251 // Compute our offset within the enclosing pagination layer. | 2254 // Compute our offset within the enclosing pagination layer. |
| 2252 LayoutPoint offsetWithinPaginatedLayer; | 2255 LayoutPoint offsetWithinPaginatedLayer; |
| 2253 convertToLayerCoords(enclosingPaginationLayer(), offsetWithinPaginatedLayer)
; | 2256 convertToLayerCoords(enclosingPaginationLayer(), offsetWithinPaginatedLayer)
; |
| 2254 | 2257 |
| 2255 // Calculate clip rects relative to the enclosingPaginationLayer. The purpos
e of this call is to determine our bounds clipped to intermediate | 2258 // Calculate clip rects relative to the enclosingPaginationLayer. The purpos
e of this call is to determine our bounds clipped to intermediate |
| (...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2321 } | 2324 } |
| 2322 } | 2325 } |
| 2323 | 2326 |
| 2324 void RenderLayer::paintTransformedLayerIntoFragments(GraphicsContext* context, c
onst LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) | 2327 void RenderLayer::paintTransformedLayerIntoFragments(GraphicsContext* context, c
onst LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) |
| 2325 { | 2328 { |
| 2326 LayerFragments enclosingPaginationFragments; | 2329 LayerFragments enclosingPaginationFragments; |
| 2327 LayoutPoint offsetOfPaginationLayerFromRoot; | 2330 LayoutPoint offsetOfPaginationLayerFromRoot; |
| 2328 LayoutRect transformedExtent = transparencyClipBox(this, enclosingPagination
Layer(), PaintingTransparencyClipBox, RootOfTransparencyClipBox, paintingInfo.pa
intBehavior); | 2331 LayoutRect transformedExtent = transparencyClipBox(this, enclosingPagination
Layer(), PaintingTransparencyClipBox, RootOfTransparencyClipBox, paintingInfo.pa
intBehavior); |
| 2329 enclosingPaginationLayer()->collectFragments(enclosingPaginationFragments, p
aintingInfo.rootLayer, paintingInfo.region, paintingInfo.paintDirtyRect, | 2332 enclosingPaginationLayer()->collectFragments(enclosingPaginationFragments, p
aintingInfo.rootLayer, paintingInfo.region, paintingInfo.paintDirtyRect, |
| 2330 (paintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects : Paint
ingClipRects, IgnoreOverlayScrollbarSize, | 2333 (paintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects : Paint
ingClipRects, IgnoreOverlayScrollbarSize, |
| 2331 (paintFlags & PaintLayerPaintingOverflowContents) ? IgnoreOverflowClip :
RespectOverflowClip, &offsetOfPaginationLayerFromRoot, &transformedExtent); | 2334 (paintFlags & PaintLayerPaintingOverflowContents) ? IgnoreOverflowClip :
RespectOverflowClip, &offsetOfPaginationLayerFromRoot, paintingInfo.subPixelAcc
umulation, &transformedExtent); |
| 2332 | 2335 |
| 2333 for (size_t i = 0; i < enclosingPaginationFragments.size(); ++i) { | 2336 for (size_t i = 0; i < enclosingPaginationFragments.size(); ++i) { |
| 2334 const LayerFragment& fragment = enclosingPaginationFragments.at(i); | 2337 const LayerFragment& fragment = enclosingPaginationFragments.at(i); |
| 2335 | 2338 |
| 2336 // Apply the page/column clip for this fragment, as well as any clips es
tablished by layers in between us and | 2339 // Apply the page/column clip for this fragment, as well as any clips es
tablished by layers in between us and |
| 2337 // the enclosing pagination layer. | 2340 // the enclosing pagination layer. |
| 2338 LayoutRect clipRect = fragment.backgroundRect.rect(); | 2341 LayoutRect clipRect = fragment.backgroundRect.rect(); |
| 2339 | 2342 |
| 2340 // Now compute the clips within a given fragment | 2343 // Now compute the clips within a given fragment |
| 2341 if (parent() != enclosingPaginationLayer()) { | 2344 if (parent() != enclosingPaginationLayer()) { |
| 2342 enclosingPaginationLayer()->convertToLayerCoords(paintingInfo.rootLa
yer, offsetOfPaginationLayerFromRoot); | 2345 enclosingPaginationLayer()->convertToLayerCoords(paintingInfo.rootLa
yer, offsetOfPaginationLayerFromRoot); |
| 2343 | 2346 |
| 2344 ClipRectsContext clipRectsContext(enclosingPaginationLayer(), painti
ngInfo.region, (paintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects
: PaintingClipRects, | 2347 ClipRectsContext clipRectsContext(enclosingPaginationLayer(), painti
ngInfo.region, (paintFlags & PaintLayerTemporaryClipRects) ? TemporaryClipRects
: PaintingClipRects, |
| 2345 IgnoreOverlayScrollbarSize, (paintFlags & PaintLayerPaintingOver
flowContents) ? IgnoreOverflowClip : RespectOverflowClip); | 2348 IgnoreOverlayScrollbarSize, (paintFlags & PaintLayerPaintingOver
flowContents) ? IgnoreOverflowClip : RespectOverflowClip); |
| 2346 LayoutRect parentClipRect = backgroundClipRect(clipRectsContext).rec
t(); | 2349 LayoutRect parentClipRect = backgroundClipRect(clipRectsContext).rec
t(); |
| 2347 parentClipRect.moveBy(fragment.paginationOffset + offsetOfPagination
LayerFromRoot); | 2350 parentClipRect.moveBy(fragment.paginationOffset + offsetOfPagination
LayerFromRoot); |
| 2348 clipRect.intersect(parentClipRect); | 2351 clipRect.intersect(parentClipRect); |
| 2349 } | 2352 } |
| 2350 | 2353 |
| 2351 parent()->clipToRect(paintingInfo.rootLayer, context, paintingInfo.paint
DirtyRect, clipRect); | 2354 parent()->clipToRect(paintingInfo.rootLayer, context, paintingInfo.paint
DirtyRect, clipRect); |
| 2352 paintLayerByApplyingTransform(context, paintingInfo, paintFlags, fragmen
t.paginationOffset); | 2355 paintLayerByApplyingTransform(context, paintingInfo, paintFlags, fragmen
t.paginationOffset); |
| 2353 parent()->restoreClip(context, paintingInfo.paintDirtyRect, clipRect); | 2356 parent()->restoreClip(context, paintingInfo.paintDirtyRect, clipRect); |
| 2354 } | 2357 } |
| 2355 } | 2358 } |
| 2356 | 2359 |
| 2360 static inline LayoutSize subPixelAccumulationIfNeeded(const LayoutSize& subPixel
Accumulation, CompositingState compositingState) |
| 2361 { |
| 2362 // Only apply the sub-pixel accumulation if we don't paint into our own back
ing layer, otherwise the position |
| 2363 // of the renderer already includes any sub-pixel offset. |
| 2364 if (compositingState == PaintsIntoOwnBacking) |
| 2365 return LayoutSize(); |
| 2366 return subPixelAccumulation; |
| 2367 } |
| 2368 |
| 2357 void RenderLayer::paintBackgroundForFragments(const LayerFragments& layerFragmen
ts, GraphicsContext* context, GraphicsContext* transparencyLayerContext, | 2369 void RenderLayer::paintBackgroundForFragments(const LayerFragments& layerFragmen
ts, GraphicsContext* context, GraphicsContext* transparencyLayerContext, |
| 2358 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L
ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, | 2370 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L
ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, |
| 2359 RenderObject* paintingRootForRenderer) | 2371 RenderObject* paintingRootForRenderer) |
| 2360 { | 2372 { |
| 2361 for (size_t i = 0; i < layerFragments.size(); ++i) { | 2373 for (size_t i = 0; i < layerFragments.size(); ++i) { |
| 2362 const LayerFragment& fragment = layerFragments.at(i); | 2374 const LayerFragment& fragment = layerFragments.at(i); |
| 2363 if (!fragment.shouldPaintContent) | 2375 if (!fragment.shouldPaintContent) |
| 2364 continue; | 2376 continue; |
| 2365 | 2377 |
| 2366 // Begin transparency layers lazily now that we know we have to paint so
mething. | 2378 // Begin transparency layers lazily now that we know we have to paint so
mething. |
| 2367 if (haveTransparency || paintsWithBlendMode()) | 2379 if (haveTransparency || paintsWithBlendMode()) |
| 2368 beginTransparencyLayers(transparencyLayerContext, localPaintingInfo.
rootLayer, transparencyPaintDirtyRect, localPaintingInfo.paintBehavior); | 2380 beginTransparencyLayers(transparencyLayerContext, localPaintingInfo.
rootLayer, transparencyPaintDirtyRect, localPaintingInfo.paintBehavior); |
| 2369 | 2381 |
| 2370 if (localPaintingInfo.clipToDirtyRect) { | 2382 if (localPaintingInfo.clipToDirtyRect) { |
| 2371 // Paint our background first, before painting any child layers. | 2383 // Paint our background first, before painting any child layers. |
| 2372 // Establish the clip used to paint our background. | 2384 // Establish the clip used to paint our background. |
| 2373 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.backgroundRect, DoNotIncludeSelfForBorderRadius); // Bac
kground painting will handle clipping to self. | 2385 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.backgroundRect, DoNotIncludeSelfForBorderRadius); // Bac
kground painting will handle clipping to self. |
| 2374 } | 2386 } |
| 2375 | 2387 |
| 2376 // Paint the background. | 2388 // Paint the background. |
| 2377 // FIXME: Eventually we will collect the region from the fragment itself
instead of just from the paint info. | 2389 // FIXME: Eventually we will collect the region from the fragment itself
instead of just from the paint info. |
| 2378 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseBlockBackground, paintBehavior, paintingRootForRenderer, loc
alPaintingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); | 2390 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseBlockBackground, paintBehavior, paintingRootForRenderer, loc
alPaintingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); |
| 2379 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + localPaintingInfo.subPixelAccumulation)); | 2391 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + subPixelAccumulationIfNeeded(localPaintingInfo.subPixelAccu
mulation, compositingState()))); |
| 2380 | 2392 |
| 2381 if (localPaintingInfo.clipToDirtyRect) | 2393 if (localPaintingInfo.clipToDirtyRect) |
| 2382 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.back
groundRect); | 2394 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.back
groundRect); |
| 2383 } | 2395 } |
| 2384 } | 2396 } |
| 2385 | 2397 |
| 2386 void RenderLayer::paintForegroundForFragments(const LayerFragments& layerFragmen
ts, GraphicsContext* context, GraphicsContext* transparencyLayerContext, | 2398 void RenderLayer::paintForegroundForFragments(const LayerFragments& layerFragmen
ts, GraphicsContext* context, GraphicsContext* transparencyLayerContext, |
| 2387 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L
ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, | 2399 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L
ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, |
| 2388 RenderObject* paintingRootForRenderer, bool selectionOnly, bool forceBlackTe
xt) | 2400 RenderObject* paintingRootForRenderer, bool selectionOnly, bool forceBlackTe
xt) |
| 2389 { | 2401 { |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2429 const LayerFragment& fragment = layerFragments.at(i); | 2441 const LayerFragment& fragment = layerFragments.at(i); |
| 2430 if (!fragment.shouldPaintContent || fragment.foregroundRect.isEmpty()) | 2442 if (!fragment.shouldPaintContent || fragment.foregroundRect.isEmpty()) |
| 2431 continue; | 2443 continue; |
| 2432 | 2444 |
| 2433 if (shouldClip) | 2445 if (shouldClip) |
| 2434 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.foregroundRect); | 2446 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.foregroundRect); |
| 2435 | 2447 |
| 2436 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.foregroundRect
.rect()), phase, paintBehavior, paintingRootForRenderer, localPaintingInfo.regio
n, 0, 0, localPaintingInfo.rootLayer->renderer()); | 2448 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.foregroundRect
.rect()), phase, paintBehavior, paintingRootForRenderer, localPaintingInfo.regio
n, 0, 0, localPaintingInfo.rootLayer->renderer()); |
| 2437 if (phase == PaintPhaseForeground) | 2449 if (phase == PaintPhaseForeground) |
| 2438 paintInfo.overlapTestRequests = localPaintingInfo.overlapTestRequest
s; | 2450 paintInfo.overlapTestRequests = localPaintingInfo.overlapTestRequest
s; |
| 2439 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + localPaintingInfo.subPixelAccumulation)); | 2451 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + subPixelAccumulationIfNeeded(localPaintingInfo.subPixelAccu
mulation, compositingState()))); |
| 2440 | 2452 |
| 2441 if (shouldClip) | 2453 if (shouldClip) |
| 2442 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.fore
groundRect); | 2454 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.fore
groundRect); |
| 2443 } | 2455 } |
| 2444 } | 2456 } |
| 2445 | 2457 |
| 2446 void RenderLayer::paintOutlineForFragments(const LayerFragments& layerFragments,
GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, | 2458 void RenderLayer::paintOutlineForFragments(const LayerFragments& layerFragments,
GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, |
| 2447 PaintBehavior paintBehavior, RenderObject* paintingRootForRenderer) | 2459 PaintBehavior paintBehavior, RenderObject* paintingRootForRenderer) |
| 2448 { | 2460 { |
| 2449 for (size_t i = 0; i < layerFragments.size(); ++i) { | 2461 for (size_t i = 0; i < layerFragments.size(); ++i) { |
| 2450 const LayerFragment& fragment = layerFragments.at(i); | 2462 const LayerFragment& fragment = layerFragments.at(i); |
| 2451 if (fragment.outlineRect.isEmpty()) | 2463 if (fragment.outlineRect.isEmpty()) |
| 2452 continue; | 2464 continue; |
| 2453 | 2465 |
| 2454 // Paint our own outline | 2466 // Paint our own outline |
| 2455 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.outlineRect.re
ct()), PaintPhaseSelfOutline, paintBehavior, paintingRootForRenderer, localPaint
ingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); | 2467 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.outlineRect.re
ct()), PaintPhaseSelfOutline, paintBehavior, paintingRootForRenderer, localPaint
ingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); |
| 2456 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.paint
DirtyRect, fragment.outlineRect, DoNotIncludeSelfForBorderRadius); | 2468 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.paint
DirtyRect, fragment.outlineRect, DoNotIncludeSelfForBorderRadius); |
| 2457 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + localPaintingInfo.subPixelAccumulation)); | 2469 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + subPixelAccumulationIfNeeded(localPaintingInfo.subPixelAccu
mulation, compositingState()))); |
| 2458 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.outlineR
ect); | 2470 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.outlineR
ect); |
| 2459 } | 2471 } |
| 2460 } | 2472 } |
| 2461 | 2473 |
| 2462 void RenderLayer::paintMaskForFragments(const LayerFragments& layerFragments, Gr
aphicsContext* context, const LayerPaintingInfo& localPaintingInfo, | 2474 void RenderLayer::paintMaskForFragments(const LayerFragments& layerFragments, Gr
aphicsContext* context, const LayerPaintingInfo& localPaintingInfo, |
| 2463 RenderObject* paintingRootForRenderer) | 2475 RenderObject* paintingRootForRenderer) |
| 2464 { | 2476 { |
| 2465 for (size_t i = 0; i < layerFragments.size(); ++i) { | 2477 for (size_t i = 0; i < layerFragments.size(); ++i) { |
| 2466 const LayerFragment& fragment = layerFragments.at(i); | 2478 const LayerFragment& fragment = layerFragments.at(i); |
| 2467 if (!fragment.shouldPaintContent) | 2479 if (!fragment.shouldPaintContent) |
| 2468 continue; | 2480 continue; |
| 2469 | 2481 |
| 2470 if (localPaintingInfo.clipToDirtyRect) | 2482 if (localPaintingInfo.clipToDirtyRect) |
| 2471 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.backgroundRect, DoNotIncludeSelfForBorderRadius); // Mas
k painting will handle clipping to self. | 2483 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.backgroundRect, DoNotIncludeSelfForBorderRadius); // Mas
k painting will handle clipping to self. |
| 2472 | 2484 |
| 2473 // Paint the mask. | 2485 // Paint the mask. |
| 2474 // FIXME: Eventually we will collect the region from the fragment itself
instead of just from the paint info. | 2486 // FIXME: Eventually we will collect the region from the fragment itself
instead of just from the paint info. |
| 2475 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseMask, PaintBehaviorNormal, paintingRootForRenderer, localPai
ntingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); | 2487 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseMask, PaintBehaviorNormal, paintingRootForRenderer, localPai
ntingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); |
| 2476 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + localPaintingInfo.subPixelAccumulation)); | 2488 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + subPixelAccumulationIfNeeded(localPaintingInfo.subPixelAccu
mulation, compositingState()))); |
| 2477 | 2489 |
| 2478 if (localPaintingInfo.clipToDirtyRect) | 2490 if (localPaintingInfo.clipToDirtyRect) |
| 2479 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.back
groundRect); | 2491 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.back
groundRect); |
| 2480 } | 2492 } |
| 2481 } | 2493 } |
| 2482 | 2494 |
| 2483 void RenderLayer::paintChildClippingMaskForFragments(const LayerFragments& layer
Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, | 2495 void RenderLayer::paintChildClippingMaskForFragments(const LayerFragments& layer
Fragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo, |
| 2484 RenderObject* paintingRootForRenderer) | 2496 RenderObject* paintingRootForRenderer) |
| 2485 { | 2497 { |
| 2486 for (size_t i = 0; i < layerFragments.size(); ++i) { | 2498 for (size_t i = 0; i < layerFragments.size(); ++i) { |
| 2487 const LayerFragment& fragment = layerFragments.at(i); | 2499 const LayerFragment& fragment = layerFragments.at(i); |
| 2488 if (!fragment.shouldPaintContent) | 2500 if (!fragment.shouldPaintContent) |
| 2489 continue; | 2501 continue; |
| 2490 | 2502 |
| 2491 if (localPaintingInfo.clipToDirtyRect) | 2503 if (localPaintingInfo.clipToDirtyRect) |
| 2492 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.foregroundRect, IncludeSelfForBorderRadius); // Child cl
ipping mask painting will handle clipping to self. | 2504 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.p
aintDirtyRect, fragment.foregroundRect, IncludeSelfForBorderRadius); // Child cl
ipping mask painting will handle clipping to self. |
| 2493 | 2505 |
| 2494 // Paint the the clipped mask. | 2506 // Paint the the clipped mask. |
| 2495 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseClippingMask, PaintBehaviorNormal, paintingRootForRenderer,
localPaintingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); | 2507 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseClippingMask, PaintBehaviorNormal, paintingRootForRenderer,
localPaintingInfo.region, 0, 0, localPaintingInfo.rootLayer->renderer()); |
| 2496 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + localPaintingInfo.subPixelAccumulation)); | 2508 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + subPixelAccumulationIfNeeded(localPaintingInfo.subPixelAccu
mulation, compositingState()))); |
| 2497 | 2509 |
| 2498 if (localPaintingInfo.clipToDirtyRect) | 2510 if (localPaintingInfo.clipToDirtyRect) |
| 2499 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.fore
groundRect); | 2511 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.fore
groundRect); |
| 2500 } | 2512 } |
| 2501 } | 2513 } |
| 2502 | 2514 |
| 2503 void RenderLayer::paintOverflowControlsForFragments(const LayerFragments& layerF
ragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo) | 2515 void RenderLayer::paintOverflowControlsForFragments(const LayerFragments& layerF
ragments, GraphicsContext* context, const LayerPaintingInfo& localPaintingInfo) |
| 2504 { | 2516 { |
| 2505 for (size_t i = 0; i < layerFragments.size(); ++i) { | 2517 for (size_t i = 0; i < layerFragments.size(); ++i) { |
| 2506 const LayerFragment& fragment = layerFragments.at(i); | 2518 const LayerFragment& fragment = layerFragments.at(i); |
| 2507 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.paint
DirtyRect, fragment.backgroundRect); | 2519 clipToRect(localPaintingInfo.rootLayer, context, localPaintingInfo.paint
DirtyRect, fragment.backgroundRect); |
| 2508 if (RenderLayerScrollableArea* scrollableArea = this->scrollableArea()) | 2520 if (RenderLayerScrollableArea* scrollableArea = this->scrollableArea()) |
| 2509 scrollableArea->paintOverflowControls(context, roundedIntPoint(toPoi
nt(fragment.layerBounds.location() - renderBoxLocation() + localPaintingInfo.sub
PixelAccumulation)), pixelSnappedIntRect(fragment.backgroundRect.rect()), true); | 2521 scrollableArea->paintOverflowControls(context, roundedIntPoint(toPoi
nt(fragment.layerBounds.location() - renderBoxLocation() + subPixelAccumulationI
fNeeded(localPaintingInfo.subPixelAccumulation, compositingState()))), pixelSnap
pedIntRect(fragment.backgroundRect.rect()), true); |
| 2510 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.backgrou
ndRect); | 2522 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.backgrou
ndRect); |
| 2511 } | 2523 } |
| 2512 } | 2524 } |
| 2513 | 2525 |
| 2514 void RenderLayer::paintPaginatedChildLayer(RenderLayer* childLayer, GraphicsCont
ext* context, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) | 2526 void RenderLayer::paintPaginatedChildLayer(RenderLayer* childLayer, GraphicsCont
ext* context, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) |
| 2515 { | 2527 { |
| 2516 // We need to do multiple passes, breaking up our child layer into strips. | 2528 // We need to do multiple passes, breaking up our child layer into strips. |
| 2517 Vector<RenderLayer*> columnLayers; | 2529 Vector<RenderLayer*> columnLayers; |
| 2518 RenderLayerStackingNode* ancestorNode = m_stackingNode->isNormalFlowOnly() ?
parent()->stackingNode() : m_stackingNode->ancestorStackingContainerNode(); | 2530 RenderLayerStackingNode* ancestorNode = m_stackingNode->isNormalFlowOnly() ?
parent()->stackingNode() : m_stackingNode->ancestorStackingContainerNode(); |
| 2519 for (RenderLayer* curr = childLayer->parent(); curr; curr = curr->parent())
{ | 2531 for (RenderLayer* curr = childLayer->parent(); curr; curr = curr->parent())
{ |
| (...skipping 440 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2960 return false; | 2972 return false; |
| 2961 } | 2973 } |
| 2962 | 2974 |
| 2963 RenderLayer* RenderLayer::hitTestTransformedLayerInFragments(RenderLayer* rootLa
yer, RenderLayer* containerLayer, const HitTestRequest& request, HitTestResult&
result, | 2975 RenderLayer* RenderLayer::hitTestTransformedLayerInFragments(RenderLayer* rootLa
yer, RenderLayer* containerLayer, const HitTestRequest& request, HitTestResult&
result, |
| 2964 const LayoutRect& hitTestRect, const HitTestLocation& hitTestLocation, const
HitTestingTransformState* transformState, double* zOffset) | 2976 const LayoutRect& hitTestRect, const HitTestLocation& hitTestLocation, const
HitTestingTransformState* transformState, double* zOffset) |
| 2965 { | 2977 { |
| 2966 LayerFragments enclosingPaginationFragments; | 2978 LayerFragments enclosingPaginationFragments; |
| 2967 LayoutPoint offsetOfPaginationLayerFromRoot; | 2979 LayoutPoint offsetOfPaginationLayerFromRoot; |
| 2968 LayoutRect transformedExtent = transparencyClipBox(this, enclosingPagination
Layer(), HitTestingTransparencyClipBox, RootOfTransparencyClipBox); | 2980 LayoutRect transformedExtent = transparencyClipBox(this, enclosingPagination
Layer(), HitTestingTransparencyClipBox, RootOfTransparencyClipBox); |
| 2969 enclosingPaginationLayer()->collectFragments(enclosingPaginationFragments, r
ootLayer, hitTestLocation.region(), hitTestRect, | 2981 enclosingPaginationLayer()->collectFragments(enclosingPaginationFragments, r
ootLayer, hitTestLocation.region(), hitTestRect, |
| 2970 RootRelativeClipRects, IncludeOverlayScrollbarSize, RespectOverflowClip,
&offsetOfPaginationLayerFromRoot, &transformedExtent); | 2982 RootRelativeClipRects, IncludeOverlayScrollbarSize, RespectOverflowClip,
&offsetOfPaginationLayerFromRoot, LayoutSize(), &transformedExtent); |
| 2971 | 2983 |
| 2972 for (int i = enclosingPaginationFragments.size() - 1; i >= 0; --i) { | 2984 for (int i = enclosingPaginationFragments.size() - 1; i >= 0; --i) { |
| 2973 const LayerFragment& fragment = enclosingPaginationFragments.at(i); | 2985 const LayerFragment& fragment = enclosingPaginationFragments.at(i); |
| 2974 | 2986 |
| 2975 // Apply the page/column clip for this fragment, as well as any clips es
tablished by layers in between us and | 2987 // Apply the page/column clip for this fragment, as well as any clips es
tablished by layers in between us and |
| 2976 // the enclosing pagination layer. | 2988 // the enclosing pagination layer. |
| 2977 LayoutRect clipRect = fragment.backgroundRect.rect(); | 2989 LayoutRect clipRect = fragment.backgroundRect.rect(); |
| 2978 | 2990 |
| 2979 // Now compute the clips within a given fragment | 2991 // Now compute the clips within a given fragment |
| 2980 if (parent() != enclosingPaginationLayer()) { | 2992 if (parent() != enclosingPaginationLayer()) { |
| (...skipping 299 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3280 if (offsetFromRoot) | 3292 if (offsetFromRoot) |
| 3281 offset = *offsetFromRoot; | 3293 offset = *offsetFromRoot; |
| 3282 else | 3294 else |
| 3283 convertToLayerCoords(clipRectsContext.rootLayer, offset); | 3295 convertToLayerCoords(clipRectsContext.rootLayer, offset); |
| 3284 layerBounds = LayoutRect(offset, size()); | 3296 layerBounds = LayoutRect(offset, size()); |
| 3285 | 3297 |
| 3286 // Update the clip rects that will be passed to child layers. | 3298 // Update the clip rects that will be passed to child layers. |
| 3287 if (renderer()->hasOverflowClip()) { | 3299 if (renderer()->hasOverflowClip()) { |
| 3288 // This layer establishes a clip of some kind. | 3300 // This layer establishes a clip of some kind. |
| 3289 if (this != clipRectsContext.rootLayer || clipRectsContext.respectOverfl
owClip == RespectOverflowClip) { | 3301 if (this != clipRectsContext.rootLayer || clipRectsContext.respectOverfl
owClip == RespectOverflowClip) { |
| 3290 foregroundRect.intersect(toRenderBox(renderer())->overflowClipRect(o
ffset, clipRectsContext.region, clipRectsContext.overlayScrollbarSizeRelevancy))
; | 3302 foregroundRect.intersect(toRenderBox(renderer())->overflowClipRect(o
ffset + clipRectsContext.subPixelAccumulation, clipRectsContext.region, clipRect
sContext.overlayScrollbarSizeRelevancy)); |
| 3291 if (renderer()->style()->hasBorderRadius()) | 3303 if (renderer()->style()->hasBorderRadius()) |
| 3292 foregroundRect.setHasRadius(true); | 3304 foregroundRect.setHasRadius(true); |
| 3293 } | 3305 } |
| 3294 | 3306 |
| 3295 // If we establish an overflow clip at all, then go ahead and make sure
our background | 3307 // If we establish an overflow clip at all, then go ahead and make sure
our background |
| 3296 // rect is intersected with our layer's bounds including our visual over
flow, | 3308 // rect is intersected with our layer's bounds including our visual over
flow, |
| 3297 // since any visual overflow like box-shadow or border-outset is not cli
pped by overflow:auto/hidden. | 3309 // since any visual overflow like box-shadow or border-outset is not cli
pped by overflow:auto/hidden. |
| 3298 if (renderBox()->hasVisualOverflow()) { | 3310 if (renderBox()->hasVisualOverflow()) { |
| 3299 // FIXME: Perhaps we should be propagating the borderbox as the clip
rect for children, even though | 3311 // FIXME: Perhaps we should be propagating the borderbox as the clip
rect for children, even though |
| 3300 // we may need to inflate our clip specifically for shadows o
r outsets. | 3312 // we may need to inflate our clip specifically for shadows o
r outsets. |
| 3301 // FIXME: Does not do the right thing with CSS regions yet, since we
don't yet factor in the | 3313 // FIXME: Does not do the right thing with CSS regions yet, since we
don't yet factor in the |
| 3302 // individual region boxes as overflow. | 3314 // individual region boxes as overflow. |
| 3303 LayoutRect layerBoundsWithVisualOverflow = renderBox()->visualOverfl
owRect(); | 3315 LayoutRect layerBoundsWithVisualOverflow = renderBox()->visualOverfl
owRect(); |
| 3304 renderBox()->flipForWritingMode(layerBoundsWithVisualOverflow); // L
ayers are in physical coordinates, so the overflow has to be flipped. | 3316 renderBox()->flipForWritingMode(layerBoundsWithVisualOverflow); // L
ayers are in physical coordinates, so the overflow has to be flipped. |
| 3305 layerBoundsWithVisualOverflow.moveBy(offset); | 3317 layerBoundsWithVisualOverflow.moveBy(offset + clipRectsContext.subPi
xelAccumulation); |
| 3306 if (this != clipRectsContext.rootLayer || clipRectsContext.respectOv
erflowClip == RespectOverflowClip) | 3318 if (this != clipRectsContext.rootLayer || clipRectsContext.respectOv
erflowClip == RespectOverflowClip) |
| 3307 backgroundRect.intersect(layerBoundsWithVisualOverflow); | 3319 backgroundRect.intersect(layerBoundsWithVisualOverflow); |
| 3308 } else { | 3320 } else { |
| 3309 // Shift the bounds to be for our region only. | 3321 // Shift the bounds to be for our region only. |
| 3310 LayoutRect bounds = renderBox()->borderBoxRectInRegion(clipRectsCont
ext.region); | 3322 LayoutRect bounds = renderBox()->borderBoxRectInRegion(clipRectsCont
ext.region); |
| 3311 bounds.moveBy(offset); | 3323 bounds.moveBy(offset + clipRectsContext.subPixelAccumulation); |
| 3312 if (this != clipRectsContext.rootLayer || clipRectsContext.respectOv
erflowClip == RespectOverflowClip) | 3324 if (this != clipRectsContext.rootLayer || clipRectsContext.respectOv
erflowClip == RespectOverflowClip) |
| 3313 backgroundRect.intersect(bounds); | 3325 backgroundRect.intersect(bounds); |
| 3314 } | 3326 } |
| 3315 } | 3327 } |
| 3316 | 3328 |
| 3317 // CSS clip (different than clipping due to overflow) can clip to any box, e
ven if it falls outside of the border box. | 3329 // CSS clip (different than clipping due to overflow) can clip to any box, e
ven if it falls outside of the border box. |
| 3318 if (renderer()->hasClip()) { | 3330 if (renderer()->hasClip()) { |
| 3319 // Clip applies to *us* as well, so go ahead and update the damageRect. | 3331 // Clip applies to *us* as well, so go ahead and update the damageRect. |
| 3320 LayoutRect newPosClip = toRenderBox(renderer())->clipRect(offset, clipRe
ctsContext.region); | 3332 LayoutRect newPosClip = toRenderBox(renderer())->clipRect(offset + clipR
ectsContext.subPixelAccumulation, clipRectsContext.region); |
| 3321 backgroundRect.intersect(newPosClip); | 3333 backgroundRect.intersect(newPosClip); |
| 3322 foregroundRect.intersect(newPosClip); | 3334 foregroundRect.intersect(newPosClip); |
| 3323 outlineRect.intersect(newPosClip); | 3335 outlineRect.intersect(newPosClip); |
| 3324 } | 3336 } |
| 3325 } | 3337 } |
| 3326 | 3338 |
| 3327 LayoutRect RenderLayer::childrenClipRect() const | 3339 LayoutRect RenderLayer::childrenClipRect() const |
| 3328 { | 3340 { |
| 3329 // FIXME: border-radius not accounted for. | 3341 // FIXME: border-radius not accounted for. |
| 3330 // FIXME: Regions not accounted for. | 3342 // FIXME: Regions not accounted for. |
| (...skipping 186 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3517 | 3529 |
| 3518 result.moveBy(delta); | 3530 result.moveBy(delta); |
| 3519 return result; | 3531 return result; |
| 3520 } | 3532 } |
| 3521 | 3533 |
| 3522 IntRect RenderLayer::absoluteBoundingBox() const | 3534 IntRect RenderLayer::absoluteBoundingBox() const |
| 3523 { | 3535 { |
| 3524 return pixelSnappedIntRect(boundingBox(root())); | 3536 return pixelSnappedIntRect(boundingBox(root())); |
| 3525 } | 3537 } |
| 3526 | 3538 |
| 3527 IntRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, cons
t LayoutPoint* offsetFromRoot, CalculateLayerBoundsFlags flags) const | 3539 LayoutRect RenderLayer::calculateLayerBounds(const RenderLayer* ancestorLayer, c
onst LayoutPoint* offsetFromRoot, CalculateLayerBoundsFlags flags) const |
| 3528 { | 3540 { |
| 3529 if (!isSelfPaintingLayer()) | 3541 if (!isSelfPaintingLayer()) |
| 3530 return IntRect(); | 3542 return LayoutRect(); |
| 3531 | 3543 |
| 3532 // FIXME: This could be improved to do a check like hasVisibleNonCompositing
DescendantLayers() (bug 92580). | 3544 // FIXME: This could be improved to do a check like hasVisibleNonCompositing
DescendantLayers() (bug 92580). |
| 3533 if ((flags & ExcludeHiddenDescendants) && this != ancestorLayer && !hasVisib
leContent() && !hasVisibleDescendant()) | 3545 if ((flags & ExcludeHiddenDescendants) && this != ancestorLayer && !hasVisib
leContent() && !hasVisibleDescendant()) |
| 3534 return IntRect(); | 3546 return LayoutRect(); |
| 3535 | 3547 |
| 3536 RenderLayerModelObject* renderer = this->renderer(); | 3548 RenderLayerModelObject* renderer = this->renderer(); |
| 3537 | 3549 |
| 3538 if (isRootLayer()) { | 3550 if (isRootLayer()) { |
| 3539 // The root layer is always just the size of the document. | 3551 // The root layer is always just the size of the document. |
| 3540 return renderer->view()->unscaledDocumentRect(); | 3552 return renderer->view()->unscaledDocumentRect(); |
| 3541 } | 3553 } |
| 3542 | 3554 |
| 3543 LayoutRect boundingBoxRect = localBoundingBox(flags); | 3555 LayoutRect boundingBoxRect = localBoundingBox(flags); |
| 3544 | 3556 |
| (...skipping 20 matching lines...) Expand all Loading... |
| 3565 | 3577 |
| 3566 if (flags & UseLocalClipRectIfPossible) { | 3578 if (flags & UseLocalClipRectIfPossible) { |
| 3567 LayoutRect localClipRect = this->localClipRect(); | 3579 LayoutRect localClipRect = this->localClipRect(); |
| 3568 if (localClipRect != PaintInfo::infiniteRect()) { | 3580 if (localClipRect != PaintInfo::infiniteRect()) { |
| 3569 if ((flags & IncludeSelfTransform) && shouldIncludeTransform) | 3581 if ((flags & IncludeSelfTransform) && shouldIncludeTransform) |
| 3570 localClipRect = transform()->mapRect(localClipRect); | 3582 localClipRect = transform()->mapRect(localClipRect); |
| 3571 | 3583 |
| 3572 LayoutPoint ancestorRelOffset; | 3584 LayoutPoint ancestorRelOffset; |
| 3573 convertToLayerCoords(ancestorLayer, ancestorRelOffset); | 3585 convertToLayerCoords(ancestorLayer, ancestorRelOffset); |
| 3574 localClipRect.moveBy(ancestorRelOffset); | 3586 localClipRect.moveBy(ancestorRelOffset); |
| 3575 return pixelSnappedIntRect(localClipRect); | 3587 return localClipRect; |
| 3576 } | 3588 } |
| 3577 } | 3589 } |
| 3578 | 3590 |
| 3579 // FIXME: should probably just pass 'flags' down to descendants. | 3591 // FIXME: should probably just pass 'flags' down to descendants. |
| 3580 CalculateLayerBoundsFlags descendantFlags = DefaultCalculateLayerBoundsFlags
| (flags & ExcludeHiddenDescendants) | (flags & IncludeCompositedDescendants); | 3592 CalculateLayerBoundsFlags descendantFlags = DefaultCalculateLayerBoundsFlags
| (flags & ExcludeHiddenDescendants) | (flags & IncludeCompositedDescendants); |
| 3581 | 3593 |
| 3582 const_cast<RenderLayer*>(this)->stackingNode()->updateLayerListsIfNeeded(); | 3594 const_cast<RenderLayer*>(this)->stackingNode()->updateLayerListsIfNeeded(); |
| 3583 | 3595 |
| 3584 if (m_reflectionInfo) { | 3596 if (m_reflectionInfo) { |
| 3585 RenderLayer* reflectionLayer = m_reflectionInfo->reflectionLayer(); | 3597 RenderLayer* reflectionLayer = m_reflectionInfo->reflectionLayer(); |
| 3586 if (!reflectionLayer->compositedLayerMapping()) { | 3598 if (!reflectionLayer->compositedLayerMapping()) { |
| 3587 IntRect childUnionBounds = reflectionLayer->calculateLayerBounds(thi
s, 0, descendantFlags); | 3599 LayoutRect childUnionBounds = reflectionLayer->calculateLayerBounds(
this, 0, descendantFlags); |
| 3588 unionBounds.unite(childUnionBounds); | 3600 unionBounds.unite(childUnionBounds); |
| 3589 } | 3601 } |
| 3590 } | 3602 } |
| 3591 | 3603 |
| 3592 ASSERT(m_stackingNode->isStackingContainer() || (!m_stackingNode->posZOrderL
ist() || !m_stackingNode->posZOrderList()->size())); | 3604 ASSERT(m_stackingNode->isStackingContainer() || (!m_stackingNode->posZOrderL
ist() || !m_stackingNode->posZOrderList()->size())); |
| 3593 | 3605 |
| 3594 #if !ASSERT_DISABLED | 3606 #if !ASSERT_DISABLED |
| 3595 LayerListMutationDetector mutationChecker(const_cast<RenderLayer*>(this)->st
ackingNode()); | 3607 LayerListMutationDetector mutationChecker(const_cast<RenderLayer*>(this)->st
ackingNode()); |
| 3596 #endif | 3608 #endif |
| 3597 | 3609 |
| 3598 // FIXME: Descendants that are composited should not necessarily be skipped,
if they don't paint into their own | 3610 // FIXME: Descendants that are composited should not necessarily be skipped,
if they don't paint into their own |
| 3599 // separate backing. Instead, they ought to contribute to the bounds of the
layer we're trying to compute. | 3611 // separate backing. Instead, they ought to contribute to the bounds of the
layer we're trying to compute. |
| 3600 // This applies to all z-order lists below. | 3612 // This applies to all z-order lists below. |
| 3601 RenderLayerStackingNodeIterator iterator(*m_stackingNode.get(), AllChildren)
; | 3613 RenderLayerStackingNodeIterator iterator(*m_stackingNode.get(), AllChildren)
; |
| 3602 while (RenderLayerStackingNode* node = iterator.next()) { | 3614 while (RenderLayerStackingNode* node = iterator.next()) { |
| 3603 if (flags & IncludeCompositedDescendants || !node->layer()->compositedLa
yerMapping()) { | 3615 if (flags & IncludeCompositedDescendants || !node->layer()->compositedLa
yerMapping()) { |
| 3604 IntRect childUnionBounds = node->layer()->calculateLayerBounds(this,
0, descendantFlags); | 3616 LayoutRect childUnionBounds = node->layer()->calculateLayerBounds(th
is, 0, descendantFlags); |
| 3605 unionBounds.unite(childUnionBounds); | 3617 unionBounds.unite(childUnionBounds); |
| 3606 } | 3618 } |
| 3607 } | 3619 } |
| 3608 | 3620 |
| 3609 // FIXME: We can optimize the size of the composited layers, by not enlargin
g | 3621 // FIXME: We can optimize the size of the composited layers, by not enlargin
g |
| 3610 // filtered areas with the outsets if we know that the filter is going to re
nder in hardware. | 3622 // filtered areas with the outsets if we know that the filter is going to re
nder in hardware. |
| 3611 // https://bugs.webkit.org/show_bug.cgi?id=81239 | 3623 // https://bugs.webkit.org/show_bug.cgi?id=81239 |
| 3612 if (flags & IncludeLayerFilterOutsets) | 3624 if (flags & IncludeLayerFilterOutsets) |
| 3613 renderer->style()->filterOutsets().expandRect(unionBounds); | 3625 renderer->style()->filterOutsets().expandRect(unionBounds); |
| 3614 | 3626 |
| 3615 if ((flags & IncludeSelfTransform) && shouldIncludeTransform) { | 3627 if ((flags & IncludeSelfTransform) && shouldIncludeTransform) { |
| 3616 TransformationMatrix* affineTrans = transform(); | 3628 TransformationMatrix* affineTrans = transform(); |
| 3617 boundingBoxRect = affineTrans->mapRect(boundingBoxRect); | 3629 boundingBoxRect = affineTrans->mapRect(boundingBoxRect); |
| 3618 unionBounds = affineTrans->mapRect(unionBounds); | 3630 unionBounds = affineTrans->mapRect(unionBounds); |
| 3619 } | 3631 } |
| 3620 | 3632 |
| 3621 LayoutPoint ancestorRelOffset; | 3633 LayoutPoint ancestorRelOffset; |
| 3622 if (offsetFromRoot) | 3634 if (offsetFromRoot) |
| 3623 ancestorRelOffset = *offsetFromRoot; | 3635 ancestorRelOffset = *offsetFromRoot; |
| 3624 else | 3636 else |
| 3625 convertToLayerCoords(ancestorLayer, ancestorRelOffset); | 3637 convertToLayerCoords(ancestorLayer, ancestorRelOffset); |
| 3626 unionBounds.moveBy(ancestorRelOffset); | 3638 unionBounds.moveBy(ancestorRelOffset); |
| 3627 | 3639 |
| 3628 return pixelSnappedIntRect(unionBounds); | 3640 return unionBounds; |
| 3629 } | 3641 } |
| 3630 | 3642 |
| 3631 CompositingState RenderLayer::compositingState() const | 3643 CompositingState RenderLayer::compositingState() const |
| 3632 { | 3644 { |
| 3633 // This is computed procedurally so there is no redundant state variable tha
t | 3645 // This is computed procedurally so there is no redundant state variable tha
t |
| 3634 // can get out of sync from the real actual compositing state. | 3646 // can get out of sync from the real actual compositing state. |
| 3635 | 3647 |
| 3636 if (!m_compositedLayerMapping) | 3648 if (!m_compositedLayerMapping) |
| 3637 return NotComposited; | 3649 return NotComposited; |
| 3638 | 3650 |
| (...skipping 518 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4157 } | 4169 } |
| 4158 } | 4170 } |
| 4159 | 4171 |
| 4160 void showLayerTree(const WebCore::RenderObject* renderer) | 4172 void showLayerTree(const WebCore::RenderObject* renderer) |
| 4161 { | 4173 { |
| 4162 if (!renderer) | 4174 if (!renderer) |
| 4163 return; | 4175 return; |
| 4164 showLayerTree(renderer->enclosingLayer()); | 4176 showLayerTree(renderer->enclosingLayer()); |
| 4165 } | 4177 } |
| 4166 #endif | 4178 #endif |
| OLD | NEW |