OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) |
4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r
ights reserved. |
7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
8 * | 8 * |
9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
(...skipping 99 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
110 }; | 110 }; |
111 | 111 |
112 typedef WTF::HashMap<const DeprecatedPaintLayer*, Vector<LayoutRect>> LayerHitTe
stRects; | 112 typedef WTF::HashMap<const DeprecatedPaintLayer*, Vector<LayoutRect>> LayerHitTe
stRects; |
113 | 113 |
114 #ifndef NDEBUG | 114 #ifndef NDEBUG |
115 const int showTreeCharacterOffset = 39; | 115 const int showTreeCharacterOffset = 39; |
116 #endif | 116 #endif |
117 | 117 |
118 // Base class for all layout tree objects. | 118 // Base class for all layout tree objects. |
119 class CORE_EXPORT LayoutObject : public ImageResourceClient { | 119 class CORE_EXPORT LayoutObject : public ImageResourceClient { |
120 friend class LayoutBlock; | |
121 friend class LayoutBlockFlow; | |
122 friend class DeprecatedPaintLayerReflectionInfo; // For setParent | |
123 friend class DeprecatedPaintLayerScrollableArea; // For setParent. | |
124 friend class LayoutObjectChildList; | 120 friend class LayoutObjectChildList; |
125 WTF_MAKE_NONCOPYABLE(LayoutObject); | 121 WTF_MAKE_NONCOPYABLE(LayoutObject); |
126 public: | 122 public: |
127 // Anonymous objects should pass the document as their node, and they will t
hen automatically be | 123 // Anonymous objects should pass the document as their node, and they will t
hen automatically be |
128 // marked as anonymous in the constructor. | 124 // marked as anonymous in the constructor. |
129 explicit LayoutObject(Node*); | 125 explicit LayoutObject(Node*); |
130 ~LayoutObject() override; | 126 ~LayoutObject() override; |
131 | 127 |
132 // Returns the name of the layout object. | 128 // Returns the name of the layout object. |
133 virtual const char* name() const = 0; | 129 virtual const char* name() const = 0; |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
258 // LayoutObject tree manipulation | 254 // LayoutObject tree manipulation |
259 ////////////////////////////////////////// | 255 ////////////////////////////////////////// |
260 virtual bool canHaveChildren() const { return virtualChildren(); } | 256 virtual bool canHaveChildren() const { return virtualChildren(); } |
261 virtual bool isChildAllowed(LayoutObject*, const ComputedStyle&) const { ret
urn true; } | 257 virtual bool isChildAllowed(LayoutObject*, const ComputedStyle&) const { ret
urn true; } |
262 virtual void addChild(LayoutObject* newChild, LayoutObject* beforeChild = nu
llptr); | 258 virtual void addChild(LayoutObject* newChild, LayoutObject* beforeChild = nu
llptr); |
263 virtual void addChildIgnoringContinuation(LayoutObject* newChild, LayoutObje
ct* beforeChild = nullptr) { return addChild(newChild, beforeChild); } | 259 virtual void addChildIgnoringContinuation(LayoutObject* newChild, LayoutObje
ct* beforeChild = nullptr) { return addChild(newChild, beforeChild); } |
264 virtual void removeChild(LayoutObject*); | 260 virtual void removeChild(LayoutObject*); |
265 virtual bool createsAnonymousWrapper() const { return false; } | 261 virtual bool createsAnonymousWrapper() const { return false; } |
266 ////////////////////////////////////////// | 262 ////////////////////////////////////////// |
267 | 263 |
268 protected: | 264 // Sets the parent of this object but doesn't add it as a child of the paren
t. |
| 265 void setDangerousOneWayParent(LayoutObject*); |
| 266 |
| 267 private: |
269 ////////////////////////////////////////// | 268 ////////////////////////////////////////// |
270 // Helper functions. Dangerous to use! | 269 // Helper functions. Dangerous to use! |
271 void setPreviousSibling(LayoutObject* previous) { m_previous = previous; } | 270 void setPreviousSibling(LayoutObject* previous) { m_previous = previous; } |
272 void setNextSibling(LayoutObject* next) { m_next = next; } | 271 void setNextSibling(LayoutObject* next) { m_next = next; } |
273 void setParent(LayoutObject* parent) | 272 void setParent(LayoutObject* parent) |
274 { | 273 { |
275 m_parent = parent; | 274 m_parent = parent; |
276 | 275 |
277 // Only update if our flow thread state is different from our new parent
and if we're not a LayoutFlowThread. | 276 // Only update if our flow thread state is different from our new parent
and if we're not a LayoutFlowThread. |
278 // A LayoutFlowThread is always considered to be inside itself, so it ne
ver has to change its state | 277 // A LayoutFlowThread is always considered to be inside itself, so it ne
ver has to change its state |
(...skipping 767 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1046 void invalidateDisplayItemClient(const DisplayItemClientWrapper&) const; | 1045 void invalidateDisplayItemClient(const DisplayItemClientWrapper&) const; |
1047 void invalidateDisplayItemClientForNonCompositingDescendants() const { inval
idateDisplayItemClientForNonCompositingDescendantsOf(*this); } | 1046 void invalidateDisplayItemClientForNonCompositingDescendants() const { inval
idateDisplayItemClientForNonCompositingDescendantsOf(*this); } |
1048 // A normal object should use invalidateDisplayItemClientForNonCompositingDe
scendants() | 1047 // A normal object should use invalidateDisplayItemClientForNonCompositingDe
scendants() |
1049 // to invalidate its descendants which are painted on the same backing. Howe
ver, for | 1048 // to invalidate its descendants which are painted on the same backing. Howe
ver, for |
1050 // an object (e.g. LayoutScrollbarPart, custom scroll corner, custom resizer
) which is | 1049 // an object (e.g. LayoutScrollbarPart, custom scroll corner, custom resizer
) which is |
1051 // not hooked up in the layout tree and not able to find its paint backing,
it should | 1050 // not hooked up in the layout tree and not able to find its paint backing,
it should |
1052 // let its owning layout object call the following function. | 1051 // let its owning layout object call the following function. |
1053 // FIXME: should we hook up scrollbar parts in the layout tree? crbug.com/48
4263. | 1052 // FIXME: should we hook up scrollbar parts in the layout tree? crbug.com/48
4263. |
1054 void invalidateDisplayItemClientForNonCompositingDescendantsOf(const LayoutO
bject&) const; | 1053 void invalidateDisplayItemClientForNonCompositingDescendantsOf(const LayoutO
bject&) const; |
1055 | 1054 |
| 1055 // Called before anonymousChild.setStyle(). Override to set custom styles fo
r the child. |
| 1056 virtual void updateAnonymousChildStyle(const LayoutObject& anonymousChild, C
omputedStyle& style) const { } |
| 1057 |
1056 protected: | 1058 protected: |
1057 enum LayoutObjectType { | 1059 enum LayoutObjectType { |
1058 LayoutObjectBr, | 1060 LayoutObjectBr, |
1059 LayoutObjectCanvas, | 1061 LayoutObjectCanvas, |
1060 LayoutObjectFieldset, | 1062 LayoutObjectFieldset, |
1061 LayoutObjectCounter, | 1063 LayoutObjectCounter, |
1062 LayoutObjectDetailsMarker, | 1064 LayoutObjectDetailsMarker, |
1063 LayoutObjectEmbeddedObject, | 1065 LayoutObjectEmbeddedObject, |
1064 LayoutObjectFileUploadControl, | 1066 LayoutObjectFileUploadControl, |
1065 LayoutObjectFrame, | 1067 LayoutObjectFrame, |
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1126 | 1128 |
1127 inline bool layerCreationAllowedForSubtree() const; | 1129 inline bool layerCreationAllowedForSubtree() const; |
1128 | 1130 |
1129 // Overrides should call the superclass at the end. m_style will be 0 the fi
rst time | 1131 // Overrides should call the superclass at the end. m_style will be 0 the fi
rst time |
1130 // this function will be called. | 1132 // this function will be called. |
1131 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle)
; | 1133 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle)
; |
1132 // Overrides should call the superclass at the start. |oldStyle| will be 0 t
he first | 1134 // Overrides should call the superclass at the start. |oldStyle| will be 0 t
he first |
1133 // time this function is called. | 1135 // time this function is called. |
1134 virtual void styleDidChange(StyleDifference, const ComputedStyle* oldStyle); | 1136 virtual void styleDidChange(StyleDifference, const ComputedStyle* oldStyle); |
1135 void propagateStyleToAnonymousChildren(bool blockChildrenOnly = false); | 1137 void propagateStyleToAnonymousChildren(bool blockChildrenOnly = false); |
1136 virtual void updateAnonymousChildStyle(const LayoutObject& child, ComputedSt
yle& style) const { } | |
1137 | 1138 |
1138 protected: | 1139 protected: |
1139 virtual void willBeDestroyed(); | 1140 virtual void willBeDestroyed(); |
1140 | 1141 |
1141 virtual void insertedIntoTree(); | 1142 virtual void insertedIntoTree(); |
1142 virtual void willBeRemovedFromTree(); | 1143 virtual void willBeRemovedFromTree(); |
1143 | 1144 |
1144 void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_
node = document; } | 1145 void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_
node = document; } |
1145 | 1146 |
1146 // Add hit-test rects for the layout tree rooted at this node to the provide
d collection on a | 1147 // Add hit-test rects for the layout tree rooted at this node to the provide
d collection on a |
(...skipping 29 matching lines...) Expand all Loading... |
1176 virtual PaintInvalidationReason invalidatePaintIfNeeded(PaintInvalidationSta
te&, const LayoutBoxModelObject& paintInvalidationContainer); | 1177 virtual PaintInvalidationReason invalidatePaintIfNeeded(PaintInvalidationSta
te&, const LayoutBoxModelObject& paintInvalidationContainer); |
1177 | 1178 |
1178 // When this object is invalidated for paint, this method is called to inval
idate any DisplayItemClients | 1179 // When this object is invalidated for paint, this method is called to inval
idate any DisplayItemClients |
1179 // owned by this object, including the object itself, LayoutText/LayoutInlin
e line boxes, etc., | 1180 // owned by this object, including the object itself, LayoutText/LayoutInlin
e line boxes, etc., |
1180 // not including children which will be invalidated normally during invalida
teTreeIfNeeded() and | 1181 // not including children which will be invalidated normally during invalida
teTreeIfNeeded() and |
1181 // parts which are invalidated separately (e.g. scrollbars). | 1182 // parts which are invalidated separately (e.g. scrollbars). |
1182 virtual void invalidateDisplayItemClients(const LayoutBoxModelObject& paintI
nvalidationContainer) const; | 1183 virtual void invalidateDisplayItemClients(const LayoutBoxModelObject& paintI
nvalidationContainer) const; |
1183 | 1184 |
1184 void setIsSlowRepaintObject(bool); | 1185 void setIsSlowRepaintObject(bool); |
1185 | 1186 |
| 1187 void clearSelfNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setSelfNee
dsOverflowRecalcAfterStyleChange(false); } |
| 1188 void clearChildNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setChildN
eedsOverflowRecalcAfterStyleChange(false); } |
| 1189 void setShouldInvalidateOverflowForPaint() { m_bitfields.setShouldInvalidate
OverflowForPaint(true); } |
| 1190 void setEverHadLayout() { m_bitfields.setEverHadLayout(true); } |
| 1191 |
| 1192 // Remove this object and all descendants from the containing LayoutFlowThre
ad. |
| 1193 void removeFromLayoutFlowThread(); |
| 1194 |
1186 private: | 1195 private: |
1187 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP
aintInvalidationRect; } | 1196 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP
aintInvalidationRect; } |
1188 | 1197 |
1189 // Adjusts a paint invalidation rect in the space of |m_previousPaintInvalid
ationRect| and |m_previousPositionFromPaintInvalidationBacking| | 1198 // Adjusts a paint invalidation rect in the space of |m_previousPaintInvalid
ationRect| and |m_previousPositionFromPaintInvalidationBacking| |
1190 // to be in the space of the |paintInvalidationContainer|, | 1199 // to be in the space of the |paintInvalidationContainer|, |
1191 // if needed. They can be different only if |paintInvalidationContainer| is
a composited scroller. | 1200 // if needed. They can be different only if |paintInvalidationContainer| is
a composited scroller. |
1192 void adjustInvalidationRectForCompositedScrolling(LayoutRect&, const LayoutB
oxModelObject& paintInvalidationContainer) const; | 1201 void adjustInvalidationRectForCompositedScrolling(LayoutRect&, const LayoutB
oxModelObject& paintInvalidationContainer) const; |
1193 | 1202 |
1194 void clearLayoutRootIfNeeded() const; | 1203 void clearLayoutRootIfNeeded() const; |
1195 | 1204 |
(...skipping 19 matching lines...) Expand all Loading... |
1215 inline void invalidateContainerPreferredLogicalWidths(); | 1224 inline void invalidateContainerPreferredLogicalWidths(); |
1216 | 1225 |
1217 void invalidatePaintIncludingNonCompositingDescendantsInternal(const LayoutB
oxModelObject& repaintContainer); | 1226 void invalidatePaintIncludingNonCompositingDescendantsInternal(const LayoutB
oxModelObject& repaintContainer); |
1218 | 1227 |
1219 LayoutRect previousSelectionRectForPaintInvalidation() const; | 1228 LayoutRect previousSelectionRectForPaintInvalidation() const; |
1220 void setPreviousSelectionRectForPaintInvalidation(const LayoutRect&); | 1229 void setPreviousSelectionRectForPaintInvalidation(const LayoutRect&); |
1221 | 1230 |
1222 const LayoutBoxModelObject* enclosingCompositedContainer() const; | 1231 const LayoutBoxModelObject* enclosingCompositedContainer() const; |
1223 | 1232 |
1224 LayoutFlowThread* locateFlowThreadContainingBlock() const; | 1233 LayoutFlowThread* locateFlowThreadContainingBlock() const; |
1225 void removeFromLayoutFlowThread(); | |
1226 void removeFromLayoutFlowThreadRecursive(LayoutFlowThread*); | 1234 void removeFromLayoutFlowThreadRecursive(LayoutFlowThread*); |
1227 | 1235 |
1228 ComputedStyle* cachedFirstLineStyle() const; | 1236 ComputedStyle* cachedFirstLineStyle() const; |
1229 StyleDifference adjustStyleDifference(StyleDifference) const; | 1237 StyleDifference adjustStyleDifference(StyleDifference) const; |
1230 | 1238 |
1231 Color selectionColor(int colorProperty, const GlobalPaintFlags) const; | 1239 Color selectionColor(int colorProperty, const GlobalPaintFlags) const; |
1232 | 1240 |
1233 void removeShapeImageClient(ShapeValue*); | 1241 void removeShapeImageClient(ShapeValue*); |
1234 | 1242 |
1235 #if ENABLE(ASSERT) | 1243 #if ENABLE(ASSERT) |
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1403 #undef ADD_BOOLEAN_BITFIELD | 1411 #undef ADD_BOOLEAN_BITFIELD |
1404 | 1412 |
1405 LayoutObjectBitfields m_bitfields; | 1413 LayoutObjectBitfields m_bitfields; |
1406 | 1414 |
1407 void setSelfNeedsLayout(bool b) { m_bitfields.setSelfNeedsLayout(b); } | 1415 void setSelfNeedsLayout(bool b) { m_bitfields.setSelfNeedsLayout(b); } |
1408 void setNeedsPositionedMovementLayout(bool b) { m_bitfields.setNeedsPosition
edMovementLayout(b); } | 1416 void setNeedsPositionedMovementLayout(bool b) { m_bitfields.setNeedsPosition
edMovementLayout(b); } |
1409 void setNormalChildNeedsLayout(bool b) { m_bitfields.setNormalChildNeedsLayo
ut(b); } | 1417 void setNormalChildNeedsLayout(bool b) { m_bitfields.setNormalChildNeedsLayo
ut(b); } |
1410 void setPosChildNeedsLayout(bool b) { m_bitfields.setPosChildNeedsLayout(b);
} | 1418 void setPosChildNeedsLayout(bool b) { m_bitfields.setPosChildNeedsLayout(b);
} |
1411 void setNeedsSimplifiedNormalFlowLayout(bool b) { m_bitfields.setNeedsSimpli
fiedNormalFlowLayout(b); } | 1419 void setNeedsSimplifiedNormalFlowLayout(bool b) { m_bitfields.setNeedsSimpli
fiedNormalFlowLayout(b); } |
1412 void setIsDragging(bool b) { m_bitfields.setIsDragging(b); } | 1420 void setIsDragging(bool b) { m_bitfields.setIsDragging(b); } |
1413 void setEverHadLayout(bool b) { m_bitfields.setEverHadLayout(b); } | 1421 void clearShouldInvalidateOverflowForPaint() { m_bitfields.setShouldInvalida
teOverflowForPaint(false); } |
1414 void setShouldInvalidateOverflowForPaint(bool b) { m_bitfields.setShouldInva
lidateOverflowForPaint(b); } | 1422 void setSelfNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setSelfNeeds
OverflowRecalcAfterStyleChange(true); } |
1415 void setSelfNeedsOverflowRecalcAfterStyleChange(bool b) { m_bitfields.setSel
fNeedsOverflowRecalcAfterStyleChange(b); } | 1423 void setChildNeedsOverflowRecalcAfterStyleChange() { m_bitfields.setChildNee
dsOverflowRecalcAfterStyleChange(true); } |
1416 void setChildNeedsOverflowRecalcAfterStyleChange(bool b) { m_bitfields.setCh
ildNeedsOverflowRecalcAfterStyleChange(b); } | |
1417 | 1424 |
1418 private: | 1425 private: |
1419 // Store state between styleWillChange and styleDidChange | 1426 // Store state between styleWillChange and styleDidChange |
1420 static bool s_affectsParentBlock; | 1427 static bool s_affectsParentBlock; |
1421 | 1428 |
1422 // This stores the paint invalidation rect from the previous frame. This rec
t does *not* account for composited scrolling. See | 1429 // This stores the paint invalidation rect from the previous frame. This rec
t does *not* account for composited scrolling. See |
1423 // adjustInvalidationRectForCompositedScrolling(). | 1430 // adjustInvalidationRectForCompositedScrolling(). |
1424 LayoutRect m_previousPaintInvalidationRect; | 1431 LayoutRect m_previousPaintInvalidationRect; |
1425 | 1432 |
1426 // This stores the position in the paint invalidation backing's coordinate. | 1433 // This stores the position in the paint invalidation backing's coordinate. |
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1505 | 1512 |
1506 inline void LayoutObject::setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidat
ionReasonForTracing reason, MarkingBehavior markParents, SubtreeLayoutScope* lay
outer) | 1513 inline void LayoutObject::setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidat
ionReasonForTracing reason, MarkingBehavior markParents, SubtreeLayoutScope* lay
outer) |
1507 { | 1514 { |
1508 setNeedsLayout(reason, markParents, layouter); | 1515 setNeedsLayout(reason, markParents, layouter); |
1509 setShouldDoFullPaintInvalidation(); | 1516 setShouldDoFullPaintInvalidation(); |
1510 } | 1517 } |
1511 | 1518 |
1512 inline void LayoutObject::clearNeedsLayout() | 1519 inline void LayoutObject::clearNeedsLayout() |
1513 { | 1520 { |
1514 // Set flags for later stages/cycles. | 1521 // Set flags for later stages/cycles. |
1515 setEverHadLayout(true); | 1522 setEverHadLayout(); |
1516 setMayNeedPaintInvalidation(); | 1523 setMayNeedPaintInvalidation(); |
1517 m_bitfields.setNeededLayoutBecauseOfChildren(needsLayoutBecauseOfChildren())
; | 1524 m_bitfields.setNeededLayoutBecauseOfChildren(needsLayoutBecauseOfChildren())
; |
1518 | 1525 |
1519 // Clear needsLayout flags. | 1526 // Clear needsLayout flags. |
1520 setSelfNeedsLayout(false); | 1527 setSelfNeedsLayout(false); |
1521 setPosChildNeedsLayout(false); | 1528 setPosChildNeedsLayout(false); |
1522 setNeedsSimplifiedNormalFlowLayout(false); | 1529 setNeedsSimplifiedNormalFlowLayout(false); |
1523 setNormalChildNeedsLayout(false); | 1530 setNormalChildNeedsLayout(false); |
1524 setNeedsPositionedMovementLayout(false); | 1531 setNeedsPositionedMovementLayout(false); |
1525 setAncestorLineBoxDirty(false); | 1532 setAncestorLineBoxDirty(false); |
(...skipping 130 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1656 void showTree(const blink::LayoutObject*); | 1663 void showTree(const blink::LayoutObject*); |
1657 void showLineTree(const blink::LayoutObject*); | 1664 void showLineTree(const blink::LayoutObject*); |
1658 void showLayoutTree(const blink::LayoutObject* object1); | 1665 void showLayoutTree(const blink::LayoutObject* object1); |
1659 // We don't make object2 an optional parameter so that showLayoutTree | 1666 // We don't make object2 an optional parameter so that showLayoutTree |
1660 // can be called from gdb easily. | 1667 // can be called from gdb easily. |
1661 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec
t* object2); | 1668 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec
t* object2); |
1662 | 1669 |
1663 #endif | 1670 #endif |
1664 | 1671 |
1665 #endif // LayoutObject_h | 1672 #endif // LayoutObject_h |
OLD | NEW |