| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2003, 2009, 2012 Apple Inc. All rights reserved. | 2 * Copyright (C) 2003, 2009, 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 584 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 595 bool hasVisibleBoxDecorations() const; | 595 bool hasVisibleBoxDecorations() const; |
| 596 // Returns true if this layer has visible content (ignoring any child layers
). | 596 // Returns true if this layer has visible content (ignoring any child layers
). |
| 597 bool isVisuallyNonEmpty() const; | 597 bool isVisuallyNonEmpty() const; |
| 598 // True if this layer container renderers that paint. | 598 // True if this layer container renderers that paint. |
| 599 bool hasNonEmptyChildRenderers() const; | 599 bool hasNonEmptyChildRenderers() const; |
| 600 | 600 |
| 601 // FIXME: We should ASSERT(!m_hasSelfPaintingLayerDescendantDirty); here but
we hit the same bugs as visible content above. | 601 // FIXME: We should ASSERT(!m_hasSelfPaintingLayerDescendantDirty); here but
we hit the same bugs as visible content above. |
| 602 // Part of the issue is with subtree relayout: we don't check if our ancesto
rs have some descendant flags dirty, missing some updates. | 602 // Part of the issue is with subtree relayout: we don't check if our ancesto
rs have some descendant flags dirty, missing some updates. |
| 603 bool hasSelfPaintingLayerDescendant() const { return m_hasSelfPaintingLayerD
escendant; } | 603 bool hasSelfPaintingLayerDescendant() const { return m_hasSelfPaintingLayerD
escendant; } |
| 604 | 604 |
| 605 // This returns true if we have an out of flow positioned descendant whose | 605 // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty) here. S
ee above. |
| 606 // containing block is not a descendant of ours. If this is true, we cannot | |
| 607 // automatically opt into composited scrolling since this out of flow | |
| 608 // positioned descendant would become clipped by us, possibly altering the | |
| 609 // rendering of the page. | |
| 610 // FIXME: We should ASSERT(!m_hasOutOfFlowPositionedDescendantDirty); here b
ut we may hit the same bugs as visible content above. | |
| 611 bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositio
nedDescendant; } | 606 bool hasOutOfFlowPositionedDescendant() const { return m_hasOutOfFlowPositio
nedDescendant; } |
| 612 | 607 |
| 608 void setHasOutOfFlowPositionedDescendant(bool hasDescendant) { m_hasOutOfFlo
wPositionedDescendant = hasDescendant; } |
| 609 void setHasOutOfFlowPositionedDescendantDirty(bool dirty) { m_hasOutOfFlowPo
sitionedDescendantDirty = dirty; } |
| 610 |
| 611 bool hasUnclippedDescendant() const { return m_hasUnclippedDescendant; } |
| 612 void setHasUnclippedDescendant(bool hasDescendant) { m_hasUnclippedDescendan
t = hasDescendant; } |
| 613 void updateHasUnclippedDescendant(); |
| 614 |
| 613 // Gets the nearest enclosing positioned ancestor layer (also includes | 615 // Gets the nearest enclosing positioned ancestor layer (also includes |
| 614 // the <html> layer and the root layer). | 616 // the <html> layer and the root layer). |
| 615 RenderLayer* enclosingPositionedAncestor() const; | 617 RenderLayer* enclosingPositionedAncestor() const; |
| 616 | 618 |
| 617 // Returns the nearest enclosing layer that is scrollable. | 619 // Returns the nearest enclosing layer that is scrollable. |
| 618 RenderLayer* enclosingScrollableLayer() const; | 620 RenderLayer* enclosingScrollableLayer() const; |
| 619 | 621 |
| 620 // The layer relative to which clipping rects for this layer are computed. | 622 // The layer relative to which clipping rects for this layer are computed. |
| 621 RenderLayer* clippingRootForPainting() const; | 623 RenderLayer* clippingRootForPainting() const; |
| 622 | 624 |
| (...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 865 bool isOutOfFlowRenderFlowThread() const { return renderer()->isOutOfFlowRen
derFlowThread(); } | 867 bool isOutOfFlowRenderFlowThread() const { return renderer()->isOutOfFlowRen
derFlowThread(); } |
| 866 | 868 |
| 867 enum PaintOrderListType {BeforePromote, AfterPromote}; | 869 enum PaintOrderListType {BeforePromote, AfterPromote}; |
| 868 void computePaintOrderList(PaintOrderListType type, Vector<RefPtr<Node> >&); | 870 void computePaintOrderList(PaintOrderListType type, Vector<RefPtr<Node> >&); |
| 869 | 871 |
| 870 enum ForceNeedsCompositedScrollingMode { | 872 enum ForceNeedsCompositedScrollingMode { |
| 871 DoNotForceCompositedScrolling = 0, | 873 DoNotForceCompositedScrolling = 0, |
| 872 CompositedScrollingAlwaysOn = 1, | 874 CompositedScrollingAlwaysOn = 1, |
| 873 CompositedScrollingAlwaysOff = 2 | 875 CompositedScrollingAlwaysOff = 2 |
| 874 }; | 876 }; |
| 877 |
| 875 void setForceNeedsCompositedScrolling(ForceNeedsCompositedScrollingMode); | 878 void setForceNeedsCompositedScrolling(ForceNeedsCompositedScrollingMode); |
| 876 | 879 |
| 877 private: | 880 private: |
| 878 enum CollectLayersBehavior { StopAtStackingContexts, StopAtStackingContainer
s }; | 881 enum CollectLayersBehavior { StopAtStackingContexts, StopAtStackingContainer
s }; |
| 879 | 882 |
| 880 void updateZOrderLists(); | 883 void updateZOrderLists(); |
| 881 void rebuildZOrderLists(); | 884 void rebuildZOrderLists(); |
| 882 // See the comment for collectLayers for information about the layerToForceA
sStackingContainer parameter. | 885 // See the comment for collectLayers for information about the layerToForceA
sStackingContainer parameter. |
| 883 void rebuildZOrderLists(CollectLayersBehavior, OwnPtr<Vector<RenderLayer*> >
&, OwnPtr<Vector<RenderLayer*> >&, const RenderLayer* layerToForceAsStackingCont
ainer = 0); | 886 void rebuildZOrderLists(CollectLayersBehavior, OwnPtr<Vector<RenderLayer*> >
&, OwnPtr<Vector<RenderLayer*> >&, const RenderLayer* layerToForceAsStackingCont
ainer = 0); |
| 884 void clearZOrderLists(); | 887 void clearZOrderLists(); |
| 885 | 888 |
| 886 void updateNormalFlowList(); | 889 void updateNormalFlowList(); |
| 887 | 890 |
| 888 bool isStackingContext(const RenderStyle* style) const { return !style->hasA
utoZIndex() || isRootLayer(); } | 891 bool isStackingContext(const RenderStyle* style) const { return !style->hasA
utoZIndex() || isRootLayer(); } |
| 889 | 892 |
| 890 bool isDirtyStackingContainer() const { return m_zOrderListsDirty && isStack
ingContainer(); } | 893 bool isDirtyStackingContainer() const { return m_zOrderListsDirty && isStack
ingContainer(); } |
| 891 | 894 |
| 892 void setAncestorChainHasSelfPaintingLayerDescendant(); | 895 void setAncestorChainHasSelfPaintingLayerDescendant(); |
| 893 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); | 896 void dirtyAncestorChainHasSelfPaintingLayerDescendantStatus(); |
| 894 | 897 |
| 898 void setAncestorChainHasOutOfFlowPositionedDescendant(); |
| 899 void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); |
| 900 |
| 895 bool acceleratedCompositingForOverflowScrollEnabled() const; | 901 bool acceleratedCompositingForOverflowScrollEnabled() const; |
| 896 void updateDescendantsAreContiguousInStackingOrder(); | 902 void updateDescendantsAreContiguousInStackingOrder(); |
| 897 void updateDescendantsAreContiguousInStackingOrderRecursive(const HashMap<co
nst RenderLayer*, int>&, int& minIndex, int& maxIndex, int& count, bool firstIte
ration); | 903 void updateDescendantsAreContiguousInStackingOrderRecursive(const HashMap<co
nst RenderLayer*, int>&, int& minIndex, int& maxIndex, int& count, bool firstIte
ration); |
| 898 void collectBeforePromotionZOrderList(RenderLayer* ancestorStackingContext,
OwnPtr<Vector<RenderLayer*> >& posZOrderListBeforePromote, OwnPtr<Vector<RenderL
ayer*> >& negZOrderListBeforePromote); | 904 void collectBeforePromotionZOrderList(RenderLayer* ancestorStackingContext,
OwnPtr<Vector<RenderLayer*> >& posZOrderListBeforePromote, OwnPtr<Vector<RenderL
ayer*> >& negZOrderListBeforePromote); |
| 899 void collectAfterPromotionZOrderList(RenderLayer* ancestorStackingContext, O
wnPtr<Vector<RenderLayer*> >& posZOrderListAfterPromote, OwnPtr<Vector<RenderLay
er*> >& negZOrderListAfterPromote); | 905 void collectAfterPromotionZOrderList(RenderLayer* ancestorStackingContext, O
wnPtr<Vector<RenderLayer*> >& posZOrderListAfterPromote, OwnPtr<Vector<RenderLay
er*> >& negZOrderListAfterPromote); |
| 900 | 906 |
| 901 void computeRepaintRects(const RenderLayerModelObject* repaintContainer, con
st RenderGeometryMap* = 0); | 907 void computeRepaintRects(const RenderLayerModelObject* repaintContainer, con
st RenderGeometryMap* = 0); |
| 902 void computeRepaintRectsIncludingDescendants(); | 908 void computeRepaintRectsIncludingDescendants(); |
| 903 void clearRepaintRects(); | 909 void clearRepaintRects(); |
| 904 | 910 |
| 905 void clipToRect(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect&
paintDirtyRect, const ClipRect&, | 911 void clipToRect(RenderLayer* rootLayer, GraphicsContext*, const LayoutRect&
paintDirtyRect, const ClipRect&, |
| 906 BorderRadiusClippingRule = IncludeSelfForBorderRadius); | 912 BorderRadiusClippingRule = IncludeSelfForBorderRadius); |
| 907 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C
lipRect&); | 913 void restoreClip(GraphicsContext*, const LayoutRect& paintDirtyRect, const C
lipRect&); |
| 908 | 914 |
| 909 bool shouldRepaintAfterLayout() const; | 915 bool shouldRepaintAfterLayout() const; |
| 910 | 916 |
| 911 void updateSelfPaintingLayer(); | 917 void updateSelfPaintingLayer(); |
| 912 void updateIsNormalFlowOnly(); | 918 void updateIsNormalFlowOnly(); |
| 913 void updateVisibilityAfterStyleChange(const RenderStyle* oldStyle); | 919 void updateVisibilityAfterStyleChange(const RenderStyle* oldStyle); |
| 914 void updateStackingContextsAfterStyleChange(const RenderStyle* oldStyle); | 920 void updateStackingContextsAfterStyleChange(const RenderStyle* oldStyle); |
| 915 | 921 |
| 916 void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle); | 922 void updateScrollbarsAfterStyleChange(const RenderStyle* oldStyle); |
| 917 void updateScrollbarsAfterLayout(); | 923 void updateScrollbarsAfterLayout(); |
| 918 | 924 |
| 919 void setAncestorChainHasOutOfFlowPositionedDescendant(RenderObject* containi
ngBlock); | |
| 920 void dirtyAncestorChainHasOutOfFlowPositionedDescendantStatus(); | |
| 921 void updateOutOfFlowPositioned(const RenderStyle* oldStyle); | 925 void updateOutOfFlowPositioned(const RenderStyle* oldStyle); |
| 922 | 926 |
| 923 void updateNeedsCompositedScrolling(); | 927 virtual void updateNeedsCompositedScrolling() OVERRIDE; |
| 928 void setNeedsCompositedScrolling(bool); |
| 924 void didUpdateNeedsCompositedScrolling(); | 929 void didUpdateNeedsCompositedScrolling(); |
| 925 | 930 |
| 926 // Returns true if the position changed. | 931 // Returns true if the position changed. |
| 927 bool updateLayerPosition(); | 932 bool updateLayerPosition(); |
| 928 | 933 |
| 929 void updateLayerPositions(RenderGeometryMap* = 0, UpdateLayerPositionsFlags
= defaultFlags); | 934 void updateLayerPositions(RenderGeometryMap* = 0, UpdateLayerPositionsFlags
= defaultFlags); |
| 930 | 935 |
| 931 enum UpdateLayerPositionsAfterScrollFlag { | 936 enum UpdateLayerPositionsAfterScrollFlag { |
| 932 NoFlag = 0, | 937 NoFlag = 0, |
| 933 IsOverflowScroll = 1 << 0, | 938 IsOverflowScroll = 1 << 0, |
| (...skipping 144 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1078 void updateCompositingLayersAfterScroll(); | 1083 void updateCompositingLayersAfterScroll(); |
| 1079 | 1084 |
| 1080 IntSize scrollbarOffset(const Scrollbar*) const; | 1085 IntSize scrollbarOffset(const Scrollbar*) const; |
| 1081 | 1086 |
| 1082 void updateResizerAreaSet(); | 1087 void updateResizerAreaSet(); |
| 1083 void updateScrollableAreaSet(bool hasOverflow); | 1088 void updateScrollableAreaSet(bool hasOverflow); |
| 1084 | 1089 |
| 1085 void dirtyAncestorChainVisibleDescendantStatus(); | 1090 void dirtyAncestorChainVisibleDescendantStatus(); |
| 1086 void setAncestorChainHasVisibleDescendant(); | 1091 void setAncestorChainHasVisibleDescendant(); |
| 1087 | 1092 |
| 1088 void updateDescendantDependentFlags(HashSet<const RenderObject*>* outOfFlowD
escendantContainingBlocks = 0); | 1093 void updateDescendantDependentFlags(); |
| 1089 | 1094 |
| 1090 // This flag is computed by RenderLayerCompositor, which knows more about 3d
hierarchies than we do. | 1095 // This flag is computed by RenderLayerCompositor, which knows more about 3d
hierarchies than we do. |
| 1091 void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant =
b; } | 1096 void setHas3DTransformedDescendant(bool b) { m_has3DTransformedDescendant =
b; } |
| 1092 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendan
t; } | 1097 bool has3DTransformedDescendant() const { return m_has3DTransformedDescendan
t; } |
| 1093 | 1098 |
| 1094 void dirty3DTransformedDescendantStatus(); | 1099 void dirty3DTransformedDescendantStatus(); |
| 1095 // Both updates the status, and returns true if descendants of this have 3d. | 1100 // Both updates the status, and returns true if descendants of this have 3d. |
| 1096 bool update3DTransformedDescendantStatus(); | 1101 bool update3DTransformedDescendantStatus(); |
| 1097 | 1102 |
| 1098 void createReflection(); | 1103 void createReflection(); |
| (...skipping 67 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1166 bool m_normalFlowListDirty: 1; | 1171 bool m_normalFlowListDirty: 1; |
| 1167 bool m_isNormalFlowOnly : 1; | 1172 bool m_isNormalFlowOnly : 1; |
| 1168 | 1173 |
| 1169 bool m_isSelfPaintingLayer : 1; | 1174 bool m_isSelfPaintingLayer : 1; |
| 1170 | 1175 |
| 1171 // If have no self-painting descendants, we don't have to walk our children
during painting. This can lead to | 1176 // If have no self-painting descendants, we don't have to walk our children
during painting. This can lead to |
| 1172 // significant savings, especially if the tree has lots of non-self-painting
layers grouped together (e.g. table cells). | 1177 // significant savings, especially if the tree has lots of non-self-painting
layers grouped together (e.g. table cells). |
| 1173 bool m_hasSelfPaintingLayerDescendant : 1; | 1178 bool m_hasSelfPaintingLayerDescendant : 1; |
| 1174 bool m_hasSelfPaintingLayerDescendantDirty : 1; | 1179 bool m_hasSelfPaintingLayerDescendantDirty : 1; |
| 1175 | 1180 |
| 1176 // If we have no out of flow positioned descendants and no non-descendant | |
| 1177 // appears between our descendants in stacking order, then we may become a | |
| 1178 // stacking context. | |
| 1179 bool m_hasOutOfFlowPositionedDescendant : 1; | 1181 bool m_hasOutOfFlowPositionedDescendant : 1; |
| 1180 bool m_hasOutOfFlowPositionedDescendantDirty : 1; | 1182 bool m_hasOutOfFlowPositionedDescendantDirty : 1; |
| 1181 | 1183 |
| 1184 // This is true if we have an out-of-flow positioned descendant whose |
| 1185 // containing block is our ancestor. If this is the case, the descendant |
| 1186 // may fall outside of our clip preventing things like opting into |
| 1187 // composited scrolling (which causes clipping of all descendants). |
| 1188 bool m_hasUnclippedDescendant : 1; |
| 1189 |
| 1182 bool m_needsCompositedScrolling : 1; | 1190 bool m_needsCompositedScrolling : 1; |
| 1183 | 1191 |
| 1184 // If this is true, then no non-descendant appears between any of our | 1192 // If this is true, then no non-descendant appears between any of our |
| 1185 // descendants in stacking order. This is one of the requirements of being | 1193 // descendants in stacking order. This is one of the requirements of being |
| 1186 // able to safely become a stacking context. | 1194 // able to safely become a stacking context. |
| 1187 bool m_descendantsAreContiguousInStackingOrder : 1; | 1195 bool m_descendantsAreContiguousInStackingOrder : 1; |
| 1188 bool m_descendantsAreContiguousInStackingOrderDirty : 1; | 1196 bool m_descendantsAreContiguousInStackingOrderDirty : 1; |
| 1189 | 1197 |
| 1190 const bool m_isRootLayer : 1; | 1198 const bool m_isRootLayer : 1; |
| 1191 | 1199 |
| (...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1360 | 1368 |
| 1361 } // namespace WebCore | 1369 } // namespace WebCore |
| 1362 | 1370 |
| 1363 #ifndef NDEBUG | 1371 #ifndef NDEBUG |
| 1364 // Outside the WebCore namespace for ease of invocation from gdb. | 1372 // Outside the WebCore namespace for ease of invocation from gdb. |
| 1365 void showLayerTree(const WebCore::RenderLayer*); | 1373 void showLayerTree(const WebCore::RenderLayer*); |
| 1366 void showLayerTree(const WebCore::RenderObject*); | 1374 void showLayerTree(const WebCore::RenderObject*); |
| 1367 #endif | 1375 #endif |
| 1368 | 1376 |
| 1369 #endif // RenderLayer_h | 1377 #endif // RenderLayer_h |
| OLD | NEW |