| 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 1143 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1154 | 1154 |
| 1155 // If this layer's renderer is a child of the paintingRoot, we render uncond
itionally, which | 1155 // If this layer's renderer is a child of the paintingRoot, we render uncond
itionally, which |
| 1156 // is done by passing a nil paintingRoot down to our renderer (as if no pain
tingRoot was ever set). | 1156 // is done by passing a nil paintingRoot down to our renderer (as if no pain
tingRoot was ever set). |
| 1157 // Else, our renderer tree may or may not contain the painting root, so we p
ass that root along | 1157 // Else, our renderer tree may or may not contain the painting root, so we p
ass that root along |
| 1158 // so it will be tested against as we descend through the renderers. | 1158 // so it will be tested against as we descend through the renderers. |
| 1159 RenderObject* paintingRootForRenderer = 0; | 1159 RenderObject* paintingRootForRenderer = 0; |
| 1160 if (localPaintingInfo.paintingRoot && !renderer()->isDescendantOf(localPaint
ingInfo.paintingRoot)) | 1160 if (localPaintingInfo.paintingRoot && !renderer()->isDescendantOf(localPaint
ingInfo.paintingRoot)) |
| 1161 paintingRootForRenderer = localPaintingInfo.paintingRoot; | 1161 paintingRootForRenderer = localPaintingInfo.paintingRoot; |
| 1162 | 1162 |
| 1163 ASSERT(!(localPaintingInfo.paintBehavior & PaintBehaviorForceBlackText)); | 1163 ASSERT(!(localPaintingInfo.paintBehavior & PaintBehaviorForceBlackText)); |
| 1164 bool selectionOnly = localPaintingInfo.paintBehavior & PaintBehaviorSelecti
onOnly; | |
| 1165 | 1164 |
| 1166 bool shouldPaintBackground = isPaintingCompositedBackground && shouldPaintCo
ntent && !selectionOnly; | 1165 bool shouldPaintBackground = isPaintingCompositedBackground && shouldPaintCo
ntent; |
| 1167 bool shouldPaintNegZOrderList = (isPaintingScrollingContent && isPaintingOve
rflowContents) || (!isPaintingScrollingContent && isPaintingCompositedBackground
); | 1166 bool shouldPaintNegZOrderList = (isPaintingScrollingContent && isPaintingOve
rflowContents) || (!isPaintingScrollingContent && isPaintingCompositedBackground
); |
| 1168 bool shouldPaintOwnContents = isPaintingCompositedForeground && shouldPaintC
ontent; | 1167 bool shouldPaintOwnContents = isPaintingCompositedForeground && shouldPaintC
ontent; |
| 1169 bool shouldPaintNormalFlowAndPosZOrderLists = isPaintingCompositedForeground
; | 1168 bool shouldPaintNormalFlowAndPosZOrderLists = isPaintingCompositedForeground
; |
| 1170 bool shouldPaintOverlayScrollbars = isPaintingOverlayScrollbars; | 1169 bool shouldPaintOverlayScrollbars = isPaintingOverlayScrollbars; |
| 1171 bool shouldPaintMask = (paintFlags & PaintLayerPaintingCompositingMaskPhase)
&& shouldPaintContent && renderer()->hasMask() && !selectionOnly; | 1170 bool shouldPaintMask = (paintFlags & PaintLayerPaintingCompositingMaskPhase)
&& shouldPaintContent && renderer()->hasMask(); |
| 1172 bool shouldPaintClippingMask = (paintFlags & PaintLayerPaintingChildClipping
MaskPhase) && shouldPaintContent && !selectionOnly; | 1171 bool shouldPaintClippingMask = (paintFlags & PaintLayerPaintingChildClipping
MaskPhase) && shouldPaintContent; |
| 1173 | 1172 |
| 1174 PaintBehavior paintBehavior = PaintBehaviorNormal; | 1173 PaintBehavior paintBehavior = PaintBehaviorNormal; |
| 1175 if (paintFlags & PaintLayerPaintingSkipRootBackground) | 1174 if (paintFlags & PaintLayerPaintingSkipRootBackground) |
| 1176 paintBehavior |= PaintBehaviorSkipRootBackground; | 1175 paintBehavior |= PaintBehaviorSkipRootBackground; |
| 1177 else if (paintFlags & PaintLayerPaintingRootBackgroundOnly) | 1176 else if (paintFlags & PaintLayerPaintingRootBackgroundOnly) |
| 1178 paintBehavior |= PaintBehaviorRootBackgroundOnly; | 1177 paintBehavior |= PaintBehaviorRootBackgroundOnly; |
| 1179 | 1178 |
| 1180 if (shouldPaintBackground) { | 1179 if (shouldPaintBackground) { |
| 1181 paintBackgroundForFragments(layerFragments, context, transparencyLayerCo
ntext, paintingInfo.paintDirtyRect, haveTransparency, | 1180 paintBackgroundForFragments(layerFragments, context, transparencyLayerCo
ntext, paintingInfo.paintDirtyRect, haveTransparency, |
| 1182 localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlag
s); | 1181 localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlag
s); |
| 1183 } | 1182 } |
| 1184 | 1183 |
| 1185 if (shouldPaintNegZOrderList) | 1184 if (shouldPaintNegZOrderList) |
| 1186 paintChildren(NegativeZOrderChildren, context, paintingInfo, paintFlags)
; | 1185 paintChildren(NegativeZOrderChildren, context, paintingInfo, paintFlags)
; |
| 1187 | 1186 |
| 1188 if (shouldPaintOwnContents) { | 1187 if (shouldPaintOwnContents) { |
| 1189 paintForegroundForFragments(layerFragments, context, transparencyLayerCo
ntext, paintingInfo.paintDirtyRect, haveTransparency, | 1188 paintForegroundForFragments(layerFragments, context, transparencyLayerCo
ntext, paintingInfo.paintDirtyRect, haveTransparency, |
| 1190 localPaintingInfo, paintBehavior, paintingRootForRenderer, selection
Only, paintFlags); | 1189 localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlag
s); |
| 1191 } | 1190 } |
| 1192 | 1191 |
| 1193 if (shouldPaintOutline) | 1192 if (shouldPaintOutline) |
| 1194 paintOutlineForFragments(layerFragments, context, localPaintingInfo, pai
ntBehavior, paintingRootForRenderer, paintFlags); | 1193 paintOutlineForFragments(layerFragments, context, localPaintingInfo, pai
ntBehavior, paintingRootForRenderer, paintFlags); |
| 1195 | 1194 |
| 1196 if (shouldPaintNormalFlowAndPosZOrderLists) | 1195 if (shouldPaintNormalFlowAndPosZOrderLists) |
| 1197 paintChildren(NormalFlowChildren | PositiveZOrderChildren, context, pain
tingInfo, paintFlags); | 1196 paintChildren(NormalFlowChildren | PositiveZOrderChildren, context, pain
tingInfo, paintFlags); |
| 1198 | 1197 |
| 1199 if (shouldPaintOverlayScrollbars) | 1198 if (shouldPaintOverlayScrollbars) |
| 1200 paintOverflowControlsForFragments(layerFragments, context, localPainting
Info, paintFlags); | 1199 paintOverflowControlsForFragments(layerFragments, context, localPainting
Info, paintFlags); |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1320 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseBlockBackground, paintBehavior, paintingRootForRenderer, 0,
localPaintingInfo.rootLayer->renderer()); | 1319 PaintInfo paintInfo(context, pixelSnappedIntRect(fragment.backgroundRect
.rect()), PaintPhaseBlockBackground, paintBehavior, paintingRootForRenderer, 0,
localPaintingInfo.rootLayer->renderer()); |
| 1321 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + localPaintingInfo.subPixelAccumulation)); | 1320 renderer()->paint(paintInfo, toPoint(fragment.layerBounds.location() - r
enderBoxLocation() + localPaintingInfo.subPixelAccumulation)); |
| 1322 | 1321 |
| 1323 if (localPaintingInfo.clipToDirtyRect) | 1322 if (localPaintingInfo.clipToDirtyRect) |
| 1324 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.back
groundRect); | 1323 restoreClip(context, localPaintingInfo.paintDirtyRect, fragment.back
groundRect); |
| 1325 } | 1324 } |
| 1326 } | 1325 } |
| 1327 | 1326 |
| 1328 void RenderLayer::paintForegroundForFragments(const LayerFragments& layerFragmen
ts, GraphicsContext* context, GraphicsContext* transparencyLayerContext, | 1327 void RenderLayer::paintForegroundForFragments(const LayerFragments& layerFragmen
ts, GraphicsContext* context, GraphicsContext* transparencyLayerContext, |
| 1329 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L
ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, | 1328 const LayoutRect& transparencyPaintDirtyRect, bool haveTransparency, const L
ayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, |
| 1330 RenderObject* paintingRootForRenderer, bool selectionOnly, PaintLayerFlags p
aintFlags) | 1329 RenderObject* paintingRootForRenderer, PaintLayerFlags paintFlags) |
| 1331 { | 1330 { |
| 1332 // Begin transparency if we have something to paint. | 1331 // Begin transparency if we have something to paint. |
| 1333 if (haveTransparency) { | 1332 if (haveTransparency) { |
| 1334 for (size_t i = 0; i < layerFragments.size(); ++i) { | 1333 for (size_t i = 0; i < layerFragments.size(); ++i) { |
| 1335 const LayerFragment& fragment = layerFragments.at(i); | 1334 const LayerFragment& fragment = layerFragments.at(i); |
| 1336 if (fragment.shouldPaintContent && !fragment.foregroundRect.isEmpty(
)) { | 1335 if (fragment.shouldPaintContent && !fragment.foregroundRect.isEmpty(
)) { |
| 1337 beginTransparencyLayers(transparencyLayerContext, localPaintingI
nfo.rootLayer, transparencyPaintDirtyRect, localPaintingInfo.subPixelAccumulatio
n, localPaintingInfo.paintBehavior); | 1336 beginTransparencyLayers(transparencyLayerContext, localPaintingI
nfo.rootLayer, transparencyPaintDirtyRect, localPaintingInfo.subPixelAccumulatio
n, localPaintingInfo.paintBehavior); |
| 1338 break; | 1337 break; |
| 1339 } | 1338 } |
| 1340 } | 1339 } |
| 1341 } | 1340 } |
| 1342 | 1341 |
| 1343 // Optimize clipping for the single fragment case. | 1342 // Optimize clipping for the single fragment case. |
| 1344 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size()
== 1 && layerFragments[0].shouldPaintContent && !layerFragments[0].foregroundRe
ct.isEmpty(); | 1343 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size()
== 1 && layerFragments[0].shouldPaintContent && !layerFragments[0].foregroundRe
ct.isEmpty(); |
| 1345 if (shouldClip) | 1344 if (shouldClip) |
| 1346 clipToRect(localPaintingInfo, context, layerFragments[0].foregroundRect,
paintFlags); | 1345 clipToRect(localPaintingInfo, context, layerFragments[0].foregroundRect,
paintFlags); |
| 1347 | 1346 |
| 1348 // We have to loop through every fragment multiple times, since we have to i
ssue paint invalidations in each specific phase in order for | 1347 // We have to loop through every fragment multiple times, since we have to i
ssue paint invalidations in each specific phase in order for |
| 1349 // interleaving of the fragments to work properly. | 1348 // interleaving of the fragments to work properly. |
| 1350 paintForegroundForFragmentsWithPhase(selectionOnly ? PaintPhaseSelection : P
aintPhaseChildBlockBackgrounds, layerFragments, | 1349 paintForegroundForFragmentsWithPhase(PaintPhaseChildBlockBackgrounds, layerF
ragments, |
| 1351 context, localPaintingInfo, paintBehavior, paintingRootForRenderer, pain
tFlags); | 1350 context, localPaintingInfo, paintBehavior, paintingRootForRenderer, pain
tFlags); |
| 1352 | 1351 paintForegroundForFragmentsWithPhase(PaintPhaseForeground, layerFragments, c
ontext, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlags); |
| 1353 if (!selectionOnly) { | 1352 paintForegroundForFragmentsWithPhase(PaintPhaseChildOutlines, layerFragments
, context, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlags
); |
| 1354 paintForegroundForFragmentsWithPhase(PaintPhaseForeground, layerFragment
s, context, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintFlag
s); | |
| 1355 paintForegroundForFragmentsWithPhase(PaintPhaseChildOutlines, layerFragm
ents, context, localPaintingInfo, paintBehavior, paintingRootForRenderer, paintF
lags); | |
| 1356 } | |
| 1357 | 1353 |
| 1358 if (shouldClip) | 1354 if (shouldClip) |
| 1359 restoreClip(context, localPaintingInfo.paintDirtyRect, layerFragments[0]
.foregroundRect); | 1355 restoreClip(context, localPaintingInfo.paintDirtyRect, layerFragments[0]
.foregroundRect); |
| 1360 } | 1356 } |
| 1361 | 1357 |
| 1362 void RenderLayer::paintForegroundForFragmentsWithPhase(PaintPhase phase, const L
ayerFragments& layerFragments, GraphicsContext* context, | 1358 void RenderLayer::paintForegroundForFragmentsWithPhase(PaintPhase phase, const L
ayerFragments& layerFragments, GraphicsContext* context, |
| 1363 const LayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, Ren
derObject* paintingRootForRenderer, PaintLayerFlags paintFlags) | 1359 const LayerPaintingInfo& localPaintingInfo, PaintBehavior paintBehavior, Ren
derObject* paintingRootForRenderer, PaintLayerFlags paintFlags) |
| 1364 { | 1360 { |
| 1365 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size()
> 1; | 1361 bool shouldClip = localPaintingInfo.clipToDirtyRect && layerFragments.size()
> 1; |
| 1366 | 1362 |
| (...skipping 883 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2250 } | 2246 } |
| 2251 } | 2247 } |
| 2252 | 2248 |
| 2253 void showLayerTree(const blink::RenderObject* renderer) | 2249 void showLayerTree(const blink::RenderObject* renderer) |
| 2254 { | 2250 { |
| 2255 if (!renderer) | 2251 if (!renderer) |
| 2256 return; | 2252 return; |
| 2257 showLayerTree(renderer->enclosingLayer()); | 2253 showLayerTree(renderer->enclosingLayer()); |
| 2258 } | 2254 } |
| 2259 #endif | 2255 #endif |
| OLD | NEW |