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 92 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 103 |
104 RenderLayer::RenderLayer(RenderLayerModelObject* renderer) | 104 RenderLayer::RenderLayer(RenderLayerModelObject* renderer) |
105 : m_hasSelfPaintingLayerDescendant(false) | 105 : m_hasSelfPaintingLayerDescendant(false) |
106 , m_hasSelfPaintingLayerDescendantDirty(false) | 106 , m_hasSelfPaintingLayerDescendantDirty(false) |
107 , m_hasOutOfFlowPositionedDescendant(false) | 107 , m_hasOutOfFlowPositionedDescendant(false) |
108 , m_hasOutOfFlowPositionedDescendantDirty(true) | 108 , m_hasOutOfFlowPositionedDescendantDirty(true) |
109 , m_hasUnclippedDescendant(false) | 109 , m_hasUnclippedDescendant(false) |
110 , m_isUnclippedDescendant(false) | 110 , m_isUnclippedDescendant(false) |
111 , m_isRootLayer(renderer->isRenderView()) | 111 , m_isRootLayer(renderer->isRenderView()) |
112 , m_usedTransparency(false) | 112 , m_usedTransparency(false) |
113 , m_childLayerHasBlendMode(false) | |
114 , m_childLayerHasBlendModeStatusDirty(false) | |
115 , m_visibleContentStatusDirty(true) | 113 , m_visibleContentStatusDirty(true) |
116 , m_hasVisibleContent(false) | 114 , m_hasVisibleContent(false) |
117 , m_visibleDescendantStatusDirty(false) | 115 , m_visibleDescendantStatusDirty(false) |
118 , m_hasVisibleDescendant(false) | 116 , m_hasVisibleDescendant(false) |
119 , m_hasVisibleNonLayerContent(false) | 117 , m_hasVisibleNonLayerContent(false) |
120 , m_isPaginated(false) | 118 , m_isPaginated(false) |
121 , m_3DTransformedDescendantStatusDirty(true) | 119 , m_3DTransformedDescendantStatusDirty(true) |
122 , m_has3DTransformedDescendant(false) | 120 , m_has3DTransformedDescendant(false) |
123 , m_containsDirtyOverlayScrollbars(false) | 121 , m_containsDirtyOverlayScrollbars(false) |
124 , m_canSkipRepaintRectsUpdateOnScroll(renderer->isTableCell()) | 122 , m_canSkipRepaintRectsUpdateOnScroll(renderer->isTableCell()) |
125 , m_hasFilterInfo(false) | 123 , m_hasFilterInfo(false) |
126 , m_blendMode(blink::WebBlendModeNormal) | |
127 , m_renderer(renderer) | 124 , m_renderer(renderer) |
128 , m_parent(0) | 125 , m_parent(0) |
129 , m_previous(0) | 126 , m_previous(0) |
130 , m_next(0) | 127 , m_next(0) |
131 , m_first(0) | 128 , m_first(0) |
132 , m_last(0) | 129 , m_last(0) |
133 , m_staticInlinePosition(0) | 130 , m_staticInlinePosition(0) |
134 , m_staticBlockPosition(0) | 131 , m_staticBlockPosition(0) |
135 , m_enclosingPaginationLayer(0) | 132 , m_enclosingPaginationLayer(0) |
136 , m_groupedMapping(0) | 133 , m_groupedMapping(0) |
137 , m_repainter(renderer) | 134 , m_repainter(renderer) |
138 , m_clipper(renderer) | 135 , m_clipper(renderer) |
| 136 , m_blendInfo(renderer) |
139 { | 137 { |
140 updateStackingNode(); | 138 updateStackingNode(); |
141 | 139 |
142 m_isSelfPaintingLayer = shouldBeSelfPaintingLayer(); | 140 m_isSelfPaintingLayer = shouldBeSelfPaintingLayer(); |
143 | 141 |
144 if (!renderer->firstChild() && renderer->style()) { | 142 if (!renderer->firstChild() && renderer->style()) { |
145 m_visibleContentStatusDirty = false; | 143 m_visibleContentStatusDirty = false; |
146 m_hasVisibleContent = renderer->style()->visibility() == VISIBLE; | 144 m_hasVisibleContent = renderer->style()->visibility() == VISIBLE; |
147 } | 145 } |
148 | 146 |
(...skipping 359 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
508 child->updateLayerPositionsAfterScroll(geometryMap, flags); | 506 child->updateLayerPositionsAfterScroll(geometryMap, flags); |
509 | 507 |
510 // We don't update our reflection as scrolling is a translation which does n
ot change the size() | 508 // We don't update our reflection as scrolling is a translation which does n
ot change the size() |
511 // of an object, thus RenderReplica will still repaint itself properly as th
e layer position was | 509 // of an object, thus RenderReplica will still repaint itself properly as th
e layer position was |
512 // updated above. | 510 // updated above. |
513 | 511 |
514 if (geometryMap) | 512 if (geometryMap) |
515 geometryMap->popMappingsToAncestor(parent()); | 513 geometryMap->popMappingsToAncestor(parent()); |
516 } | 514 } |
517 | 515 |
518 bool RenderLayer::hasBlendMode() const | |
519 { | |
520 return RuntimeEnabledFeatures::cssCompositingEnabled() && renderer()->hasBle
ndMode(); | |
521 } | |
522 | |
523 void RenderLayer::updateBlendMode() | |
524 { | |
525 if (!RuntimeEnabledFeatures::cssCompositingEnabled()) | |
526 return; | |
527 | |
528 bool hadBlendMode = m_blendMode != blink::WebBlendModeNormal; | |
529 blink::WebBlendMode newBlendMode = renderer()->style()->blendMode(); | |
530 if (newBlendMode != m_blendMode) { | |
531 m_blendMode = newBlendMode; | |
532 | |
533 // Only update the flag if a blend mode is set or unset. | |
534 if (parent() && (!hadBlendMode || !hasBlendMode())) | |
535 parent()->dirtyAncestorChainBlendedDescendantStatus(); | |
536 | |
537 if (hasCompositedLayerMapping()) | |
538 compositedLayerMapping()->setBlendMode(newBlendMode); | |
539 } | |
540 } | |
541 | |
542 void RenderLayer::updateTransform() | 516 void RenderLayer::updateTransform() |
543 { | 517 { |
544 // hasTransform() on the renderer is also true when there is transform-style
: preserve-3d or perspective set, | 518 // hasTransform() on the renderer is also true when there is transform-style
: preserve-3d or perspective set, |
545 // so check style too. | 519 // so check style too. |
546 bool hasTransform = renderer()->hasTransform() && renderer()->style()->hasTr
ansform(); | 520 bool hasTransform = renderer()->hasTransform() && renderer()->style()->hasTr
ansform(); |
547 bool had3DTransform = has3DTransform(); | 521 bool had3DTransform = has3DTransform(); |
548 | 522 |
549 bool hadTransform = m_transform; | 523 bool hadTransform = m_transform; |
550 if (hasTransform != hadTransform) { | 524 if (hasTransform != hadTransform) { |
551 if (hasTransform) | 525 if (hasTransform) |
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
751 { | 725 { |
752 for (RenderLayer* layer = this; layer; layer = layer->parent()) { | 726 for (RenderLayer* layer = this; layer; layer = layer->parent()) { |
753 if (!layer->m_visibleDescendantStatusDirty && layer->hasVisibleDescendan
t()) | 727 if (!layer->m_visibleDescendantStatusDirty && layer->hasVisibleDescendan
t()) |
754 break; | 728 break; |
755 | 729 |
756 layer->m_hasVisibleDescendant = true; | 730 layer->m_hasVisibleDescendant = true; |
757 layer->m_visibleDescendantStatusDirty = false; | 731 layer->m_visibleDescendantStatusDirty = false; |
758 } | 732 } |
759 } | 733 } |
760 | 734 |
761 void RenderLayer::dirtyAncestorChainBlendedDescendantStatus() | |
762 { | |
763 for (RenderLayer* layer = this; layer; layer = layer->parent()) { | |
764 if (layer->m_childLayerHasBlendModeStatusDirty) | |
765 break; | |
766 | |
767 layer->m_childLayerHasBlendModeStatusDirty = true; | |
768 | |
769 if (layer->stackingNode()->isStackingContext()) | |
770 break; | |
771 } | |
772 } | |
773 | |
774 void RenderLayer::setAncestorChainBlendedDescendant() | |
775 { | |
776 for (RenderLayer* layer = this; layer; layer = layer->parent()) { | |
777 if (!layer->m_childLayerHasBlendModeStatusDirty && layer->childLayerHasB
lendMode()) | |
778 break; | |
779 | |
780 layer->m_childLayerHasBlendMode = true; | |
781 layer->m_childLayerHasBlendModeStatusDirty = false; | |
782 | |
783 if (layer->stackingNode()->isStackingContext()) | |
784 break; | |
785 } | |
786 } | |
787 | |
788 void RenderLayer::updateHasUnclippedDescendant() | 735 void RenderLayer::updateHasUnclippedDescendant() |
789 { | 736 { |
790 TRACE_EVENT0("blink_rendering", "RenderLayer::updateHasUnclippedDescendant")
; | 737 TRACE_EVENT0("blink_rendering", "RenderLayer::updateHasUnclippedDescendant")
; |
791 ASSERT(renderer()->isOutOfFlowPositioned()); | 738 ASSERT(renderer()->isOutOfFlowPositioned()); |
792 if (!m_hasVisibleContent && !m_hasVisibleDescendant) | 739 if (!m_hasVisibleContent && !m_hasVisibleDescendant) |
793 return; | 740 return; |
794 | 741 |
795 FrameView* frameView = renderer()->view()->frameView(); | 742 FrameView* frameView = renderer()->view()->frameView(); |
796 if (!frameView) | 743 if (!frameView) |
797 return; | 744 return; |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
851 | 798 |
852 if (m_hasVisibleDescendant && m_hasSelfPaintingLayerDescendant && ha
sOutOfFlowPositionedDescendant) | 799 if (m_hasVisibleDescendant && m_hasSelfPaintingLayerDescendant && ha
sOutOfFlowPositionedDescendant) |
853 break; | 800 break; |
854 } | 801 } |
855 | 802 |
856 m_visibleDescendantStatusDirty = false; | 803 m_visibleDescendantStatusDirty = false; |
857 m_hasSelfPaintingLayerDescendantDirty = false; | 804 m_hasSelfPaintingLayerDescendantDirty = false; |
858 m_hasOutOfFlowPositionedDescendantDirty = false; | 805 m_hasOutOfFlowPositionedDescendantDirty = false; |
859 } | 806 } |
860 | 807 |
861 if (m_childLayerHasBlendModeStatusDirty) { | 808 if (m_blendInfo.childLayerHasBlendModeStatusDirty()) { |
862 m_childLayerHasBlendMode = false; | 809 m_blendInfo.setChildLayerHasBlendMode(false); |
863 for (RenderLayer* child = firstChild(); child; child = child->nextSiblin
g()) { | 810 for (RenderLayer* child = firstChild(); child; child = child->nextSiblin
g()) { |
864 if (!child->stackingNode()->isStackingContext()) | 811 if (!child->stackingNode()->isStackingContext()) |
865 child->updateDescendantDependentFlags(); | 812 child->updateDescendantDependentFlags(); |
866 | 813 |
867 bool childLayerHasBlendMode = child->paintsWithBlendMode() || (child
->m_childLayerHasBlendMode && !child->stackingNode()->isStackingContext()); | 814 bool childLayerHasBlendMode = child->blendInfo().childLayerHasBlendM
odeWhileDirty(); |
868 m_childLayerHasBlendMode |= childLayerHasBlendMode; | 815 childLayerHasBlendMode |= child->paintsWithBlendMode() |
| 816 || (childLayerHasBlendMode && !child->stackingNode()->isStacking
Context()); |
869 | 817 |
870 if (m_childLayerHasBlendMode) | 818 m_blendInfo.setChildLayerHasBlendMode(childLayerHasBlendMode); |
| 819 |
| 820 if (childLayerHasBlendMode) |
871 break; | 821 break; |
872 } | 822 } |
873 m_childLayerHasBlendModeStatusDirty = false; | 823 m_blendInfo.setChildLayerHasBlendModeStatusDirty(false); |
874 } | 824 } |
875 | 825 |
876 if (m_visibleContentStatusDirty) { | 826 if (m_visibleContentStatusDirty) { |
877 if (renderer()->style()->visibility() == VISIBLE) | 827 if (renderer()->style()->visibility() == VISIBLE) |
878 m_hasVisibleContent = true; | 828 m_hasVisibleContent = true; |
879 else { | 829 else { |
880 // layer may be hidden but still have some visible content, check fo
r this | 830 // layer may be hidden but still have some visible content, check fo
r this |
881 m_hasVisibleContent = false; | 831 m_hasVisibleContent = false; |
882 RenderObject* r = renderer()->firstChild(); | 832 RenderObject* r = renderer()->firstChild(); |
883 while (r) { | 833 while (r) { |
(...skipping 438 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1322 return clipRect; | 1272 return clipRect; |
1323 } | 1273 } |
1324 | 1274 |
1325 LayoutRect RenderLayer::paintingExtent(const RenderLayer* rootLayer, const Layou
tRect& paintDirtyRect, PaintBehavior paintBehavior) | 1275 LayoutRect RenderLayer::paintingExtent(const RenderLayer* rootLayer, const Layou
tRect& paintDirtyRect, PaintBehavior paintBehavior) |
1326 { | 1276 { |
1327 return intersection(transparencyClipBox(this, rootLayer, PaintingTransparenc
yClipBox, RootOfTransparencyClipBox, paintBehavior), paintDirtyRect); | 1277 return intersection(transparencyClipBox(this, rootLayer, PaintingTransparenc
yClipBox, RootOfTransparencyClipBox, paintBehavior), paintDirtyRect); |
1328 } | 1278 } |
1329 | 1279 |
1330 void RenderLayer::beginTransparencyLayers(GraphicsContext* context, const Render
Layer* rootLayer, const LayoutRect& paintDirtyRect, PaintBehavior paintBehavior) | 1280 void RenderLayer::beginTransparencyLayers(GraphicsContext* context, const Render
Layer* rootLayer, const LayoutRect& paintDirtyRect, PaintBehavior paintBehavior) |
1331 { | 1281 { |
1332 bool createTransparencyLayerForBlendMode = m_stackingNode->isStackingContext
() && m_childLayerHasBlendMode; | 1282 bool createTransparencyLayerForBlendMode = m_stackingNode->isStackingContext
() && m_blendInfo.childLayerHasBlendMode(); |
1333 if (context->paintingDisabled() || ((paintsWithTransparency(paintBehavior) |
| paintsWithBlendMode() || createTransparencyLayerForBlendMode) && m_usedTranspa
rency)) | 1283 if (context->paintingDisabled() || ((paintsWithTransparency(paintBehavior) |
| paintsWithBlendMode() || createTransparencyLayerForBlendMode) && m_usedTranspa
rency)) |
1334 return; | 1284 return; |
1335 | 1285 |
1336 RenderLayer* ancestor = transparentPaintingAncestor(); | 1286 RenderLayer* ancestor = transparentPaintingAncestor(); |
1337 if (ancestor) | 1287 if (ancestor) |
1338 ancestor->beginTransparencyLayers(context, rootLayer, paintDirtyRect, pa
intBehavior); | 1288 ancestor->beginTransparencyLayers(context, rootLayer, paintDirtyRect, pa
intBehavior); |
1339 | 1289 |
1340 if (paintsWithTransparency(paintBehavior) || paintsWithBlendMode() || create
TransparencyLayerForBlendMode) { | 1290 if (paintsWithTransparency(paintBehavior) || paintsWithBlendMode() || create
TransparencyLayerForBlendMode) { |
1341 m_usedTransparency = true; | 1291 m_usedTransparency = true; |
1342 context->save(); | 1292 context->save(); |
1343 LayoutRect clipRect = paintingExtent(rootLayer, paintDirtyRect, paintBeh
avior); | 1293 LayoutRect clipRect = paintingExtent(rootLayer, paintDirtyRect, paintBeh
avior); |
1344 context->clip(clipRect); | 1294 context->clip(clipRect); |
1345 | 1295 |
1346 if (paintsWithBlendMode()) | 1296 if (paintsWithBlendMode()) |
1347 context->setCompositeOperation(context->compositeOperation(), m_blen
dMode); | 1297 context->setCompositeOperation(context->compositeOperation(), m_blen
dInfo.blendMode()); |
1348 | 1298 |
1349 context->beginTransparencyLayer(renderer()->opacity()); | 1299 context->beginTransparencyLayer(renderer()->opacity()); |
1350 | 1300 |
1351 if (paintsWithBlendMode()) | 1301 if (paintsWithBlendMode()) |
1352 context->setCompositeOperation(context->compositeOperation(), blink:
:WebBlendModeNormal); | 1302 context->setCompositeOperation(context->compositeOperation(), blink:
:WebBlendModeNormal); |
1353 #ifdef REVEAL_TRANSPARENCY_LAYERS | 1303 #ifdef REVEAL_TRANSPARENCY_LAYERS |
1354 context->setFillColor(Color(0.0f, 0.0f, 0.5f, 0.2f)); | 1304 context->setFillColor(Color(0.0f, 0.0f, 0.5f, 0.2f)); |
1355 context->fillRect(clipRect); | 1305 context->fillRect(clipRect); |
1356 #endif | 1306 #endif |
1357 } | 1307 } |
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1396 child->stackingNode()->dirtyStackingContainerZOrderLists(); | 1346 child->stackingNode()->dirtyStackingContainerZOrderLists(); |
1397 } | 1347 } |
1398 | 1348 |
1399 child->updateDescendantDependentFlags(); | 1349 child->updateDescendantDependentFlags(); |
1400 if (child->m_hasVisibleContent || child->m_hasVisibleDescendant) | 1350 if (child->m_hasVisibleContent || child->m_hasVisibleDescendant) |
1401 setAncestorChainHasVisibleDescendant(); | 1351 setAncestorChainHasVisibleDescendant(); |
1402 | 1352 |
1403 if (child->isSelfPaintingLayer() || child->hasSelfPaintingLayerDescendant()) | 1353 if (child->isSelfPaintingLayer() || child->hasSelfPaintingLayerDescendant()) |
1404 setAncestorChainHasSelfPaintingLayerDescendant(); | 1354 setAncestorChainHasSelfPaintingLayerDescendant(); |
1405 | 1355 |
1406 if (child->paintsWithBlendMode() || child->childLayerHasBlendMode()) | 1356 if (child->paintsWithBlendMode() || child->blendInfo().childLayerHasBlendMod
e()) |
1407 setAncestorChainBlendedDescendant(); | 1357 m_blendInfo.setAncestorChainBlendedDescendant(); |
1408 | 1358 |
1409 if (subtreeContainsOutOfFlowPositionedLayer(child)) { | 1359 if (subtreeContainsOutOfFlowPositionedLayer(child)) { |
1410 // Now that the out of flow positioned descendant is in the tree, we | 1360 // Now that the out of flow positioned descendant is in the tree, we |
1411 // need to tell the compositor to reevaluate the compositing | 1361 // need to tell the compositor to reevaluate the compositing |
1412 // requirements since we may be able to mark more layers as having | 1362 // requirements since we may be able to mark more layers as having |
1413 // an 'unclipped' descendant. | 1363 // an 'unclipped' descendant. |
1414 compositor()->setNeedsUpdateCompositingRequirementsState(); | 1364 compositor()->setNeedsUpdateCompositingRequirementsState(); |
1415 setAncestorChainHasOutOfFlowPositionedDescendant(); | 1365 setAncestorChainHasOutOfFlowPositionedDescendant(); |
1416 } | 1366 } |
1417 | 1367 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1457 // It may now be the case that a layer no longer has an unclipped | 1407 // It may now be the case that a layer no longer has an unclipped |
1458 // descendant. Let the compositor know that it needs to reevaluate | 1408 // descendant. Let the compositor know that it needs to reevaluate |
1459 // its compositing requirements to check this. | 1409 // its compositing requirements to check this. |
1460 compositor()->setNeedsUpdateCompositingRequirementsState(); | 1410 compositor()->setNeedsUpdateCompositingRequirementsState(); |
1461 dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); | 1411 dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); |
1462 } | 1412 } |
1463 | 1413 |
1464 if (oldChild->m_hasVisibleContent || oldChild->m_hasVisibleDescendant) | 1414 if (oldChild->m_hasVisibleContent || oldChild->m_hasVisibleDescendant) |
1465 dirtyAncestorChainVisibleDescendantStatus(); | 1415 dirtyAncestorChainVisibleDescendantStatus(); |
1466 | 1416 |
1467 if (oldChild->paintsWithBlendMode() || oldChild->childLayerHasBlendMode()) | 1417 if (oldChild->paintsWithBlendMode() || oldChild->blendInfo().childLayerHasBl
endMode()) |
1468 dirtyAncestorChainBlendedDescendantStatus(); | 1418 m_blendInfo.dirtyAncestorChainBlendedDescendantStatus(); |
1469 | 1419 |
1470 if (oldChild->isSelfPaintingLayer() || oldChild->hasSelfPaintingLayerDescend
ant()) | 1420 if (oldChild->isSelfPaintingLayer() || oldChild->hasSelfPaintingLayerDescend
ant()) |
1471 dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); | 1421 dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); |
1472 | 1422 |
1473 return oldChild; | 1423 return oldChild; |
1474 } | 1424 } |
1475 | 1425 |
1476 void RenderLayer::removeOnlyThisLayer() | 1426 void RenderLayer::removeOnlyThisLayer() |
1477 { | 1427 { |
1478 if (!m_parent) | 1428 if (!m_parent) |
(...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2048 paintingInfo.paintDirtyRect, context, clipperContext)) { | 1998 paintingInfo.paintDirtyRect, context, clipperContext)) { |
2049 // No need to post-apply the clipper if this failed. | 1999 // No need to post-apply the clipper if this failed. |
2050 resourceClipper = 0; | 2000 resourceClipper = 0; |
2051 } | 2001 } |
2052 } | 2002 } |
2053 } | 2003 } |
2054 } | 2004 } |
2055 | 2005 |
2056 // Blending operations must be performed only with the nearest ancestor stac
king context. | 2006 // Blending operations must be performed only with the nearest ancestor stac
king context. |
2057 // Note that there is no need to create a transparency layer if we're painti
ng the root. | 2007 // Note that there is no need to create a transparency layer if we're painti
ng the root. |
2058 bool createTransparencyLayerForBlendMode = !renderer()->isRoot() && m_stacki
ngNode->isStackingContext() && m_childLayerHasBlendMode; | 2008 bool createTransparencyLayerForBlendMode = !renderer()->isRoot() && m_stacki
ngNode->isStackingContext() && m_blendInfo.childLayerHasBlendMode(); |
2059 | 2009 |
2060 if (createTransparencyLayerForBlendMode) | 2010 if (createTransparencyLayerForBlendMode) |
2061 beginTransparencyLayers(context, paintingInfo.rootLayer, paintingInfo.pa
intDirtyRect, paintingInfo.paintBehavior); | 2011 beginTransparencyLayers(context, paintingInfo.rootLayer, paintingInfo.pa
intDirtyRect, paintingInfo.paintBehavior); |
2062 | 2012 |
2063 LayerPaintingInfo localPaintingInfo(paintingInfo); | 2013 LayerPaintingInfo localPaintingInfo(paintingInfo); |
2064 FilterEffectRendererHelper filterPainter(filterRenderer() && paintsWithFilte
rs()); | 2014 FilterEffectRendererHelper filterPainter(filterRenderer() && paintsWithFilte
rs()); |
2065 if (filterPainter.haveFilterEffect() && !context->paintingDisabled()) { | 2015 if (filterPainter.haveFilterEffect() && !context->paintingDisabled()) { |
2066 RenderLayerFilterInfo* filterInfo = this->filterInfo(); | 2016 RenderLayerFilterInfo* filterInfo = this->filterInfo(); |
2067 ASSERT(filterInfo); | 2017 ASSERT(filterInfo); |
2068 LayoutRect filterRepaintRect = filterInfo->dirtySourceRect(); | 2018 LayoutRect filterRepaintRect = filterInfo->dirtySourceRect(); |
(...skipping 1439 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3508 } | 3458 } |
3509 | 3459 |
3510 CompositedLayerMappingPtr RenderLayer::ensureCompositedLayerMapping() | 3460 CompositedLayerMappingPtr RenderLayer::ensureCompositedLayerMapping() |
3511 { | 3461 { |
3512 if (!m_compositedLayerMapping) { | 3462 if (!m_compositedLayerMapping) { |
3513 m_compositedLayerMapping = adoptPtr(new CompositedLayerMapping(this)); | 3463 m_compositedLayerMapping = adoptPtr(new CompositedLayerMapping(this)); |
3514 | 3464 |
3515 updateOrRemoveFilterEffectRenderer(); | 3465 updateOrRemoveFilterEffectRenderer(); |
3516 | 3466 |
3517 if (RuntimeEnabledFeatures::cssCompositingEnabled()) | 3467 if (RuntimeEnabledFeatures::cssCompositingEnabled()) |
3518 compositedLayerMapping()->setBlendMode(m_blendMode); | 3468 compositedLayerMapping()->setBlendMode(m_blendInfo.blendMode()); |
3519 } | 3469 } |
3520 return m_compositedLayerMapping.get(); | 3470 return m_compositedLayerMapping.get(); |
3521 } | 3471 } |
3522 | 3472 |
3523 void RenderLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) | 3473 void RenderLayer::clearCompositedLayerMapping(bool layerBeingDestroyed) |
3524 { | 3474 { |
3525 m_compositedLayerMapping.clear(); | 3475 m_compositedLayerMapping.clear(); |
3526 | 3476 |
3527 if (!layerBeingDestroyed) | 3477 if (!layerBeingDestroyed) |
3528 updateOrRemoveFilterEffectRenderer(); | 3478 updateOrRemoveFilterEffectRenderer(); |
(...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3832 m_stackingNode->updateStackingNodesAfterStyleChange(oldStyle); | 3782 m_stackingNode->updateStackingNodesAfterStyleChange(oldStyle); |
3833 updateVisibilityAfterStyleChange(oldStyle); | 3783 updateVisibilityAfterStyleChange(oldStyle); |
3834 // Overlay scrollbars can make this layer self-painting so we need | 3784 // Overlay scrollbars can make this layer self-painting so we need |
3835 // to recompute the bit once scrollbars have been updated. | 3785 // to recompute the bit once scrollbars have been updated. |
3836 updateSelfPaintingLayer(); | 3786 updateSelfPaintingLayer(); |
3837 updateOutOfFlowPositioned(oldStyle); | 3787 updateOutOfFlowPositioned(oldStyle); |
3838 | 3788 |
3839 updateReflectionInfo(oldStyle); | 3789 updateReflectionInfo(oldStyle); |
3840 | 3790 |
3841 if (RuntimeEnabledFeatures::cssCompositingEnabled()) | 3791 if (RuntimeEnabledFeatures::cssCompositingEnabled()) |
3842 updateBlendMode(); | 3792 m_blendInfo.updateBlendMode(); |
3843 | 3793 |
3844 updateDescendantDependentFlags(); | 3794 updateDescendantDependentFlags(); |
3845 updateTransform(); | 3795 updateTransform(); |
3846 | 3796 |
3847 bool didPaintWithFilters = false; | 3797 bool didPaintWithFilters = false; |
3848 | 3798 |
3849 if (paintsWithFilters()) | 3799 if (paintsWithFilters()) |
3850 didPaintWithFilters = true; | 3800 didPaintWithFilters = true; |
3851 updateFilters(oldStyle, renderer()->style()); | 3801 updateFilters(oldStyle, renderer()->style()); |
3852 | 3802 |
(...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4037 } | 3987 } |
4038 } | 3988 } |
4039 | 3989 |
4040 void showLayerTree(const WebCore::RenderObject* renderer) | 3990 void showLayerTree(const WebCore::RenderObject* renderer) |
4041 { | 3991 { |
4042 if (!renderer) | 3992 if (!renderer) |
4043 return; | 3993 return; |
4044 showLayerTree(renderer->enclosingLayer()); | 3994 showLayerTree(renderer->enclosingLayer()); |
4045 } | 3995 } |
4046 #endif | 3996 #endif |
OLD | NEW |