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 1557 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1568 bool RenderLayer::hasOverflowControls() const | 1568 bool RenderLayer::hasOverflowControls() const |
1569 { | 1569 { |
1570 return m_scrollableArea && (m_scrollableArea->hasScrollbar() || m_scrollable Area->hasScrollCorner() || renderer()->style()->resize() != RESIZE_NONE); | 1570 return m_scrollableArea && (m_scrollableArea->hasScrollbar() || m_scrollable Area->hasScrollCorner() || renderer()->style()->resize() != RESIZE_NONE); |
1571 } | 1571 } |
1572 | 1572 |
1573 void RenderLayer::paint(GraphicsContext* context, const LayoutRect& damageRect, PaintBehavior paintBehavior, RenderObject* paintingRoot, PaintLayerFlags paintFl ags) | 1573 void RenderLayer::paint(GraphicsContext* context, const LayoutRect& damageRect, PaintBehavior paintBehavior, RenderObject* paintingRoot, PaintLayerFlags paintFl ags) |
1574 { | 1574 { |
1575 OverlapTestRequestMap overlapTestRequests; | 1575 OverlapTestRequestMap overlapTestRequests; |
1576 | 1576 |
1577 LayerPaintingInfo paintingInfo(this, enclosingIntRect(damageRect), paintBeha vior, LayoutSize(), paintingRoot, &overlapTestRequests); | 1577 LayerPaintingInfo paintingInfo(this, enclosingIntRect(damageRect), paintBeha vior, LayoutSize(), paintingRoot, &overlapTestRequests); |
1578 paintLayer(context, paintingInfo, paintFlags); | 1578 if (shouldPaintLayerInSoftwareMode(context, paintingInfo, paintFlags)) |
1579 paintLayer(context, paintingInfo, paintFlags); | |
1579 | 1580 |
1580 OverlapTestRequestMap::iterator end = overlapTestRequests.end(); | 1581 OverlapTestRequestMap::iterator end = overlapTestRequests.end(); |
1581 for (OverlapTestRequestMap::iterator it = overlapTestRequests.begin(); it != end; ++it) | 1582 for (OverlapTestRequestMap::iterator it = overlapTestRequests.begin(); it != end; ++it) |
1582 it->key->setIsOverlapped(false); | 1583 it->key->setIsOverlapped(false); |
1583 } | 1584 } |
1584 | 1585 |
1585 void RenderLayer::paintOverlayScrollbars(GraphicsContext* context, const LayoutR ect& damageRect, PaintBehavior paintBehavior, RenderObject* paintingRoot) | 1586 void RenderLayer::paintOverlayScrollbars(GraphicsContext* context, const LayoutR ect& damageRect, PaintBehavior paintBehavior, RenderObject* paintingRoot) |
1586 { | 1587 { |
1587 if (!m_containsDirtyOverlayScrollbars) | 1588 if (!m_containsDirtyOverlayScrollbars) |
1588 return; | 1589 return; |
(...skipping 97 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
1686 static ShouldRespectOverflowClip shouldRespectOverflowClip(PaintLayerFlags paint Flags, const RenderObject* renderer) | 1687 static ShouldRespectOverflowClip shouldRespectOverflowClip(PaintLayerFlags paint Flags, const RenderObject* renderer) |
1687 { | 1688 { |
1688 return (paintFlags & PaintLayerPaintingOverflowContents || (paintFlags & Pai ntLayerPaintingChildClippingMaskPhase && renderer->hasClipPath())) ? IgnoreOverf lowClip : RespectOverflowClip; | 1689 return (paintFlags & PaintLayerPaintingOverflowContents || (paintFlags & Pai ntLayerPaintingChildClippingMaskPhase && renderer->hasClipPath())) ? IgnoreOverf lowClip : RespectOverflowClip; |
1689 } | 1690 } |
1690 | 1691 |
1691 void RenderLayer::paintLayer(GraphicsContext* context, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) | 1692 void RenderLayer::paintLayer(GraphicsContext* context, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) |
1692 { | 1693 { |
1693 // https://code.google.com/p/chromium/issues/detail?id=343772 | 1694 // https://code.google.com/p/chromium/issues/detail?id=343772 |
1694 DisableCompositingQueryAsserts disabler; | 1695 DisableCompositingQueryAsserts disabler; |
1695 | 1696 |
1696 if (compositingState() != NotComposited && compositingState() != PaintsIntoG roupedBacking) { | 1697 if (compositingState() != NotComposited) { |
1697 // The updatingControlTints() painting pass goes through compositing lay ers, | |
1698 // but we need to ensure that we don't cache clip rects computed with th e wrong root in this case. | |
1699 if (context->updatingControlTints() || (paintingInfo.paintBehavior & Pai ntBehaviorFlattenCompositingLayers)) { | 1698 if (context->updatingControlTints() || (paintingInfo.paintBehavior & Pai ntBehaviorFlattenCompositingLayers)) { |
1699 // The updatingControlTints() painting pass goes through compositing layers, | |
1700 // but we need to ensure that we don't cache clip rects computed wit h the wrong root in this case. | |
1701 // FIXME: ok, but what about PaintBehaviorFlattenCompositingLayers? That's for printing. | |
1702 // FIXME: why isn't the code here global, as opposed to being set on each paintLayer() call? | |
1700 paintFlags |= PaintLayerUncachedClipRects; | 1703 paintFlags |= PaintLayerUncachedClipRects; |
1701 } else if (!compositedLayerMapping()->paintsIntoCompositedAncestor() | |
1702 && !shouldDoSoftwarePaint(this, paintFlags & PaintLayerPaintingRefle ction) | |
1703 && !paintForFixedRootBackground(this, paintFlags)) { | |
1704 // If this RenderLayer should paint into its own backing, that will be done via CompositedLayerMapping::paintContents() | |
1705 // and CompositedLayerMapping::doPaintTask(). | |
1706 return; | |
1707 } | 1704 } |
1708 } else if (viewportConstrainedNotCompositedReason() == NotCompositedForBound sOutOfView) { | 1705 } else if (viewportConstrainedNotCompositedReason() == NotCompositedForBound sOutOfView) { |
1709 // Don't paint out-of-view viewport constrained layers (when doing prepa inting) because they will never be visible | 1706 // Don't paint out-of-view viewport constrained layers (when doing prepa inting) because they will never be visible |
1710 // unless their position or viewport size is changed. | 1707 // unless their position or viewport size is changed. |
1711 return; | 1708 return; |
1712 } | 1709 } |
1713 | 1710 |
1714 // Non self-painting leaf layers don't need to be painted as their renderer( ) should properly paint itself. | 1711 // Non self-painting leaf layers don't need to be painted as their renderer( ) should properly paint itself. |
1715 if (!isSelfPaintingLayer() && !hasSelfPaintingLayerDescendant()) | 1712 if (!isSelfPaintingLayer() && !hasSelfPaintingLayerDescendant()) |
1716 return; | 1713 return; |
(...skipping 309 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
2026 stateSaver.save(); | 2023 stateSaver.save(); |
2027 context->concatCTM(transform.toAffineTransform()); | 2024 context->concatCTM(transform.toAffineTransform()); |
2028 } | 2025 } |
2029 | 2026 |
2030 // Now do a paint with the root layer shifted to be us. | 2027 // Now do a paint with the root layer shifted to be us. |
2031 LayerPaintingInfo transformedPaintingInfo(this, enclosingIntRect(transform.i nverse().mapRect(paintingInfo.paintDirtyRect)), paintingInfo.paintBehavior, | 2028 LayerPaintingInfo transformedPaintingInfo(this, enclosingIntRect(transform.i nverse().mapRect(paintingInfo.paintDirtyRect)), paintingInfo.paintBehavior, |
2032 adjustedSubPixelAccumulation, paintingInfo.paintingRoot, paintingInfo.ov erlapTestRequests); | 2029 adjustedSubPixelAccumulation, paintingInfo.paintingRoot, paintingInfo.ov erlapTestRequests); |
2033 paintLayerContentsAndReflection(context, transformedPaintingInfo, paintFlags ); | 2030 paintLayerContentsAndReflection(context, transformedPaintingInfo, paintFlags ); |
2034 } | 2031 } |
2035 | 2032 |
2033 bool RenderLayer::shouldPaintLayerInSoftwareMode(GraphicsContext* context, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) | |
2034 { | |
2035 bool retval = (compositingState() == NotComposited | |
ojan
2014/07/18 21:27:31
Nit: no need for the local bool
chrishtr
2014/07/18 21:40:21
Done.
| |
2036 || compositingState() == HasOwnBackingButPaintsIntoAncestor | |
2037 || context->updatingControlTints() | |
2038 || (paintingInfo.paintBehavior & PaintBehaviorFlattenCompositingLayers) | |
2039 || shouldDoSoftwarePaint(this, paintFlags & PaintLayerPaintingReflection ) | |
ojan
2014/07/18 21:27:31
This method is confusing now that we have shouldPa
chrishtr
2014/07/18 21:40:21
Done.
| |
2040 || paintForFixedRootBackground(this, paintFlags)); | |
2041 return retval; | |
2042 } | |
2043 | |
2036 void RenderLayer::paintChildren(unsigned childrenToVisit, GraphicsContext* conte xt, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) | 2044 void RenderLayer::paintChildren(unsigned childrenToVisit, GraphicsContext* conte xt, const LayerPaintingInfo& paintingInfo, PaintLayerFlags paintFlags) |
2037 { | 2045 { |
2038 if (!hasSelfPaintingLayerDescendant()) | 2046 if (!hasSelfPaintingLayerDescendant()) |
2039 return; | 2047 return; |
2040 | 2048 |
2041 #if ASSERT_ENABLED | 2049 #if ASSERT_ENABLED |
2042 LayerListMutationDetector mutationChecker(m_stackingNode.get()); | 2050 LayerListMutationDetector mutationChecker(m_stackingNode.get()); |
2043 #endif | 2051 #endif |
2044 | 2052 |
2045 RenderLayerStackingNodeIterator iterator(*m_stackingNode, childrenToVisit); | 2053 RenderLayerStackingNodeIterator iterator(*m_stackingNode, childrenToVisit); |
2046 while (RenderLayerStackingNode* child = iterator.next()) { | 2054 while (RenderLayerStackingNode* child = iterator.next()) { |
2047 RenderLayer* childLayer = child->layer(); | 2055 RenderLayer* childLayer = child->layer(); |
2048 | 2056 // If this RenderLayer should paint into its own backing or a grouped ba cking, that will be done via CompositedLayerMapping::paintContents() |
2049 // Squashed RenderLayers should not paint into their ancestor. | 2057 // and CompositedLayerMapping::doPaintTask(). |
2050 if (childLayer->compositingState() == PaintsIntoGroupedBacking) | 2058 if (!childLayer->shouldPaintLayerInSoftwareMode(context, paintingInfo, p aintFlags)) |
2051 continue; | 2059 continue; |
2052 | 2060 |
2053 if (!childLayer->isPaginated()) | 2061 if (!childLayer->isPaginated()) |
2054 childLayer->paintLayer(context, paintingInfo, paintFlags); | 2062 childLayer->paintLayer(context, paintingInfo, paintFlags); |
2055 else | 2063 else |
2056 paintPaginatedChildLayer(childLayer, context, paintingInfo, paintFla gs); | 2064 paintPaginatedChildLayer(childLayer, context, paintingInfo, paintFla gs); |
2057 } | 2065 } |
2058 } | 2066 } |
2059 | 2067 |
2060 void RenderLayer::collectFragments(LayerFragments& fragments, const RenderLayer* rootLayer, const LayoutRect& dirtyRect, | 2068 void RenderLayer::collectFragments(LayerFragments& fragments, const RenderLayer* rootLayer, const LayoutRect& dirtyRect, |
(...skipping 1725 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
3786 } | 3794 } |
3787 } | 3795 } |
3788 | 3796 |
3789 void showLayerTree(const WebCore::RenderObject* renderer) | 3797 void showLayerTree(const WebCore::RenderObject* renderer) |
3790 { | 3798 { |
3791 if (!renderer) | 3799 if (!renderer) |
3792 return; | 3800 return; |
3793 showLayerTree(renderer->enclosingLayer()); | 3801 showLayerTree(renderer->enclosingLayer()); |
3794 } | 3802 } |
3795 #endif | 3803 #endif |
OLD | NEW |