Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(806)

Side by Side Diff: third_party/WebKit/Source/core/layout/LayoutObject.h

Issue 2400863005: Reformat comments in core/layout up until LayoutTableRow (Closed)
Patch Set: Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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.
7 * All rights reserved.
7 * Copyright (C) 2009 Google Inc. All rights reserved. 8 * Copyright (C) 2009 Google Inc. All rights reserved.
8 * 9 *
9 * This library is free software; you can redistribute it and/or 10 * This library is free software; you can redistribute it and/or
10 * modify it under the terms of the GNU Library General Public 11 * modify it under the terms of the GNU Library General Public
11 * License as published by the Free Software Foundation; either 12 * License as published by the Free Software Foundation; either
12 * version 2 of the License, or (at your option) any later version. 13 * version 2 of the License, or (at your option) any later version.
13 * 14 *
14 * This library is distributed in the hope that it will be useful, 15 * This library is distributed in the hope that it will be useful,
15 * but WITHOUT ANY WARRANTY; without even the implied warranty of 16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
16 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
76 77
77 enum MarkingBehavior { 78 enum MarkingBehavior {
78 MarkOnlyThis, 79 MarkOnlyThis,
79 MarkContainerChain, 80 MarkContainerChain,
80 }; 81 };
81 82
82 enum MapCoordinatesMode { 83 enum MapCoordinatesMode {
83 IsFixed = 1 << 0, 84 IsFixed = 1 << 0,
84 UseTransforms = 1 << 1, 85 UseTransforms = 1 << 1,
85 86
86 // When walking up the containing block chain, applies a container flip for th e first 87 // When walking up the containing block chain, applies a container flip for
87 // element found, if any, for which isFlippedBlocksWritingMode is true. This o ption should 88 // the first element found, if any, for which isFlippedBlocksWritingMode is
88 // generally be used when mapping a source rect in the "physical coordinates w ith flipped 89 // true. This option should generally be used when mapping a source rect in
89 // block-flow" coordinate space (see LayoutBoxModelObject.h) to one in a physi cal 90 // the "physical coordinates with flipped block-flow" coordinate space (see
90 // destination space. 91 // LayoutBoxModelObject.h) to one in a physical destination space.
91 ApplyContainerFlip = 1 << 2, 92 ApplyContainerFlip = 1 << 2,
92 TraverseDocumentBoundaries = 1 << 3, 93 TraverseDocumentBoundaries = 1 << 3,
93 94
94 // Applies to LayoutView::mapLocalToAncestor() and LayoutView::mapToVisualRect InAncestorSpace() 95 // Applies to LayoutView::mapLocalToAncestor() and LayoutView::
95 // only, to indicate the input point or rect is in frame coordinates instead o f frame contents 96 // mapToVisualRectInAncestorSpace() only, to indicate the input point or rect
96 // coordinates. This disables view clipping and scroll offset adjustment. 97 // is in frame coordinates instead of frame contents coordinates. This
98 // disables view clipping and scroll offset adjustment.
97 // TODO(wangxianzhu): Remove this when root-layer-scrolls launches. 99 // TODO(wangxianzhu): Remove this when root-layer-scrolls launches.
98 InputIsInFrameCoordinates = 1 << 4, 100 InputIsInFrameCoordinates = 1 << 4,
99 }; 101 };
100 typedef unsigned MapCoordinatesFlags; 102 typedef unsigned MapCoordinatesFlags;
101 103
102 enum ScheduleRelayoutBehavior { ScheduleRelayout, DontScheduleRelayout }; 104 enum ScheduleRelayoutBehavior { ScheduleRelayout, DontScheduleRelayout };
103 105
104 const LayoutUnit& caretWidth(); 106 const LayoutUnit& caretWidth();
105 107
106 struct AnnotatedRegionValue { 108 struct AnnotatedRegionValue {
107 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW(); 109 DISALLOW_NEW_EXCEPT_PLACEMENT_NEW();
108 bool operator==(const AnnotatedRegionValue& o) const { 110 bool operator==(const AnnotatedRegionValue& o) const {
109 return draggable == o.draggable && bounds == o.bounds; 111 return draggable == o.draggable && bounds == o.bounds;
110 } 112 }
111 113
112 LayoutRect bounds; 114 LayoutRect bounds;
113 bool draggable; 115 bool draggable;
114 }; 116 };
115 117
116 typedef WTF::HashMap<const PaintLayer*, Vector<LayoutRect>> LayerHitTestRects; 118 typedef WTF::HashMap<const PaintLayer*, Vector<LayoutRect>> LayerHitTestRects;
117 119
118 #ifndef NDEBUG 120 #ifndef NDEBUG
119 const int showTreeCharacterOffset = 39; 121 const int showTreeCharacterOffset = 39;
120 #endif 122 #endif
121 123
122 // LayoutObject is the base class for all layout tree objects. 124 // LayoutObject is the base class for all layout tree objects.
123 // 125 //
124 // LayoutObjects form a tree structure that is a close mapping of the DOM tree. 126 // LayoutObjects form a tree structure that is a close mapping of the DOM tree.
125 // The root of the LayoutObject tree is the LayoutView, which is 127 // The root of the LayoutObject tree is the LayoutView, which is the
126 // the LayoutObject associated with the Document. 128 // LayoutObject associated with the Document.
127 // 129 //
128 // Some LayoutObjects don't have an associated Node and are called "anonymous" 130 // Some LayoutObjects don't have an associated Node and are called "anonymous"
129 // (see the constructor below). Anonymous LayoutObjects exist for several 131 // (see the constructor below). Anonymous LayoutObjects exist for several
130 // purposes but are usually required by CSS. A good example is anonymous table 132 // purposes but are usually required by CSS. A good example is anonymous table
131 // parts (see LayoutTable for the expected structure). Anonymous LayoutObjects 133 // parts (see LayoutTable for the expected structure). Anonymous LayoutObjects
132 // are generated when a new child is added to the tree in addChild(). See the 134 // are generated when a new child is added to the tree in addChild(). See the
133 // function for some important information on this. 135 // function for some important information on this.
134 // 136 //
135 // Also some Node don't have an associated LayoutObjects e.g. if display: none i s set. For more 137 // Also some Node don't have an associated LayoutObjects e.g. if display: none
136 // detail, see LayoutObject::createObject that creates the right LayoutObject ba sed on the style. 138 // is set. For more detail, see LayoutObject::createObject that creates the
139 // right LayoutObject based on the style.
137 // 140 //
138 // Because the SVG and CSS classes both inherit from this object, functions can belong to either 141 // Because the SVG and CSS classes both inherit from this object, functions can
139 // realm and sometimes to both. 142 // belong to either realm and sometimes to both.
140 // 143 //
141 // The purpose of the layout tree is to do layout (aka reflow) and store its res ults for painting and 144 // The purpose of the layout tree is to do layout (aka reflow) and store its
142 // hit-testing. 145 // results for painting and hit-testing. Layout is the process of sizing and
143 // Layout is the process of sizing and positioning Nodes on the page. In Blink, layouts always start 146 // positioning Nodes on the page. In Blink, layouts always start from a relayout
144 // from a relayout boundary (see objectIsRelayoutBoundary in LayoutObject.cpp). As such, we need to mark 147 // boundary (see objectIsRelayoutBoundary in LayoutObject.cpp). As such, we
145 // the ancestors all the way to the enclosing relayout boundary in order to do a correct layout. 148 // need to mark the ancestors all the way to the enclosing relayout boundary in
149 // order to do a correct layout.
146 // 150 //
147 // Due to the high cost of layout, a lot of effort is done to avoid doing full l ayouts of nodes. 151 // Due to the high cost of layout, a lot of effort is done to avoid doing full
148 // This is why there are several types of layout available to bypass the complex operations. See the 152 // layouts of nodes. This is why there are several types of layout available to
149 // comments on the layout booleans in LayoutObjectBitfields below about the diff erent layouts. 153 // bypass the complex operations. See the comments on the layout booleans in
154 // LayoutObjectBitfields below about the different layouts.
150 // 155 //
151 // To save memory, especially for the common child class LayoutText, LayoutObjec t doesn't provide 156 // To save memory, especially for the common child class LayoutText,
152 // storage for children. Descendant classes that do allow children have to have a LayoutObjectChildList 157 // LayoutObject doesn't provide storage for children. Descendant classes that do
153 // member that stores the actual children and override virtualChildren(). 158 // allow children have to have a LayoutObjectChildList member that stores the
159 // actual children and override virtualChildren().
154 // 160 //
155 // LayoutObject is an ImageResourceObserver, which means that it gets notified w hen associated images 161 // LayoutObject is an ImageResourceObserver, which means that it gets notified
156 // are changed. This is used for 2 main use cases: 162 // when associated images are changed. This is used for 2 main use cases:
157 // - reply to 'background-image' as we need to invalidate the background in this case. 163 // - reply to 'background-image' as we need to invalidate the background in this
164 // case.
158 // (See https://drafts.csswg.org/css-backgrounds-3/#the-background-image) 165 // (See https://drafts.csswg.org/css-backgrounds-3/#the-background-image)
159 // - image (LayoutImage, LayoutSVGImage) or video (LayoutVideo) objects that are placeholders for 166 // - image (LayoutImage, LayoutSVGImage) or video (LayoutVideo) objects that are
160 // displaying them. 167 // placeholders for displaying them.
161 // 168 //
162 // 169 //
163 // ***** LIFETIME ***** 170 // ***** LIFETIME *****
164 // 171 //
165 // LayoutObjects are fully owned by their associated DOM node. In other words, 172 // LayoutObjects are fully owned by their associated DOM node. In other words,
166 // it's the DOM node's responsibility to free its LayoutObject, this is why 173 // it's the DOM node's responsibility to free its LayoutObject, this is why
167 // LayoutObjects are not and SHOULD NOT be RefCounted. 174 // LayoutObjects are not and SHOULD NOT be RefCounted.
168 // 175 //
169 // LayoutObjects are created during the DOM attachment. This phase computes 176 // LayoutObjects are created during the DOM attachment. This phase computes
170 // the style and create the LayoutObject associated with the Node (see 177 // the style and create the LayoutObject associated with the Node (see
171 // Node::attachLayoutTree). LayoutObjects are destructed during detachment (see 178 // Node::attachLayoutTree). LayoutObjects are destructed during detachment (see
172 // Node::detachLayoutTree), which can happen when the DOM node is removed from t he 179 // Node::detachLayoutTree), which can happen when the DOM node is removed from
180 // the
dgrogan 2016/10/07 19:37:06 suboptimal
173 // DOM tree, during page tear down or when the style is changed to contain 181 // DOM tree, during page tear down or when the style is changed to contain
174 // 'display: none'. 182 // 'display: none'.
175 // 183 //
176 // Anonymous LayoutObjects are owned by their enclosing DOM node. This means 184 // Anonymous LayoutObjects are owned by their enclosing DOM node. This means
177 // that if the DOM node is detached, it has to destroy any anonymous 185 // that if the DOM node is detached, it has to destroy any anonymous
178 // descendants. This is done in LayoutObject::destroy(). 186 // descendants. This is done in LayoutObject::destroy().
179 // 187 //
180 // Note that for correctness, destroy() is expected to clean any anonymous 188 // Note that for correctness, destroy() is expected to clean any anonymous
181 // wrappers as sequences of insertion / removal could make them visible to 189 // wrappers as sequences of insertion / removal could make them visible to
182 // the page. This is done by LayoutObject::destroyAndCleanupAnonymousWrappers() 190 // the page. This is done by LayoutObject::destroyAndCleanupAnonymousWrappers()
(...skipping 23 matching lines...) Expand all
206 // preferredLogicalWidthsDirty. 214 // preferredLogicalWidthsDirty.
207 // 215 //
208 // See the individual getters below for more details about what each width is. 216 // See the individual getters below for more details about what each width is.
209 class CORE_EXPORT LayoutObject : public ImageResourceObserver, 217 class CORE_EXPORT LayoutObject : public ImageResourceObserver,
210 public DisplayItemClient { 218 public DisplayItemClient {
211 friend class LayoutObjectChildList; 219 friend class LayoutObjectChildList;
212 friend class VisualRectMappingTest; 220 friend class VisualRectMappingTest;
213 WTF_MAKE_NONCOPYABLE(LayoutObject); 221 WTF_MAKE_NONCOPYABLE(LayoutObject);
214 222
215 public: 223 public:
216 // Anonymous objects should pass the document as their node, and they will the n automatically be 224 // Anonymous objects should pass the document as their node, and they will
217 // marked as anonymous in the constructor. 225 // then automatically be marked as anonymous in the constructor.
218 explicit LayoutObject(Node*); 226 explicit LayoutObject(Node*);
219 ~LayoutObject() override; 227 ~LayoutObject() override;
220 228
221 // Returns the name of the layout object. 229 // Returns the name of the layout object.
222 virtual const char* name() const = 0; 230 virtual const char* name() const = 0;
223 231
224 // Returns the decorated name used by run-layout-tests. The name contains the name of the object 232 // Returns the decorated name used by run-layout-tests. The name contains the
225 // along with extra information about the layout object state (e.g. positionin g). 233 // name of the object along with extra information about the layout object
234 // state (e.g. positioning).
226 String decoratedName() const; 235 String decoratedName() const;
227 236
228 // DisplayItemClient methods. 237 // DisplayItemClient methods.
229 LayoutRect visualRect() const override; 238 LayoutRect visualRect() const override;
230 String debugName() const final; 239 String debugName() const final;
231 240
232 LayoutObject* parent() const { return m_parent; } 241 LayoutObject* parent() const { return m_parent; }
233 bool isDescendantOf(const LayoutObject*) const; 242 bool isDescendantOf(const LayoutObject*) const;
234 243
235 LayoutObject* previousSibling() const { return m_previous; } 244 LayoutObject* previousSibling() const { return m_previous; }
(...skipping 21 matching lines...) Expand all
257 LayoutObject* nextInPreOrder(const LayoutObject* stayWithin) const; 266 LayoutObject* nextInPreOrder(const LayoutObject* stayWithin) const;
258 LayoutObject* nextInPreOrderAfterChildren() const; 267 LayoutObject* nextInPreOrderAfterChildren() const;
259 LayoutObject* nextInPreOrderAfterChildren( 268 LayoutObject* nextInPreOrderAfterChildren(
260 const LayoutObject* stayWithin) const; 269 const LayoutObject* stayWithin) const;
261 LayoutObject* previousInPreOrder() const; 270 LayoutObject* previousInPreOrder() const;
262 LayoutObject* previousInPreOrder(const LayoutObject* stayWithin) const; 271 LayoutObject* previousInPreOrder(const LayoutObject* stayWithin) const;
263 LayoutObject* childAt(unsigned) const; 272 LayoutObject* childAt(unsigned) const;
264 273
265 LayoutObject* lastLeafChild() const; 274 LayoutObject* lastLeafChild() const;
266 275
267 // The following functions are used when the layout tree hierarchy changes to make sure layers get 276 // The following functions are used when the layout tree hierarchy changes to
268 // properly added and removed. Since containership can be implemented by any subclass, and since a hierarchy 277 // make sure layers get properly added and removed. Since containership can be
269 // can contain a mixture of boxes and other object types, these functions need to be in the base class. 278 // implemented by any subclass, and since a hierarchy can contain a mixture of
279 // boxes and other object types, these functions need to be in the base class.
270 PaintLayer* enclosingLayer() const; 280 PaintLayer* enclosingLayer() const;
271 void addLayers(PaintLayer* parentLayer); 281 void addLayers(PaintLayer* parentLayer);
272 void removeLayers(PaintLayer* parentLayer); 282 void removeLayers(PaintLayer* parentLayer);
273 void moveLayers(PaintLayer* oldParent, PaintLayer* newParent); 283 void moveLayers(PaintLayer* oldParent, PaintLayer* newParent);
274 PaintLayer* findNextLayer(PaintLayer* parentLayer, 284 PaintLayer* findNextLayer(PaintLayer* parentLayer,
275 LayoutObject* startPoint, 285 LayoutObject* startPoint,
276 bool checkParent = true); 286 bool checkParent = true);
277 287
278 // Returns the layer that will paint this object. 288 // Returns the layer that will paint this object. If possible, use the faster
279 // If possible, use the faster PaintInvalidationState::paintingLayer() instead . 289 // PaintInvalidationState::paintingLayer() instead.
280 PaintLayer* paintingLayer() const; 290 PaintLayer* paintingLayer() const;
281 291
282 // Scrolling is a LayoutBox concept, however some code just cares about recurs ively scrolling our enclosing ScrollableArea(s). 292 // Scrolling is a LayoutBox concept, however some code just cares about
293 // recursively scrolling our enclosing ScrollableArea(s).
283 bool scrollRectToVisible( 294 bool scrollRectToVisible(
284 const LayoutRect&, 295 const LayoutRect&,
285 const ScrollAlignment& alignX = ScrollAlignment::alignCenterIfNeeded, 296 const ScrollAlignment& alignX = ScrollAlignment::alignCenterIfNeeded,
286 const ScrollAlignment& alignY = ScrollAlignment::alignCenterIfNeeded, 297 const ScrollAlignment& alignY = ScrollAlignment::alignCenterIfNeeded,
287 ScrollType = ProgrammaticScroll, 298 ScrollType = ProgrammaticScroll,
288 bool makeVisibleInVisualViewport = true); 299 bool makeVisibleInVisualViewport = true);
289 300
290 // Convenience function for getting to the nearest enclosing box of a LayoutOb ject. 301 // Convenience function for getting to the nearest enclosing box of a
302 // LayoutObject.
291 LayoutBox* enclosingBox() const; 303 LayoutBox* enclosingBox() const;
292 LayoutBoxModelObject* enclosingBoxModelObject() const; 304 LayoutBoxModelObject* enclosingBoxModelObject() const;
293 305
294 LayoutBox* enclosingScrollableBox() const; 306 LayoutBox* enclosingScrollableBox() const;
295 307
296 // Function to return our enclosing flow thread if we are contained inside one . This 308 // Function to return our enclosing flow thread if we are contained inside
297 // function follows the containing block chain. 309 // one. This function follows the containing block chain.
298 LayoutFlowThread* flowThreadContainingBlock() const { 310 LayoutFlowThread* flowThreadContainingBlock() const {
299 if (!isInsideFlowThread()) 311 if (!isInsideFlowThread())
300 return nullptr; 312 return nullptr;
301 return locateFlowThreadContainingBlock(); 313 return locateFlowThreadContainingBlock();
302 } 314 }
303 315
304 #if ENABLE(ASSERT) 316 #if ENABLE(ASSERT)
305 void setHasAXObject(bool flag) { m_hasAXObject = flag; } 317 void setHasAXObject(bool flag) { m_hasAXObject = flag; }
306 bool hasAXObject() const { return m_hasAXObject; } 318 bool hasAXObject() const { return m_hasAXObject; }
307 319
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
410 ObjectPaintProperties& ensureObjectPaintProperties(); 422 ObjectPaintProperties& ensureObjectPaintProperties();
411 423
412 private: 424 private:
413 ////////////////////////////////////////// 425 //////////////////////////////////////////
414 // Helper functions. Dangerous to use! 426 // Helper functions. Dangerous to use!
415 void setPreviousSibling(LayoutObject* previous) { m_previous = previous; } 427 void setPreviousSibling(LayoutObject* previous) { m_previous = previous; }
416 void setNextSibling(LayoutObject* next) { m_next = next; } 428 void setNextSibling(LayoutObject* next) { m_next = next; }
417 void setParent(LayoutObject* parent) { 429 void setParent(LayoutObject* parent) {
418 m_parent = parent; 430 m_parent = parent;
419 431
420 // Only update if our flow thread state is different from our new parent and if we're not a LayoutFlowThread. 432 // Only update if our flow thread state is different from our new parent and
421 // A LayoutFlowThread is always considered to be inside itself, so it never has to change its state 433 // if we're not a LayoutFlowThread.
422 // in response to parent changes. 434 // A LayoutFlowThread is always considered to be inside itself, so it never
435 // has to change its state in response to parent changes.
423 bool insideFlowThread = parent && parent->isInsideFlowThread(); 436 bool insideFlowThread = parent && parent->isInsideFlowThread();
424 if (insideFlowThread != isInsideFlowThread() && !isLayoutFlowThread()) 437 if (insideFlowThread != isInsideFlowThread() && !isLayoutFlowThread())
425 setIsInsideFlowThreadIncludingDescendants(insideFlowThread); 438 setIsInsideFlowThreadIncludingDescendants(insideFlowThread);
426 } 439 }
427 440
428 ////////////////////////////////////////// 441 //////////////////////////////////////////
429 private: 442 private:
430 #if ENABLE(ASSERT) 443 #if ENABLE(ASSERT)
431 bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; } 444 bool isSetNeedsLayoutForbidden() const { return m_setNeedsLayoutForbidden; }
432 void setNeedsLayoutIsForbidden(bool flag) { 445 void setNeedsLayoutIsForbidden(bool flag) {
(...skipping 167 matching lines...) Expand 10 before | Expand all | Expand 10 after
600 LayoutInvalidationReason::LineBoxesChanged); 613 LayoutInvalidationReason::LineBoxesChanged);
601 } 614 }
602 615
603 void setIsInsideFlowThreadIncludingDescendants(bool); 616 void setIsInsideFlowThreadIncludingDescendants(bool);
604 617
605 bool isInsideFlowThread() const { return m_bitfields.isInsideFlowThread(); } 618 bool isInsideFlowThread() const { return m_bitfields.isInsideFlowThread(); }
606 void setIsInsideFlowThread(bool insideFlowThread) { 619 void setIsInsideFlowThread(bool insideFlowThread) {
607 m_bitfields.setIsInsideFlowThread(insideFlowThread); 620 m_bitfields.setIsInsideFlowThread(insideFlowThread);
608 } 621 }
609 622
610 // FIXME: Until all SVG layoutObjects can be subclasses of LayoutSVGModelObjec t we have 623 // FIXME: Until all SVG layoutObjects can be subclasses of
611 // to add SVG layoutObject methods to LayoutObject with an ASSERT_NOT_REACHED( ) default implementation. 624 // LayoutSVGModelObject we have to add SVG layoutObject methods to
625 // LayoutObject with an ASSERT_NOT_REACHED() default implementation.
612 bool isSVG() const { return isOfType(LayoutObjectSVG); } 626 bool isSVG() const { return isOfType(LayoutObjectSVG); }
613 bool isSVGRoot() const { return isOfType(LayoutObjectSVGRoot); } 627 bool isSVGRoot() const { return isOfType(LayoutObjectSVGRoot); }
614 bool isSVGContainer() const { return isOfType(LayoutObjectSVGContainer); } 628 bool isSVGContainer() const { return isOfType(LayoutObjectSVGContainer); }
615 bool isSVGTransformableContainer() const { 629 bool isSVGTransformableContainer() const {
616 return isOfType(LayoutObjectSVGTransformableContainer); 630 return isOfType(LayoutObjectSVGTransformableContainer);
617 } 631 }
618 bool isSVGViewportContainer() const { 632 bool isSVGViewportContainer() const {
619 return isOfType(LayoutObjectSVGViewportContainer); 633 return isOfType(LayoutObjectSVGViewportContainer);
620 } 634 }
621 bool isSVGGradientStop() const { 635 bool isSVGGradientStop() const {
(...skipping 14 matching lines...) Expand all
636 bool isSVGResourceContainer() const { 650 bool isSVGResourceContainer() const {
637 return isOfType(LayoutObjectSVGResourceContainer); 651 return isOfType(LayoutObjectSVGResourceContainer);
638 } 652 }
639 bool isSVGResourceFilter() const { 653 bool isSVGResourceFilter() const {
640 return isOfType(LayoutObjectSVGResourceFilter); 654 return isOfType(LayoutObjectSVGResourceFilter);
641 } 655 }
642 bool isSVGResourceFilterPrimitive() const { 656 bool isSVGResourceFilterPrimitive() const {
643 return isOfType(LayoutObjectSVGResourceFilterPrimitive); 657 return isOfType(LayoutObjectSVGResourceFilterPrimitive);
644 } 658 }
645 659
646 // FIXME: Those belong into a SVG specific base-class for all layoutObjects (s ee above) 660 // FIXME: Those belong into a SVG specific base-class for all layoutObjects
647 // Unfortunately we don't have such a class yet, because it's not possible for all layoutObjects 661 // (see above). Unfortunately we don't have such a class yet, because it's not
648 // to inherit from LayoutSVGObject -> LayoutObject (some need LayoutBlock inhe ritance for instance) 662 // possible for all layoutObjects to inherit from LayoutSVGObject ->
663 // LayoutObject (some need LayoutBlock inheritance for instance)
649 virtual void setNeedsTransformUpdate() {} 664 virtual void setNeedsTransformUpdate() {}
650 virtual void setNeedsBoundariesUpdate(); 665 virtual void setNeedsBoundariesUpdate();
651 666
652 bool isBlendingAllowed() const { 667 bool isBlendingAllowed() const {
653 return !isSVG() || (isSVGContainer() && !isSVGHiddenContainer()) || 668 return !isSVG() || (isSVGContainer() && !isSVGHiddenContainer()) ||
654 isSVGShape() || isSVGImage() || isSVGText(); 669 isSVGShape() || isSVGImage() || isSVGText();
655 } 670 }
656 virtual bool hasNonIsolatedBlendingDescendants() const { return false; } 671 virtual bool hasNonIsolatedBlendingDescendants() const { return false; }
657 enum DescendantIsolationState { 672 enum DescendantIsolationState {
658 DescendantIsolationRequired, 673 DescendantIsolationRequired,
659 DescendantIsolationNeedsUpdate, 674 DescendantIsolationNeedsUpdate,
660 }; 675 };
661 virtual void descendantIsolationRequirementsChanged( 676 virtual void descendantIsolationRequirementsChanged(
662 DescendantIsolationState) {} 677 DescendantIsolationState) {}
663 678
664 // Per SVG 1.1 objectBoundingBox ignores clipping, masking, filter effects, op acity and stroke-width. 679 // Per SVG 1.1 objectBoundingBox ignores clipping, masking, filter effects,
665 // This is used for all computation of objectBoundingBox relative units and by SVGLocatable::getBBox(). 680 // opacity and stroke-width.
666 // NOTE: Markers are not specifically ignored here by SVG 1.1 spec, but we ign ore them 681 // This is used for all computation of objectBoundingBox relative units and by
667 // since stroke-width is ignored (and marker size can depend on stroke-width). 682 // SVGLocatable::getBBox().
668 // objectBoundingBox is returned local coordinates. 683 // NOTE: Markers are not specifically ignored here by SVG 1.1 spec, but we
684 // ignore them since stroke-width is ignored (and marker size can depend on
685 // stroke-width). objectBoundingBox is returned local coordinates.
669 // The name objectBoundingBox is taken from the SVG 1.1 spec. 686 // The name objectBoundingBox is taken from the SVG 1.1 spec.
670 virtual FloatRect objectBoundingBox() const; 687 virtual FloatRect objectBoundingBox() const;
671 virtual FloatRect strokeBoundingBox() const; 688 virtual FloatRect strokeBoundingBox() const;
672 689
673 // Returns the smallest rectangle enclosing all of the painted content 690 // Returns the smallest rectangle enclosing all of the painted content
674 // respecting clipping, masking, filters, opacity, stroke-width and markers 691 // respecting clipping, masking, filters, opacity, stroke-width and markers
675 virtual FloatRect paintInvalidationRectInLocalSVGCoordinates() const; 692 virtual FloatRect paintInvalidationRectInLocalSVGCoordinates() const;
676 693
677 // This only returns the transform="" value from the SVG element. 694 // This only returns the transform="" value from the SVG element.
678 // Most callsites want localToParentTransform() instead. 695 // Most callsites want localToParentTransform() instead.
679 virtual AffineTransform localSVGTransform() const; 696 virtual AffineTransform localSVGTransform() const;
680 697
681 // Returns the full transform mapping from local coordinates to local coords f or the parent SVG layoutObject 698 // Returns the full transform mapping from local coordinates to local coords
682 // This includes any viewport transforms and x/y offsets as well as the transf orm="" value off the element. 699 // for the parent SVG layoutObject
700 // This includes any viewport transforms and x/y offsets as well as the
701 // transform="" value off the element.
683 virtual const AffineTransform& localToSVGParentTransform() const; 702 virtual const AffineTransform& localToSVGParentTransform() const;
684 703
685 // SVG uses FloatPoint precise hit testing, and passes the point in parent 704 // SVG uses FloatPoint precise hit testing, and passes the point in parent
686 // coordinates instead of in paint invalidation container coordinates. Eventua lly the 705 // coordinates instead of in paint invalidation container coordinates.
687 // rest of the layout tree will move to a similar model. 706 // Eventually the rest of the layout tree will move to a similar model.
688 virtual bool nodeAtFloatPoint(HitTestResult&, 707 virtual bool nodeAtFloatPoint(HitTestResult&,
689 const FloatPoint& pointInParent, 708 const FloatPoint& pointInParent,
690 HitTestAction); 709 HitTestAction);
691 710
692 // End of SVG-specific methods. 711 // End of SVG-specific methods.
693 712
694 bool isAnonymous() const { return m_bitfields.isAnonymous(); } 713 bool isAnonymous() const { return m_bitfields.isAnonymous(); }
695 bool isAnonymousBlock() const { 714 bool isAnonymousBlock() const {
696 // This function is kept in sync with anonymous block creation conditions in 715 // This function is kept in sync with anonymous block creation conditions in
697 // LayoutBlock::createAnonymousBlock(). This includes creating an anonymous 716 // LayoutBlock::createAnonymousBlock(). This includes creating an anonymous
698 // LayoutBlock having a BLOCK or BOX display. Other classes such as LayoutTe xtFragment 717 // LayoutBlock having a BLOCK or BOX display. Other classes such as
699 // are not LayoutBlocks and will return false. See https://bugs.webkit.org/s how_bug.cgi?id=56709. 718 // LayoutTextFragment are not LayoutBlocks and will return false.
719 // See https://bugs.webkit.org/show_bug.cgi?id=56709.
700 return isAnonymous() && (style()->display() == EDisplay::Block || 720 return isAnonymous() && (style()->display() == EDisplay::Block ||
701 style()->display() == EDisplay::Box) && 721 style()->display() == EDisplay::Box) &&
702 style()->styleType() == PseudoIdNone && isLayoutBlock() && 722 style()->styleType() == PseudoIdNone && isLayoutBlock() &&
703 !isListMarker() && !isLayoutFlowThread() && 723 !isListMarker() && !isLayoutFlowThread() &&
704 !isLayoutMultiColumnSet() && !isLayoutFullScreen() && 724 !isLayoutMultiColumnSet() && !isLayoutFullScreen() &&
705 !isLayoutFullScreenPlaceholder(); 725 !isLayoutFullScreenPlaceholder();
706 } 726 }
707 bool isElementContinuation() const { 727 bool isElementContinuation() const {
708 return node() && node()->layoutObject() != this; 728 return node() && node()->layoutObject() != this;
709 } 729 }
(...skipping 27 matching lines...) Expand all
737 bool isAtomicInlineLevel() const { return m_bitfields.isAtomicInlineLevel(); } 757 bool isAtomicInlineLevel() const { return m_bitfields.isAtomicInlineLevel(); }
738 bool isHorizontalWritingMode() const { 758 bool isHorizontalWritingMode() const {
739 return m_bitfields.horizontalWritingMode(); 759 return m_bitfields.horizontalWritingMode();
740 } 760 }
741 bool hasFlippedBlocksWritingMode() const { 761 bool hasFlippedBlocksWritingMode() const {
742 return style()->isFlippedBlocksWritingMode(); 762 return style()->isFlippedBlocksWritingMode();
743 } 763 }
744 764
745 bool hasLayer() const { return m_bitfields.hasLayer(); } 765 bool hasLayer() const { return m_bitfields.hasLayer(); }
746 766
747 // This may be different from styleRef().hasBoxDecorationBackground() because some objects may 767 // This may be different from styleRef().hasBoxDecorationBackground() because
748 // have box decoration background other than from their own style. 768 // some objects may have box decoration background other than from their own
769 // style.
749 bool hasBoxDecorationBackground() const { 770 bool hasBoxDecorationBackground() const {
750 return m_bitfields.hasBoxDecorationBackground(); 771 return m_bitfields.hasBoxDecorationBackground();
751 } 772 }
752 773
753 bool backgroundIsKnownToBeObscured() const; 774 bool backgroundIsKnownToBeObscured() const;
754 775
755 bool needsLayout() const { 776 bool needsLayout() const {
756 return m_bitfields.selfNeedsLayout() || 777 return m_bitfields.selfNeedsLayout() ||
757 m_bitfields.normalChildNeedsLayout() || 778 m_bitfields.normalChildNeedsLayout() ||
758 m_bitfields.posChildNeedsLayout() || 779 m_bitfields.posChildNeedsLayout() ||
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
816 // Not calling style()->hasFilterInducingProperty because some objects force 837 // Not calling style()->hasFilterInducingProperty because some objects force
817 // to ignore reflection style (e.g. LayoutInline). 838 // to ignore reflection style (e.g. LayoutInline).
818 bool hasFilterInducingProperty() const { 839 bool hasFilterInducingProperty() const {
819 return (style() && style()->hasFilter()) || hasReflection(); 840 return (style() && style()->hasFilter()) || hasReflection();
820 } 841 }
821 842
822 bool hasShapeOutside() const { return style() && style()->shapeOutside(); } 843 bool hasShapeOutside() const { return style() && style()->shapeOutside(); }
823 844
824 inline bool preservesNewline() const; 845 inline bool preservesNewline() const;
825 846
826 // The pseudo element style can be cached or uncached. Use the cached method if the pseudo element doesn't respect 847 // The pseudo element style can be cached or uncached. Use the cached method
827 // any pseudo classes (and therefore has no concept of changing state). 848 // if the pseudo element doesn't respect any pseudo classes (and therefore
849 // has no concept of changing state).
828 ComputedStyle* getCachedPseudoStyle( 850 ComputedStyle* getCachedPseudoStyle(
829 PseudoId, 851 PseudoId,
830 const ComputedStyle* parentStyle = nullptr) const; 852 const ComputedStyle* parentStyle = nullptr) const;
831 PassRefPtr<ComputedStyle> getUncachedPseudoStyle( 853 PassRefPtr<ComputedStyle> getUncachedPseudoStyle(
832 const PseudoStyleRequest&, 854 const PseudoStyleRequest&,
833 const ComputedStyle* parentStyle = nullptr, 855 const ComputedStyle* parentStyle = nullptr,
834 const ComputedStyle* ownStyle = nullptr) const; 856 const ComputedStyle* ownStyle = nullptr) const;
835 857
836 LayoutView* view() const { return document().layoutView(); } 858 LayoutView* view() const { return document().layoutView(); }
837 FrameView* frameView() const { return document().view(); } 859 FrameView* frameView() const { return document().view(); }
(...skipping 24 matching lines...) Expand all
862 } 884 }
863 bool isColumnSpanAll() const { 885 bool isColumnSpanAll() const {
864 return style()->getColumnSpan() == ColumnSpanAll && spannerPlaceholder(); 886 return style()->getColumnSpan() == ColumnSpanAll && spannerPlaceholder();
865 } 887 }
866 888
867 // We include isLayoutButton() in this check, because buttons are 889 // We include isLayoutButton() in this check, because buttons are
868 // implemented using flex box but should still support things like 890 // implemented using flex box but should still support things like
869 // first-line, first-letter and text-overflow. 891 // first-line, first-letter and text-overflow.
870 // The flex box and grid specs require that flex box and grid do not 892 // The flex box and grid specs require that flex box and grid do not
871 // support first-line|first-letter, though. 893 // support first-line|first-letter, though.
872 // TODO(cbiesinger): Remove when buttons are implemented with align-items inst ead 894 // TODO(cbiesinger): Remove when buttons are implemented with align-items
873 // of flex box. crbug.com/226252. 895 // instead of flex box. crbug.com/226252.
874 bool behavesLikeBlockContainer() const { 896 bool behavesLikeBlockContainer() const {
875 return isLayoutBlockFlow() || isLayoutButton(); 897 return isLayoutBlockFlow() || isLayoutButton();
876 } 898 }
877 899
878 // This function returns the containing block of the object. 900 // This function returns the containing block of the object.
879 // Due to CSS being inconsistent, a containing block can be a relatively 901 // Due to CSS being inconsistent, a containing block can be a relatively
880 // positioned inline, thus we can't return a LayoutBlock from this function. 902 // positioned inline, thus we can't return a LayoutBlock from this function.
881 // 903 //
882 // This method is extremely similar to containingBlock(), but with a few 904 // This method is extremely similar to containingBlock(), but with a few
883 // notable exceptions. 905 // notable exceptions.
884 // (1) It can be used on orphaned subtrees, i.e., it can be called safely 906 // (1) It can be used on orphaned subtrees, i.e., it can be called safely
885 // even when the object is not part of the primary document subtree yet. 907 // even when the object is not part of the primary document subtree yet.
886 // (2) For normal flow elements, it just returns the parent. 908 // (2) For normal flow elements, it just returns the parent.
887 // (3) For absolute positioned elements, it will return a relative 909 // (3) For absolute positioned elements, it will return a relative
888 // positioned inline. containingBlock() simply skips relpositioned inlines 910 // positioned inline. containingBlock() simply skips relpositioned inlines
889 // and lets an enclosing block handle the layout of the positioned object. 911 // and lets an enclosing block handle the layout of the positioned object.
890 // This does mean that computePositionedLogicalWidth and 912 // This does mean that computePositionedLogicalWidth and
891 // computePositionedLogicalHeight have to use container(). 913 // computePositionedLogicalHeight have to use container().
892 // 914 //
893 // This function should be used for any invalidation as it would correctly 915 // This function should be used for any invalidation as it would correctly
894 // walk the containing block chain. See e.g. markContainerChainForLayout. 916 // walk the containing block chain. See e.g. markContainerChainForLayout.
895 // It is also used for correctly sizing absolutely positioned elements 917 // It is also used for correctly sizing absolutely positioned elements
896 // (point 3 above). 918 // (point 3 above).
897 // 919 //
898 // If |ancestor| and |ancestorSkipped| are not null, on return *ancestorSkippe d 920 // If |ancestor| and |ancestorSkipped| are not null, on return
899 // is true if the layoutObject returned is an ancestor of |ancestor|. 921 // *ancestorSkipped is true if the layoutObject returned is an ancestor of
922 // |ancestor|.
900 LayoutObject* container(const LayoutBoxModelObject* ancestor = nullptr, 923 LayoutObject* container(const LayoutBoxModelObject* ancestor = nullptr,
901 bool* ancestorSkipped = nullptr, 924 bool* ancestorSkipped = nullptr,
902 bool* filterSkipped = nullptr) const; 925 bool* filterSkipped = nullptr) const;
903 // Finds the container as if this object is fixed-position. 926 // Finds the container as if this object is fixed-position.
904 LayoutBlock* containerForFixedPosition( 927 LayoutBlock* containerForFixedPosition(
905 const LayoutBoxModelObject* ancestor = nullptr, 928 const LayoutBoxModelObject* ancestor = nullptr,
906 bool* ancestorSkipped = nullptr, 929 bool* ancestorSkipped = nullptr,
907 bool* filterSkipped = nullptr) const; 930 bool* filterSkipped = nullptr) const;
908 // Finds the containing block as if this object is absolute-position. 931 // Finds the containing block as if this object is absolute-position.
909 LayoutBlock* containingBlockForAbsolutePosition() const; 932 LayoutBlock* containingBlockForAbsolutePosition() const;
(...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after
971 m_bitfields.setHasOverflowClip(hasOverflowClip); 994 m_bitfields.setHasOverflowClip(hasOverflowClip);
972 } 995 }
973 void setHasLayer(bool hasLayer) { m_bitfields.setHasLayer(hasLayer); } 996 void setHasLayer(bool hasLayer) { m_bitfields.setHasLayer(hasLayer); }
974 void setHasTransformRelatedProperty(bool hasTransform) { 997 void setHasTransformRelatedProperty(bool hasTransform) {
975 m_bitfields.setHasTransformRelatedProperty(hasTransform); 998 m_bitfields.setHasTransformRelatedProperty(hasTransform);
976 } 999 }
977 void setHasReflection(bool hasReflection) { 1000 void setHasReflection(bool hasReflection) {
978 m_bitfields.setHasReflection(hasReflection); 1001 m_bitfields.setHasReflection(hasReflection);
979 } 1002 }
980 1003
981 // paintOffset is the offset from the origin of the GraphicsContext at which t o paint the current object. 1004 // paintOffset is the offset from the origin of the GraphicsContext at which
1005 // to paint the current object.
982 virtual void paint(const PaintInfo&, const LayoutPoint& paintOffset) const; 1006 virtual void paint(const PaintInfo&, const LayoutPoint& paintOffset) const;
983 1007
984 // Subclasses must reimplement this method to compute the size and position 1008 // Subclasses must reimplement this method to compute the size and position
985 // of this object and all its descendants. 1009 // of this object and all its descendants.
986 // 1010 //
987 // By default, layout only lays out the children that are marked for layout. 1011 // By default, layout only lays out the children that are marked for layout.
988 // In some cases, layout has to force laying out more children. An example is 1012 // In some cases, layout has to force laying out more children. An example is
989 // when the width of the LayoutObject changes as this impacts children with 1013 // when the width of the LayoutObject changes as this impacts children with
990 // 'width' set to auto. 1014 // 'width' set to auto.
991 virtual void layout() = 0; 1015 virtual void layout() = 0;
(...skipping 16 matching lines...) Expand all
1008 m_bitfields.setConsumesSubtreeChangeNotification(true); 1032 m_bitfields.setConsumesSubtreeChangeNotification(true);
1009 } 1033 }
1010 1034
1011 // Flags used to mark if a descendant subtree of this object has changed. 1035 // Flags used to mark if a descendant subtree of this object has changed.
1012 void notifyOfSubtreeChange(); 1036 void notifyOfSubtreeChange();
1013 void notifyAncestorsOfSubtreeChange(); 1037 void notifyAncestorsOfSubtreeChange();
1014 bool wasNotifiedOfSubtreeChange() const { 1038 bool wasNotifiedOfSubtreeChange() const {
1015 return m_bitfields.notifiedOfSubtreeChange(); 1039 return m_bitfields.notifiedOfSubtreeChange();
1016 } 1040 }
1017 1041
1018 // Flags used to signify that a layoutObject needs to be notified by its desce ndants that they have 1042 // Flags used to signify that a layoutObject needs to be notified by its
1019 // had their child subtree changed. 1043 // descendants that they have had their child subtree changed.
1020 void registerSubtreeChangeListenerOnDescendants(bool); 1044 void registerSubtreeChangeListenerOnDescendants(bool);
1021 bool hasSubtreeChangeListenerRegistered() const { 1045 bool hasSubtreeChangeListenerRegistered() const {
1022 return m_bitfields.subtreeChangeListenerRegistered(); 1046 return m_bitfields.subtreeChangeListenerRegistered();
1023 } 1047 }
1024 1048
1025 /* This function performs a layout only if one is needed. */ 1049 /* This function performs a layout only if one is needed. */
1026 DISABLE_CFI_PERF void layoutIfNeeded() { 1050 DISABLE_CFI_PERF void layoutIfNeeded() {
1027 if (needsLayout()) 1051 if (needsLayout())
1028 layout(); 1052 layout();
1029 } 1053 }
1030 1054
1031 void forceLayout(); 1055 void forceLayout();
1032 void forceChildLayout(); 1056 void forceChildLayout();
1033 1057
1034 // Used for element state updates that cannot be fixed with a 1058 // Used for element state updates that cannot be fixed with a paint
1035 // paint invalidation and do not need a relayout. 1059 // invalidation and do not need a relayout.
1036 virtual void updateFromElement() {} 1060 virtual void updateFromElement() {}
1037 1061
1038 virtual void addAnnotatedRegions(Vector<AnnotatedRegionValue>&); 1062 virtual void addAnnotatedRegions(Vector<AnnotatedRegionValue>&);
1039 1063
1040 CompositingState compositingState() const; 1064 CompositingState compositingState() const;
1041 virtual CompositingReasons additionalCompositingReasons() const; 1065 virtual CompositingReasons additionalCompositingReasons() const;
1042 1066
1043 bool hitTest(HitTestResult&, 1067 bool hitTest(HitTestResult&,
1044 const HitTestLocation& locationInContainer, 1068 const HitTestLocation& locationInContainer,
1045 const LayoutPoint& accumulatedOffset, 1069 const LayoutPoint& accumulatedOffset,
(...skipping 12 matching lines...) Expand all
1058 virtual void dirtyLinesFromChangedChild( 1082 virtual void dirtyLinesFromChangedChild(
1059 LayoutObject*, 1083 LayoutObject*,
1060 MarkingBehavior markingBehaviour = MarkContainerChain); 1084 MarkingBehavior markingBehaviour = MarkContainerChain);
1061 1085
1062 // Set the style of the object and update the state of the object accordingly. 1086 // Set the style of the object and update the state of the object accordingly.
1063 void setStyle(PassRefPtr<ComputedStyle>); 1087 void setStyle(PassRefPtr<ComputedStyle>);
1064 1088
1065 // Set the style of the object if it's generated content. 1089 // Set the style of the object if it's generated content.
1066 void setPseudoStyle(PassRefPtr<ComputedStyle>); 1090 void setPseudoStyle(PassRefPtr<ComputedStyle>);
1067 1091
1068 // Updates only the local style ptr of the object. Does not update the state of the object, 1092 // Updates only the local style ptr of the object. Does not update the state
1069 // and so only should be called when the style is known not to have changed (o r from setStyle). 1093 // of the object, and so only should be called when the style is known not to
1094 // have changed (or from setStyle).
1070 void setStyleInternal(PassRefPtr<ComputedStyle> style) { m_style = style; } 1095 void setStyleInternal(PassRefPtr<ComputedStyle> style) { m_style = style; }
1071 1096
1072 void setStyleWithWritingModeOf(PassRefPtr<ComputedStyle>, 1097 void setStyleWithWritingModeOf(PassRefPtr<ComputedStyle>,
1073 LayoutObject* parent); 1098 LayoutObject* parent);
1074 void setStyleWithWritingModeOfParent(PassRefPtr<ComputedStyle>); 1099 void setStyleWithWritingModeOfParent(PassRefPtr<ComputedStyle>);
1075 void addChildWithWritingModeOfParent(LayoutObject* newChild, 1100 void addChildWithWritingModeOfParent(LayoutObject* newChild,
1076 LayoutObject* beforeChild); 1101 LayoutObject* beforeChild);
1077 1102
1078 void firstLineStyleDidChange(const ComputedStyle& oldStyle, 1103 void firstLineStyleDidChange(const ComputedStyle& oldStyle,
1079 const ComputedStyle& newStyle); 1104 const ComputedStyle& newStyle);
1080 1105
1081 void clearBaseComputedStyle(); 1106 void clearBaseComputedStyle();
1082 1107
1083 // This function returns an enclosing non-anonymous LayoutBlock for this 1108 // This function returns an enclosing non-anonymous LayoutBlock for this
1084 // element. 1109 // element. This function is not always returning the containing block as
1085 // This function is not always returning the containing block as defined by 1110 // defined by CSS. In particular:
1086 // CSS. In particular:
1087 // - if the CSS containing block is a relatively positioned inline, 1111 // - if the CSS containing block is a relatively positioned inline,
1088 // the function returns the inline's enclosing non-anonymous LayoutBlock. 1112 // the function returns the inline's enclosing non-anonymous LayoutBlock.
1089 // This means that a LayoutInline would be skipped (expected as it's not a 1113 // This means that a LayoutInline would be skipped (expected as it's not a
1090 // LayoutBlock) but so would be an inline LayoutTable or LayoutBlockFlow. 1114 // LayoutBlock) but so would be an inline LayoutTable or LayoutBlockFlow.
1091 // TODO(jchaffraix): Is that REALLY what we want here? 1115 // TODO(jchaffraix): Is that REALLY what we want here?
1092 // - if the CSS containing block is anonymous, we find its enclosing 1116 // - if the CSS containing block is anonymous, we find its enclosing
1093 // non-anonymous LayoutBlock. 1117 // non-anonymous LayoutBlock.
1094 // Note that in the previous examples, the returned LayoutBlock has no 1118 // Note that in the previous examples, the returned LayoutBlock has no
1095 // logical relationship to the original element. 1119 // logical relationship to the original element.
1096 // 1120 //
1097 // LayoutBlocks are the one that handle laying out positioned elements, 1121 // LayoutBlocks are the one that handle laying out positioned elements,
1098 // thus this function is important during layout, to insert the positioned 1122 // thus this function is important during layout, to insert the positioned
1099 // elements into the correct LayoutBlock. 1123 // elements into the correct LayoutBlock.
1100 // 1124 //
1101 // See container() for the function that returns the containing block. 1125 // See container() for the function that returns the containing block.
1102 // See LayoutBlock.h for some extra explanations on containing blocks. 1126 // See LayoutBlock.h for some extra explanations on containing blocks.
1103 LayoutBlock* containingBlock() const; 1127 LayoutBlock* containingBlock() const;
1104 1128
1105 bool canContainAbsolutePositionObjects() const { 1129 bool canContainAbsolutePositionObjects() const {
1106 return m_style->canContainAbsolutePositionObjects() || 1130 return m_style->canContainAbsolutePositionObjects() ||
1107 canContainFixedPositionObjects(); 1131 canContainFixedPositionObjects();
1108 } 1132 }
1109 bool canContainFixedPositionObjects() const { 1133 bool canContainFixedPositionObjects() const {
1110 return isLayoutView() || isSVGForeignObject() || 1134 return isLayoutView() || isSVGForeignObject() ||
1111 (isLayoutBlock() && m_style->canContainFixedPositionObjects()); 1135 (isLayoutBlock() && m_style->canContainFixedPositionObjects());
1112 } 1136 }
1113 1137
1114 // Convert the given local point to absolute coordinates 1138 // Convert the given local point to absolute coordinates
1115 // FIXME: Temporary. If UseTransforms is true, take transforms into account. E ventually localToAbsolute() will always be transform-aware. 1139 // FIXME: Temporary. If UseTransforms is true, take transforms into account.
1140 // Eventually localToAbsolute() will always be transform-aware.
1116 FloatPoint localToAbsolute(const FloatPoint& localPoint = FloatPoint(), 1141 FloatPoint localToAbsolute(const FloatPoint& localPoint = FloatPoint(),
1117 MapCoordinatesFlags = 0) const; 1142 MapCoordinatesFlags = 0) const;
1118 1143
1119 // If the LayoutBoxModelObject ancestor is non-null, the input point is in the space of the ancestor. 1144 // If the LayoutBoxModelObject ancestor is non-null, the input point is in the
1145 // space of the ancestor.
1120 // Otherwise: 1146 // Otherwise:
1121 // If TraverseDocumentBoundaries is specified, the input point is in the spa ce of the local root frame. 1147 // If TraverseDocumentBoundaries is specified, the input point is in the
1148 // space of the local root frame.
1122 // Otherwise, the input point is in the space of the containing frame. 1149 // Otherwise, the input point is in the space of the containing frame.
1123 FloatPoint ancestorToLocal(LayoutBoxModelObject*, 1150 FloatPoint ancestorToLocal(LayoutBoxModelObject*,
1124 const FloatPoint&, 1151 const FloatPoint&,
1125 MapCoordinatesFlags = 0) const; 1152 MapCoordinatesFlags = 0) const;
1126 FloatPoint absoluteToLocal(const FloatPoint& point, 1153 FloatPoint absoluteToLocal(const FloatPoint& point,
1127 MapCoordinatesFlags mode = 0) const { 1154 MapCoordinatesFlags mode = 0) const {
1128 return ancestorToLocal(nullptr, point, mode); 1155 return ancestorToLocal(nullptr, point, mode);
1129 } 1156 }
1130 1157
1131 // Convert a local quad to absolute coordinates, taking transforms into accoun t. 1158 // Convert a local quad to absolute coordinates, taking transforms into
1159 // account.
1132 FloatQuad localToAbsoluteQuad(const FloatQuad& quad, 1160 FloatQuad localToAbsoluteQuad(const FloatQuad& quad,
1133 MapCoordinatesFlags mode = 0) const { 1161 MapCoordinatesFlags mode = 0) const {
1134 return localToAncestorQuad(quad, nullptr, mode); 1162 return localToAncestorQuad(quad, nullptr, mode);
1135 } 1163 }
1136 1164
1137 // Convert a quad in ancestor coordinates to local coordinates. 1165 // Convert a quad in ancestor coordinates to local coordinates.
1138 // If the LayoutBoxModelObject ancestor is non-null, the input quad is in the space of the ancestor. 1166 // If the LayoutBoxModelObject ancestor is non-null, the input quad is in the
1167 // space of the ancestor.
1139 // Otherwise: 1168 // Otherwise:
1140 // If TraverseDocumentBoundaries is specified, the input quad is in the spac e of the local root frame. 1169 // If TraverseDocumentBoundaries is specified, the input quad is in the
1170 // space of the local root frame.
1141 // Otherwise, the input quad is in the space of the containing frame. 1171 // Otherwise, the input quad is in the space of the containing frame.
1142 FloatQuad ancestorToLocalQuad(LayoutBoxModelObject*, 1172 FloatQuad ancestorToLocalQuad(LayoutBoxModelObject*,
1143 const FloatQuad&, 1173 const FloatQuad&,
1144 MapCoordinatesFlags mode = 0) const; 1174 MapCoordinatesFlags mode = 0) const;
1145 FloatQuad absoluteToLocalQuad(const FloatQuad& quad, 1175 FloatQuad absoluteToLocalQuad(const FloatQuad& quad,
1146 MapCoordinatesFlags mode = 0) const { 1176 MapCoordinatesFlags mode = 0) const {
1147 return ancestorToLocalQuad(nullptr, quad, mode); 1177 return ancestorToLocalQuad(nullptr, quad, mode);
1148 } 1178 }
1149 1179
1150 // Convert a local quad into the coordinate system of container, taking transf orms into account. 1180 // Convert a local quad into the coordinate system of container, taking
1151 // If the LayoutBoxModelObject ancestor is non-null, the result will be in the space of the ancestor. 1181 // transforms into account.
1182 // If the LayoutBoxModelObject ancestor is non-null, the result will be in the
1183 // space of the ancestor.
1152 // Otherwise: 1184 // Otherwise:
1153 // If TraverseDocumentBoundaries is specified, the result will be in the spa ce of the local root frame. 1185 // If TraverseDocumentBoundaries is specified, the result will be in the
1186 // space of the local root frame.
1154 // Otherwise, the result will be in the space of the containing frame. 1187 // Otherwise, the result will be in the space of the containing frame.
1155 FloatQuad localToAncestorQuad(const FloatQuad&, 1188 FloatQuad localToAncestorQuad(const FloatQuad&,
1156 const LayoutBoxModelObject* ancestor, 1189 const LayoutBoxModelObject* ancestor,
1157 MapCoordinatesFlags = 0) const; 1190 MapCoordinatesFlags = 0) const;
1158 FloatPoint localToAncestorPoint(const FloatPoint&, 1191 FloatPoint localToAncestorPoint(const FloatPoint&,
1159 const LayoutBoxModelObject* ancestor, 1192 const LayoutBoxModelObject* ancestor,
1160 MapCoordinatesFlags = 0) const; 1193 MapCoordinatesFlags = 0) const;
1161 void localToAncestorRects(Vector<LayoutRect>&, 1194 void localToAncestorRects(Vector<LayoutRect>&,
1162 const LayoutBoxModelObject* ancestor, 1195 const LayoutBoxModelObject* ancestor,
1163 const LayoutPoint& preOffset, 1196 const LayoutPoint& preOffset,
1164 const LayoutPoint& postOffset) const; 1197 const LayoutPoint& postOffset) const;
1165 1198
1166 // Return the transformation matrix to map points from local to the coordinate system of a container, taking transforms into account. 1199 // Return the transformation matrix to map points from local to the coordinate
1200 // system of a container, taking transforms into account.
1167 // Passing null for |ancestor| behaves the same as localToAncestorQuad. 1201 // Passing null for |ancestor| behaves the same as localToAncestorQuad.
1168 TransformationMatrix localToAncestorTransform( 1202 TransformationMatrix localToAncestorTransform(
1169 const LayoutBoxModelObject* ancestor, 1203 const LayoutBoxModelObject* ancestor,
1170 MapCoordinatesFlags = 0) const; 1204 MapCoordinatesFlags = 0) const;
1171 TransformationMatrix localToAbsoluteTransform( 1205 TransformationMatrix localToAbsoluteTransform(
1172 MapCoordinatesFlags mode = 0) const { 1206 MapCoordinatesFlags mode = 0) const {
1173 return localToAncestorTransform(nullptr, mode); 1207 return localToAncestorTransform(nullptr, mode);
1174 } 1208 }
1175 1209
1176 // Convert a local point into the coordinate system of backing coordinates. Al so returns the backing layer if needed. 1210 // Convert a local point into the coordinate system of backing coordinates.
1211 // Also returns the backing layer if needed.
1177 FloatPoint localToInvalidationBackingPoint( 1212 FloatPoint localToInvalidationBackingPoint(
1178 const LayoutPoint&, 1213 const LayoutPoint&,
1179 PaintLayer** backingLayer = nullptr); 1214 PaintLayer** backingLayer = nullptr);
1180 1215
1181 // Return the offset from the container() layoutObject (excluding transforms a nd multicol). 1216 // Return the offset from the container() layoutObject (excluding transforms
1217 // and multicol).
1182 virtual LayoutSize offsetFromContainer(const LayoutObject*) const; 1218 virtual LayoutSize offsetFromContainer(const LayoutObject*) const;
1183 // Return the offset from an object up the container() chain. Asserts that non e of the intermediate objects have transforms. 1219 // Return the offset from an object up the container() chain. Asserts that
1220 // none of the intermediate objects have transforms.
1184 LayoutSize offsetFromAncestorContainer(const LayoutObject*) const; 1221 LayoutSize offsetFromAncestorContainer(const LayoutObject*) const;
1185 1222
1186 virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint&) const {} 1223 virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint&) const {}
1187 1224
1188 FloatRect absoluteBoundingBoxFloatRect() const; 1225 FloatRect absoluteBoundingBoxFloatRect() const;
1189 // This returns an IntRect enclosing this object. If this object has an 1226 // This returns an IntRect enclosing this object. If this object has an
1190 // integral size and the position has fractional values, the resultant 1227 // integral size and the position has fractional values, the resultant
1191 // IntRect can be larger than the integral size. 1228 // IntRect can be larger than the integral size.
1192 IntRect absoluteBoundingBoxRect() const; 1229 IntRect absoluteBoundingBoxRect() const;
1193 // FIXME: This function should go away eventually 1230 // FIXME: This function should go away eventually
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1250 1287
1251 static inline Color resolveColor(const ComputedStyle& styleToUse, 1288 static inline Color resolveColor(const ComputedStyle& styleToUse,
1252 int colorProperty) { 1289 int colorProperty) {
1253 return styleToUse.visitedDependentColor(colorProperty); 1290 return styleToUse.visitedDependentColor(colorProperty);
1254 } 1291 }
1255 1292
1256 inline Color resolveColor(int colorProperty) const { 1293 inline Color resolveColor(int colorProperty) const {
1257 return style()->visitedDependentColor(colorProperty); 1294 return style()->visitedDependentColor(colorProperty);
1258 } 1295 }
1259 1296
1260 // Used only by Element::pseudoStyleCacheIsInvalid to get a first line style b ased off of a 1297 // Used only by Element::pseudoStyleCacheIsInvalid to get a first line style
1261 // given new style, without accessing the cache. 1298 // based off of a given new style, without accessing the cache.
1262 PassRefPtr<ComputedStyle> uncachedFirstLineStyle(ComputedStyle*) const; 1299 PassRefPtr<ComputedStyle> uncachedFirstLineStyle(ComputedStyle*) const;
1263 1300
1264 virtual CursorDirective getCursor(const LayoutPoint&, Cursor&) const; 1301 virtual CursorDirective getCursor(const LayoutPoint&, Cursor&) const;
1265 1302
1266 struct AppliedTextDecoration { 1303 struct AppliedTextDecoration {
1267 STACK_ALLOCATED(); 1304 STACK_ALLOCATED();
1268 Color color; 1305 Color color;
1269 TextDecorationStyle style; 1306 TextDecorationStyle style;
1270 AppliedTextDecoration() 1307 AppliedTextDecoration()
1271 : color(Color::transparent), style(TextDecorationStyleSolid) {} 1308 : color(Color::transparent), style(TextDecorationStyleSolid) {}
1272 }; 1309 };
1273 1310
1274 void getTextDecorations(unsigned decorations, 1311 void getTextDecorations(unsigned decorations,
1275 AppliedTextDecoration& underline, 1312 AppliedTextDecoration& underline,
1276 AppliedTextDecoration& overline, 1313 AppliedTextDecoration& overline,
1277 AppliedTextDecoration& linethrough, 1314 AppliedTextDecoration& linethrough,
1278 bool quirksMode = false, 1315 bool quirksMode = false,
1279 bool firstlineStyle = false); 1316 bool firstlineStyle = false);
1280 1317
1281 // Return the LayoutBoxModelObject in the container chain which 1318 // Return the LayoutBoxModelObject in the container chain which is responsible
1282 // is responsible for painting this object. The function crosses 1319 // for painting this object. The function crosses frames boundaries so the
1283 // frames boundaries so the returned value can be in a 1320 // returned value can be in a different document.
1284 // different document.
1285 // 1321 //
1286 // This is the container that should be passed to 1322 // This is the container that should be passed to the '*forPaintInvalidation'
1287 // the '*forPaintInvalidation' methods. 1323 // methods.
1288 const LayoutBoxModelObject& containerForPaintInvalidation() const; 1324 const LayoutBoxModelObject& containerForPaintInvalidation() const;
1289 1325
1290 bool isPaintInvalidationContainer() const; 1326 bool isPaintInvalidationContainer() const;
1291 1327
1292 // Invalidate the paint of a specific subrectangle within a given object. The rect is in the object's coordinate space. 1328 // Invalidate the paint of a specific subrectangle within a given object. The
1293 // If a DisplayItemClient is specified, that client is invalidated rather than |this|. 1329 // rect is in the object's coordinate space.
1294 // Returns the visual rect that was invalidated (i.e, invalidation in the spac e of the GraphicsLayer backing this LayoutObject). 1330 // If a DisplayItemClient is specified, that client is invalidated rather than
1331 // |this|.
1332 // Returns the visual rect that was invalidated (i.e, invalidation in the
1333 // space of the GraphicsLayer backing this LayoutObject).
1295 LayoutRect invalidatePaintRectangle(const LayoutRect&, 1334 LayoutRect invalidatePaintRectangle(const LayoutRect&,
1296 DisplayItemClient* = nullptr) const; 1335 DisplayItemClient* = nullptr) const;
1297 1336
1298 // Walk the tree after layout issuing paint invalidations for layoutObjects th at have changed or moved, updating bounds that have changed, and clearing paint invalidation state. 1337 // Walk the tree after layout issuing paint invalidations for layoutObjects
1338 // that have changed or moved, updating bounds that have changed, and clearing
1339 // paint invalidation state.
1299 virtual void invalidateTreeIfNeeded(const PaintInvalidationState&); 1340 virtual void invalidateTreeIfNeeded(const PaintInvalidationState&);
1300 1341
1301 void setShouldDoFullPaintInvalidationIncludingNonCompositingDescendants(); 1342 void setShouldDoFullPaintInvalidationIncludingNonCompositingDescendants();
1302 1343
1303 // Returns true if the object itself will not generate any effective painted o utput no matter what 1344 // Returns true if the object itself will not generate any effective painted
1304 // size the object is. For example, this function can return false for an obje ct whose size is 1345 // output no matter what size the object is. For example, this function can
1305 // currently 0x0 but would have effective painted output if it was set a non-e mpty size. 1346 // return false for an object whose size is currently 0x0 but would have
1306 // It's used to skip unforced paint invalidation (which is when shouldDoFullPa intInvalidation 1347 // effective painted output if it was set a non-empty size.
1307 // is false, but mayNeedPaintInvalidation or childShouldCheckForPaintInvalidat ion is true) to 1348 // It's used to skip unforced paint invalidation (which is when
1308 // avoid unnecessary paint invalidations of empty areas covered by such object s. 1349 // shouldDoFullPaintInvalidation is false, but mayNeedPaintInvalidation or
1350 // childShouldCheckForPaintInvalidation is true) to avoid unnecessary paint
1351 // invalidations of empty areas covered by such objects.
1309 virtual bool paintedOutputOfObjectHasNoEffectRegardlessOfSize() const { 1352 virtual bool paintedOutputOfObjectHasNoEffectRegardlessOfSize() const {
1310 return false; 1353 return false;
1311 } 1354 }
1312 1355
1313 // Returns the rect that should have paint invalidated whenever this object ch anges. The rect is in the view's 1356 // Returns the rect that should have paint invalidated whenever this object
1314 // coordinate space. This method deals with outlines and overflow. 1357 // changes. The rect is in the view's coordinate space. This method deals with
1358 // outlines and overflow.
1315 virtual LayoutRect absoluteClippedOverflowRect() const; 1359 virtual LayoutRect absoluteClippedOverflowRect() const;
1316 1360
1317 // Returns the rect that should have paint invalidated whenever this object ch anges. The rect is in the object's 1361 // Returns the rect that should have paint invalidated whenever this object
1318 // local coordinate space. This is for non-SVG objects and LayoutSVGRoot only. SVG objects (except LayoutSVGRoot) 1362 // changes. The rect is in the object's local coordinate space. This is for
1319 // should use paintInvalidationRectInLocalSVGCoordinates() and map with SVG tr ansforms instead. 1363 // non-SVG objects and LayoutSVGRoot only.
1364 // SVG objects (except LayoutSVGRoot) should use
1365 // paintInvalidationRectInLocalSVGCoordinates() and map with SVG transforms
1366 // instead.
1320 virtual LayoutRect localOverflowRectForPaintInvalidation() const; 1367 virtual LayoutRect localOverflowRectForPaintInvalidation() const;
1321 1368
1322 // Given a rect in the object's coordinate space, mutates the rect into one re presenting the size of its visual painted 1369 // Given a rect in the object's coordinate space, mutates the rect into one
1323 // output as if |ancestor| was the root of the page: the rect is modified by a ny intervening clips, transforms 1370 // representing the size of its visual painted output as if |ancestor| was the
1324 // and scrolls between |this| and |ancestor| (not inclusive of |ancestor|), bu t not any above |ancestor|. 1371 // root of the page: the rect is modified by any intervening clips, transforms
1325 // The output is in the physical, painted coordinate pixel space of |ancestor| . 1372 // and scrolls between |this| and |ancestor| (not inclusive of |ancestor|),
1326 // Overflow clipping, CSS clipping and scrolling is *not* applied for |ancesto r| itself if |ancestor| scrolls overflow. 1373 // but not any above |ancestor|.
1374 // The output is in the physical, painted coordinate pixel space of
1375 // |ancestor|.
1376 // Overflow clipping, CSS clipping and scrolling is *not* applied for
1377 // |ancestor| itself if |ancestor| scrolls overflow.
1327 // The output rect is suitable for purposes such as paint invalidation. 1378 // The output rect is suitable for purposes such as paint invalidation.
1328 // 1379 //
1329 // If visualRectFlags has the EdgeInclusive bit set, clipping operations will use 1380 // If visualRectFlags has the EdgeInclusive bit set, clipping operations will
1330 // LayoutRect::inclusiveIntersect, and the return value of inclusiveIntersect will be propagated 1381 // use/ LayoutRect::inclusiveIntersect, and the return value of
1331 // to the return value of this method. Otherwise, clipping operations will us e LayoutRect::intersect, 1382 // inclusiveIntersect will be propagated to the return value of this method.
1332 // and the return value will be true only if the clipped rect has non-zero are a. 1383 // Otherwise, clipping operations will use LayoutRect::intersect, and the
1333 // See the documentation for LayoutRect::inclusiveIntersect for more informati on. 1384 // return value will be true only if the clipped rect has non-zero area.
1385 // See the documentation for LayoutRect::inclusiveIntersect for more
1386 // information.
1334 virtual bool mapToVisualRectInAncestorSpace( 1387 virtual bool mapToVisualRectInAncestorSpace(
1335 const LayoutBoxModelObject* ancestor, 1388 const LayoutBoxModelObject* ancestor,
1336 LayoutRect&, 1389 LayoutRect&,
1337 VisualRectFlags = DefaultVisualRectFlags) const; 1390 VisualRectFlags = DefaultVisualRectFlags) const;
1338 1391
1339 // Return the offset to the column in which the specified point (in flow-threa d coordinates) 1392 // Return the offset to the column in which the specified point (in
1340 // lives. This is used to convert a flow-thread point to a point in the contai ning coordinate space. 1393 // flow-thread coordinates) lives. This is used to convert a flow-thread point
1394 // to a point in the containing coordinate space.
1341 virtual LayoutSize columnOffset(const LayoutPoint&) const { 1395 virtual LayoutSize columnOffset(const LayoutPoint&) const {
1342 return LayoutSize(); 1396 return LayoutSize();
1343 } 1397 }
1344 1398
1345 virtual unsigned length() const { return 1; } 1399 virtual unsigned length() const { return 1; }
1346 1400
1347 bool isFloatingOrOutOfFlowPositioned() const { 1401 bool isFloatingOrOutOfFlowPositioned() const {
1348 return (isFloating() || isOutOfFlowPositioned()); 1402 return (isFloating() || isOutOfFlowPositioned());
1349 } 1403 }
1350 1404
1351 bool isTransparent() const { return style()->hasOpacity(); } 1405 bool isTransparent() const { return style()->hasOpacity(); }
1352 float opacity() const { return style()->opacity(); } 1406 float opacity() const { return style()->opacity(); }
1353 1407
1354 bool hasReflection() const { return m_bitfields.hasReflection(); } 1408 bool hasReflection() const { return m_bitfields.hasReflection(); }
1355 1409
1356 // The current selection state for an object. For blocks, the state refers to the state of the leaf 1410 // The current selection state for an object. For blocks, the state refers to
1357 // descendants (as described above in the SelectionState enum declaration). 1411 // the state of the leaf descendants (as described above in the SelectionState
1412 // enum declaration).
1358 SelectionState getSelectionState() const { 1413 SelectionState getSelectionState() const {
1359 return m_bitfields.getSelectionState(); 1414 return m_bitfields.getSelectionState();
1360 } 1415 }
1361 virtual void setSelectionState(SelectionState state) { 1416 virtual void setSelectionState(SelectionState state) {
1362 m_bitfields.setSelectionState(state); 1417 m_bitfields.setSelectionState(state);
1363 } 1418 }
1364 inline void setSelectionStateIfNeeded(SelectionState); 1419 inline void setSelectionStateIfNeeded(SelectionState);
1365 bool canUpdateSelectionOnRootLineBoxes() const; 1420 bool canUpdateSelectionOnRootLineBoxes() const;
1366 1421
1367 // A single rectangle that encompasses all of the selected objects within this object. Used to determine the tightest 1422 // A single rectangle that encompasses all of the selected objects within this
1368 // possible bounding box for the selection. The rect returned is in the object 's local coordinate space. 1423 // object. Used to determine the tightest possible bounding box for the
1424 // selection. The rect returned is in the object's local coordinate space.
1369 virtual LayoutRect localSelectionRect() const { return LayoutRect(); } 1425 virtual LayoutRect localSelectionRect() const { return LayoutRect(); }
1370 1426
1371 // View coordinates means the coordinate space of |view()|. 1427 // View coordinates means the coordinate space of |view()|.
1372 LayoutRect selectionRectInViewCoordinates() const; 1428 LayoutRect selectionRectInViewCoordinates() const;
1373 1429
1374 virtual bool canBeSelectionLeaf() const { return false; } 1430 virtual bool canBeSelectionLeaf() const { return false; }
1375 bool hasSelectedChildren() const { 1431 bool hasSelectedChildren() const {
1376 return getSelectionState() != SelectionNone; 1432 return getSelectionState() != SelectionNone;
1377 } 1433 }
1378 1434
1379 bool isSelectable() const; 1435 bool isSelectable() const;
1380 // Obtains the selection colors that should be used when painting a selection. 1436 // Obtains the selection colors that should be used when painting a selection.
1381 Color selectionBackgroundColor() const; 1437 Color selectionBackgroundColor() const;
1382 Color selectionForegroundColor(const GlobalPaintFlags) const; 1438 Color selectionForegroundColor(const GlobalPaintFlags) const;
1383 Color selectionEmphasisMarkColor(const GlobalPaintFlags) const; 1439 Color selectionEmphasisMarkColor(const GlobalPaintFlags) const;
1384 1440
1385 /** 1441 /**
1386 * Returns the local coordinates of the caret within this layout object. 1442 * Returns the local coordinates of the caret within this layout object.
1387 * @param caretOffset zero-based offset determining position within the layo ut object. 1443 * @param caretOffset zero-based offset determining position within the
1388 * @param extraWidthToEndOfLine optional out arg to give extra width to end of line - 1444 * layout object.
1445 * @param extraWidthToEndOfLine optional out arg to give extra width to end
1446 * of line -
1389 * useful for character range rect computations 1447 * useful for character range rect computations
1390 */ 1448 */
1391 virtual LayoutRect localCaretRect( 1449 virtual LayoutRect localCaretRect(
1392 InlineBox*, 1450 InlineBox*,
1393 int caretOffset, 1451 int caretOffset,
1394 LayoutUnit* extraWidthToEndOfLine = nullptr); 1452 LayoutUnit* extraWidthToEndOfLine = nullptr);
1395 1453
1396 // When performing a global document tear-down, the layoutObject of the docume nt is cleared. We use this 1454 // When performing a global document tear-down, the layoutObject of the
1397 // as a hook to detect the case of document destruction and don't waste time d oing unnecessary work. 1455 // document is cleared. We use this as a hook to detect the case of document
1456 // destruction and don't waste time doing unnecessary work.
1398 bool documentBeingDestroyed() const; 1457 bool documentBeingDestroyed() const;
1399 1458
1400 void destroyAndCleanupAnonymousWrappers(); 1459 void destroyAndCleanupAnonymousWrappers();
1401 1460
1402 // While the destroy() method is virtual, this should only be overriden in ver y rare circumstances. 1461 // While the destroy() method is virtual, this should only be overriden in
1403 // You want to override willBeDestroyed() instead unless you explicitly need t o stop this object 1462 // very rare circumstances.
1404 // from being destroyed (for example, LayoutPart overrides destroy() for this purpose). 1463 // You want to override willBeDestroyed() instead unless you explicitly need
1464 // to stop this object from being destroyed (for example, LayoutPart
1465 // overrides destroy() for this purpose).
1405 virtual void destroy(); 1466 virtual void destroy();
1406 1467
1407 // Virtual function helpers for the deprecated Flexible Box Layout (display: - webkit-box). 1468 // Virtual function helpers for the deprecated Flexible Box Layout (display:
1469 // -webkit-box).
1408 virtual bool isDeprecatedFlexibleBox() const { return false; } 1470 virtual bool isDeprecatedFlexibleBox() const { return false; }
1409 1471
1410 // Virtual function helper for the new FlexibleBox Layout (display: -webkit-fl ex). 1472 // Virtual function helper for the new FlexibleBox Layout (display:
1473 // -webkit-flex).
1411 virtual bool isFlexibleBox() const { return false; } 1474 virtual bool isFlexibleBox() const { return false; }
1412 1475
1413 bool isFlexibleBoxIncludingDeprecated() const { 1476 bool isFlexibleBoxIncludingDeprecated() const {
1414 return isFlexibleBox() || isDeprecatedFlexibleBox(); 1477 return isFlexibleBox() || isDeprecatedFlexibleBox();
1415 } 1478 }
1416 1479
1417 virtual bool isCombineText() const { return false; } 1480 virtual bool isCombineText() const { return false; }
1418 1481
1419 virtual int caretMinOffset() const; 1482 virtual int caretMinOffset() const;
1420 virtual int caretMaxOffset() const; 1483 virtual int caretMaxOffset() const;
(...skipping 19 matching lines...) Expand all
1440 (request.ignorePointerEventsNone() || 1503 (request.ignorePointerEventsNone() ||
1441 style()->pointerEvents() != PE_NONE) && 1504 style()->pointerEvents() != PE_NONE) &&
1442 !isInert(); 1505 !isInert();
1443 } 1506 }
1444 1507
1445 bool visibleToHitTesting() const { 1508 bool visibleToHitTesting() const {
1446 return style()->visibility() == EVisibility::Visible && 1509 return style()->visibility() == EVisibility::Visible &&
1447 style()->pointerEvents() != PE_NONE && !isInert(); 1510 style()->pointerEvents() != PE_NONE && !isInert();
1448 } 1511 }
1449 1512
1450 // Map points and quads through elements, potentially via 3d transforms. You s hould never need to call these directly; use 1513 // Map points and quads through elements, potentially via 3d transforms. You
1451 // localToAbsolute/absoluteToLocal methods instead. 1514 // should never need to call these directly; use localToAbsolute/
1515 // absoluteToLocal methods instead.
1452 virtual void mapLocalToAncestor( 1516 virtual void mapLocalToAncestor(
1453 const LayoutBoxModelObject* ancestor, 1517 const LayoutBoxModelObject* ancestor,
1454 TransformState&, 1518 TransformState&,
1455 MapCoordinatesFlags = ApplyContainerFlip) const; 1519 MapCoordinatesFlags = ApplyContainerFlip) const;
1456 // If the LayoutBoxModelObject ancestor is non-null, the input quad is in the space of the ancestor. 1520 // If the LayoutBoxModelObject ancestor is non-null, the input quad is in the
1521 // space of the ancestor.
1457 // Otherwise: 1522 // Otherwise:
1458 // If TraverseDocumentBoundaries is specified, the input quad is in the spac e of the local root frame. 1523 // If TraverseDocumentBoundaries is specified, the input quad is in the
1524 // space of the local root frame.
1459 // Otherwise, the input quad is in the space of the containing frame. 1525 // Otherwise, the input quad is in the space of the containing frame.
1460 virtual void mapAncestorToLocal( 1526 virtual void mapAncestorToLocal(
1461 const LayoutBoxModelObject*, 1527 const LayoutBoxModelObject*,
1462 TransformState&, 1528 TransformState&,
1463 MapCoordinatesFlags = ApplyContainerFlip) const; 1529 MapCoordinatesFlags = ApplyContainerFlip) const;
1464 1530
1465 // Pushes state onto LayoutGeometryMap about how to map coordinates from this layoutObject to its container, or ancestorToStopAt (whichever is encountered fir st). 1531 // Pushes state onto LayoutGeometryMap about how to map coordinates from this
1466 // Returns the layoutObject which was mapped to (container or ancestorToStopAt ). 1532 // layoutObject to its container, or ancestorToStopAt (whichever is
1533 // encountered first). Returns the layoutObject which was mapped to (container
1534 // or ancestorToStopAt).
1467 virtual const LayoutObject* pushMappingToContainer( 1535 virtual const LayoutObject* pushMappingToContainer(
1468 const LayoutBoxModelObject* ancestorToStopAt, 1536 const LayoutBoxModelObject* ancestorToStopAt,
1469 LayoutGeometryMap&) const; 1537 LayoutGeometryMap&) const;
1470 1538
1471 bool shouldUseTransformFromContainer(const LayoutObject* container) const; 1539 bool shouldUseTransformFromContainer(const LayoutObject* container) const;
1472 void getTransformFromContainer(const LayoutObject* container, 1540 void getTransformFromContainer(const LayoutObject* container,
1473 const LayoutSize& offsetInContainer, 1541 const LayoutSize& offsetInContainer,
1474 TransformationMatrix&) const; 1542 TransformationMatrix&) const;
1475 1543
1476 bool createsGroup() const { 1544 bool createsGroup() const {
1477 return isTransparent() || hasMask() || hasFilterInducingProperty() || 1545 return isTransparent() || hasMask() || hasFilterInducingProperty() ||
1478 style()->hasBlendMode(); 1546 style()->hasBlendMode();
1479 } 1547 }
1480 1548
1481 // Collects rectangles that the outline of this object would be drawing along the outside of, 1549 // Collects rectangles that the outline of this object would be drawing along
1482 // even if the object isn't styled with a outline for now. The rects also cove r continuations. 1550 // the outside of, even if the object isn't styled with a outline for now. The
1551 // rects also cover continuations.
1483 enum IncludeBlockVisualOverflowOrNot { 1552 enum IncludeBlockVisualOverflowOrNot {
1484 DontIncludeBlockVisualOverflow, 1553 DontIncludeBlockVisualOverflow,
1485 IncludeBlockVisualOverflow, 1554 IncludeBlockVisualOverflow,
1486 }; 1555 };
1487 virtual void addOutlineRects(Vector<LayoutRect>&, 1556 virtual void addOutlineRects(Vector<LayoutRect>&,
1488 const LayoutPoint& additionalOffset, 1557 const LayoutPoint& additionalOffset,
1489 IncludeBlockVisualOverflowOrNot) const {} 1558 IncludeBlockVisualOverflowOrNot) const {}
1490 1559
1491 // For history and compatibility reasons, we draw outline:auto (for focus ring s) and normal style outline differently. 1560 // For history and compatibility reasons, we draw outline:auto (for focus
1492 // Focus rings enclose block visual overflows (of line boxes and descendants), while normal outlines don't. 1561 // rings) and normal style outline differently.
1562 // Focus rings enclose block visual overflows (of line boxes and descendants),
1563 // while normal outlines don't.
1493 IncludeBlockVisualOverflowOrNot outlineRectsShouldIncludeBlockVisualOverflow() 1564 IncludeBlockVisualOverflowOrNot outlineRectsShouldIncludeBlockVisualOverflow()
1494 const { 1565 const {
1495 return styleRef().outlineStyleIsAuto() ? IncludeBlockVisualOverflow 1566 return styleRef().outlineStyleIsAuto() ? IncludeBlockVisualOverflow
1496 : DontIncludeBlockVisualOverflow; 1567 : DontIncludeBlockVisualOverflow;
1497 } 1568 }
1498 1569
1499 // Collects rectangles enclosing visual overflows of the DOM subtree under thi s object. 1570 // Collects rectangles enclosing visual overflows of the DOM subtree under
1500 // The rects also cover continuations which may be not in the layout subtree o f this object. 1571 // this object.
1501 // TODO(crbug.com/614781): Currently the result rects don't cover list markers and outlines. 1572 // The rects also cover continuations which may be not in the layout subtree
1573 // of this object.
1574 // TODO(crbug.com/614781): Currently the result rects don't cover list markers
1575 // and outlines.
1502 void addElementVisualOverflowRects( 1576 void addElementVisualOverflowRects(
1503 Vector<LayoutRect>& rects, 1577 Vector<LayoutRect>& rects,
1504 const LayoutPoint& additionalOffset) const { 1578 const LayoutPoint& additionalOffset) const {
1505 addOutlineRects(rects, additionalOffset, IncludeBlockVisualOverflow); 1579 addOutlineRects(rects, additionalOffset, IncludeBlockVisualOverflow);
1506 } 1580 }
1507 1581
1508 // Returns the rect enclosing united visual overflow of the DOM subtree under this object. 1582 // Returns the rect enclosing united visual overflow of the DOM subtree under
1509 // It includes continuations which may be not in the layout subtree of this ob ject. 1583 // this object. It includes continuations which may be not in the layout
1584 // subtree of this object.
1510 virtual IntRect absoluteElementBoundingBoxRect() const; 1585 virtual IntRect absoluteElementBoundingBoxRect() const;
1511 1586
1512 // Compute a list of hit-test rectangles per layer rooted at this layoutObject . 1587 // Compute a list of hit-test rectangles per layer rooted at this
1588 // layoutObject.
1513 virtual void computeLayerHitTestRects(LayerHitTestRects&) const; 1589 virtual void computeLayerHitTestRects(LayerHitTestRects&) const;
1514 1590
1515 static RespectImageOrientationEnum shouldRespectImageOrientation( 1591 static RespectImageOrientationEnum shouldRespectImageOrientation(
1516 const LayoutObject*); 1592 const LayoutObject*);
1517 1593
1518 bool isRelayoutBoundaryForInspector() const; 1594 bool isRelayoutBoundaryForInspector() const;
1519 1595
1520 // The previous paint invalidation rect, in the the space of the paint invalid ation container (*not* the graphics layer that paints 1596 // The previous paint invalidation rect, in the the space of the paint
1597 // invalidation container (*not* the graphics layer that paints
1521 // this object). 1598 // this object).
1522 LayoutRect previousPaintInvalidationRectIncludingCompositedScrolling( 1599 LayoutRect previousPaintInvalidationRectIncludingCompositedScrolling(
1523 const LayoutBoxModelObject& paintInvalidationContainer) const; 1600 const LayoutBoxModelObject& paintInvalidationContainer) const;
1524 1601
1525 // The returned rect does *not* account for composited scrolling. 1602 // The returned rect does *not* account for composited scrolling.
1526 const LayoutRect& previousPaintInvalidationRect() const { 1603 const LayoutRect& previousPaintInvalidationRect() const {
1527 return m_previousPaintInvalidationRect; 1604 return m_previousPaintInvalidationRect;
1528 } 1605 }
1529 1606
1530 // Called when the previous paint invalidation rect(s) is no longer valid. 1607 // Called when the previous paint invalidation rect(s) is no longer valid.
1531 virtual void clearPreviousPaintInvalidationRects(); 1608 virtual void clearPreviousPaintInvalidationRects();
1532 1609
1533 // Only adjusts if the paint invalidation container is not a composited scroll er. 1610 // Only adjusts if the paint invalidation container is not a composited
1611 // scroller.
1534 void adjustPreviousPaintInvalidationForScrollIfNeeded( 1612 void adjustPreviousPaintInvalidationForScrollIfNeeded(
1535 const DoubleSize& scrollDelta); 1613 const DoubleSize& scrollDelta);
1536 1614
1537 // The previous position of the top-left corner of the object in its previous paint backing. 1615 // The previous position of the top-left corner of the object in its previous
1616 // paint backing.
1538 const LayoutPoint& previousPositionFromPaintInvalidationBacking() const { 1617 const LayoutPoint& previousPositionFromPaintInvalidationBacking() const {
1539 return m_previousPositionFromPaintInvalidationBacking; 1618 return m_previousPositionFromPaintInvalidationBacking;
1540 } 1619 }
1541 void setPreviousPositionFromPaintInvalidationBacking( 1620 void setPreviousPositionFromPaintInvalidationBacking(
1542 const LayoutPoint& positionFromPaintInvalidationBacking) { 1621 const LayoutPoint& positionFromPaintInvalidationBacking) {
1543 m_previousPositionFromPaintInvalidationBacking = 1622 m_previousPositionFromPaintInvalidationBacking =
1544 positionFromPaintInvalidationBacking; 1623 positionFromPaintInvalidationBacking;
1545 } 1624 }
1546 1625
1547 PaintInvalidationReason fullPaintInvalidationReason() const { 1626 PaintInvalidationReason fullPaintInvalidationReason() const {
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
1590 shouldInvalidateSelection() || 1669 shouldInvalidateSelection() ||
1591 m_bitfields.childShouldCheckForPaintInvalidation(); 1670 m_bitfields.childShouldCheckForPaintInvalidation();
1592 } 1671 }
1593 1672
1594 virtual LayoutRect viewRect() const; 1673 virtual LayoutRect viewRect() const;
1595 1674
1596 // New version to replace the above old version. 1675 // New version to replace the above old version.
1597 virtual PaintInvalidationReason invalidatePaintIfNeeded( 1676 virtual PaintInvalidationReason invalidatePaintIfNeeded(
1598 const PaintInvalidatorContext&) const; 1677 const PaintInvalidatorContext&) const;
1599 1678
1600 // When this object is invalidated for paint, this method is called to invalid ate any DisplayItemClients 1679 // When this object is invalidated for paint, this method is called to
1601 // owned by this object, including the object itself, LayoutText/LayoutInline line boxes, etc., 1680 // invalidate any DisplayItemClients owned by this object, including the
1602 // not including children which will be invalidated normally during invalidate TreeIfNeeded() and 1681 // object itself, LayoutText/LayoutInline line boxes, etc.,
1603 // parts which are invalidated separately (e.g. scrollbars). 1682 // not including children which will be invalidated normally during
1604 // The caller should ensure the painting layer has been setNeedsRepaint before calling this function. 1683 // invalidateTreeIfNeeded() and parts which are invalidated separately (e.g.
1684 // scrollbars). The caller should ensure the painting layer has been
1685 // setNeedsRepaint before calling this function.
1605 virtual void invalidateDisplayItemClients(PaintInvalidationReason) const; 1686 virtual void invalidateDisplayItemClients(PaintInvalidationReason) const;
1606 1687
1607 virtual bool hasNonCompositedScrollbars() const { return false; } 1688 virtual bool hasNonCompositedScrollbars() const { return false; }
1608 1689
1609 // Called before anonymousChild.setStyle(). Override to set custom styles for the child. 1690 // Called before anonymousChild.setStyle(). Override to set custom styles for
1691 // the child.
1610 virtual void updateAnonymousChildStyle(const LayoutObject& anonymousChild, 1692 virtual void updateAnonymousChildStyle(const LayoutObject& anonymousChild,
1611 ComputedStyle& style) const {} 1693 ComputedStyle& style) const {}
1612 1694
1613 // Returns a rect corresponding to this LayoutObject's bounds for use in debug ging output 1695 // Returns a rect corresponding to this LayoutObject's bounds for use in
1696 // debugging output
1614 virtual LayoutRect debugRect() const; 1697 virtual LayoutRect debugRect() const;
1615 1698
1616 // Painters can use const methods only, except for these explicitly declared m ethods. 1699 // Painters can use const methods only, except for these explicitly declared
1700 // methods.
1617 class MutableForPainting { 1701 class MutableForPainting {
1618 public: 1702 public:
1619 void clearPaintInvalidationFlags() { 1703 void clearPaintInvalidationFlags() {
1620 m_layoutObject.clearPaintInvalidationFlags(); 1704 m_layoutObject.clearPaintInvalidationFlags();
1621 } 1705 }
1622 void setShouldDoFullPaintInvalidation(PaintInvalidationReason reason) { 1706 void setShouldDoFullPaintInvalidation(PaintInvalidationReason reason) {
1623 m_layoutObject.setShouldDoFullPaintInvalidation(reason); 1707 m_layoutObject.setShouldDoFullPaintInvalidation(reason);
1624 } 1708 }
1625 void ensureIsReadyForPaintInvalidation() { 1709 void ensureIsReadyForPaintInvalidation() {
1626 m_layoutObject.ensureIsReadyForPaintInvalidation(); 1710 m_layoutObject.ensureIsReadyForPaintInvalidation();
1627 } 1711 }
1628 1712
1629 void setPreviousPaintInvalidationRect(const LayoutRect& r) { 1713 void setPreviousPaintInvalidationRect(const LayoutRect& r) {
1630 m_layoutObject.setPreviousPaintInvalidationRect(r); 1714 m_layoutObject.setPreviousPaintInvalidationRect(r);
1631 } 1715 }
1632 void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& p) { 1716 void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& p) {
1633 m_layoutObject.setPreviousPositionFromPaintInvalidationBacking(p); 1717 m_layoutObject.setPreviousPositionFromPaintInvalidationBacking(p);
1634 } 1718 }
1635 void setPreviousBackgroundObscured(bool b) { 1719 void setPreviousBackgroundObscured(bool b) {
1636 m_layoutObject.setPreviousBackgroundObscured(b); 1720 m_layoutObject.setPreviousBackgroundObscured(b);
1637 } 1721 }
1638 void clearPreviousPaintInvalidationRects() { 1722 void clearPreviousPaintInvalidationRects() {
1639 m_layoutObject.clearPreviousPaintInvalidationRects(); 1723 m_layoutObject.clearPreviousPaintInvalidationRects();
1640 } 1724 }
1641 1725
1642 protected: 1726 protected:
1643 friend class PaintPropertyTreeBuilder; 1727 friend class PaintPropertyTreeBuilder;
1644 // The following two functions can be called from PaintPropertyTreeBuilder o nly. 1728 // The following two functions can be called from PaintPropertyTreeBuilder
1729 // only.
1645 ObjectPaintProperties& ensureObjectPaintProperties() { 1730 ObjectPaintProperties& ensureObjectPaintProperties() {
1646 return m_layoutObject.ensureObjectPaintProperties(); 1731 return m_layoutObject.ensureObjectPaintProperties();
1647 } 1732 }
1648 ObjectPaintProperties* objectPaintProperties() { 1733 ObjectPaintProperties* objectPaintProperties() {
1649 return const_cast<ObjectPaintProperties*>( 1734 return const_cast<ObjectPaintProperties*>(
1650 m_layoutObject.objectPaintProperties()); 1735 m_layoutObject.objectPaintProperties());
1651 } 1736 }
1652 1737
1653 friend class LayoutObject; 1738 friend class LayoutObject;
1654 MutableForPainting(const LayoutObject& layoutObject) 1739 MutableForPainting(const LayoutObject& layoutObject)
1655 : m_layoutObject(const_cast<LayoutObject&>(layoutObject)) {} 1740 : m_layoutObject(const_cast<LayoutObject&>(layoutObject)) {}
1656 1741
1657 LayoutObject& m_layoutObject; 1742 LayoutObject& m_layoutObject;
1658 }; 1743 };
1659 MutableForPainting getMutableForPainting() const { 1744 MutableForPainting getMutableForPainting() const {
1660 return MutableForPainting(*this); 1745 return MutableForPainting(*this);
1661 } 1746 }
1662 1747
1663 void setIsScrollAnchorObject() { m_bitfields.setIsScrollAnchorObject(true); } 1748 void setIsScrollAnchorObject() { m_bitfields.setIsScrollAnchorObject(true); }
1664 // Clears the IsScrollAnchorObject bit, unless any ScrollAnchor still refers t o us. 1749 // Clears the IsScrollAnchorObject bit, unless any ScrollAnchor still refers
1750 // to us.
1665 void maybeClearIsScrollAnchorObject(); 1751 void maybeClearIsScrollAnchorObject();
1666 1752
1667 bool scrollAnchorDisablingStyleChanged() { 1753 bool scrollAnchorDisablingStyleChanged() {
1668 return m_bitfields.scrollAnchorDisablingStyleChanged(); 1754 return m_bitfields.scrollAnchorDisablingStyleChanged();
1669 } 1755 }
1670 void setScrollAnchorDisablingStyleChanged(bool changed) { 1756 void setScrollAnchorDisablingStyleChanged(bool changed) {
1671 m_bitfields.setScrollAnchorDisablingStyleChanged(changed); 1757 m_bitfields.setScrollAnchorDisablingStyleChanged(changed);
1672 } 1758 }
1673 1759
1674 void clearChildNeedsOverflowRecalcAfterStyleChange() { 1760 void clearChildNeedsOverflowRecalcAfterStyleChange() {
(...skipping 81 matching lines...) Expand 10 before | Expand all | Expand 10 after
1756 LayoutObjectSVGImage, 1842 LayoutObjectSVGImage,
1757 LayoutObjectSVGForeignObject, 1843 LayoutObjectSVGForeignObject,
1758 LayoutObjectSVGResourceContainer, 1844 LayoutObjectSVGResourceContainer,
1759 LayoutObjectSVGResourceFilter, 1845 LayoutObjectSVGResourceFilter,
1760 LayoutObjectSVGResourceFilterPrimitive, 1846 LayoutObjectSVGResourceFilterPrimitive,
1761 }; 1847 };
1762 virtual bool isOfType(LayoutObjectType type) const { return false; } 1848 virtual bool isOfType(LayoutObjectType type) const { return false; }
1763 1849
1764 inline bool layerCreationAllowedForSubtree() const; 1850 inline bool layerCreationAllowedForSubtree() const;
1765 1851
1766 // Overrides should call the superclass at the end. m_style will be 0 the firs t time 1852 // Overrides should call the superclass at the end. m_style will be 0 the
1767 // this function will be called. 1853 // first time this function will be called.
1768 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle); 1854 virtual void styleWillChange(StyleDifference, const ComputedStyle& newStyle);
1769 // Overrides should call the superclass at the start. |oldStyle| will be 0 the first 1855 // Overrides should call the superclass at the start. |oldStyle| will be 0 the
1770 // time this function is called. 1856 // first time this function is called.
1771 virtual void styleDidChange(StyleDifference, const ComputedStyle* oldStyle); 1857 virtual void styleDidChange(StyleDifference, const ComputedStyle* oldStyle);
1772 void propagateStyleToAnonymousChildren(); 1858 void propagateStyleToAnonymousChildren();
1773 // Return true for objects that don't want style changes automatically propaga ted via 1859 // Return true for objects that don't want style changes automatically
1774 // propagateStyleToAnonymousChildren(), but rather rely on other custom mechan isms (if they 1860 // propagated via propagateStyleToAnonymousChildren(), but rather rely on
1775 // need to be notified of parent style changes at all). 1861 // other custom mechanisms (if they need to be notified of parent style
1862 // changes at all).
1776 virtual bool anonymousHasStylePropagationOverride() { return false; } 1863 virtual bool anonymousHasStylePropagationOverride() { return false; }
1777 1864
1778 protected: 1865 protected:
1779 // This function is called before calling the destructor so that some clean-up 1866 // This function is called before calling the destructor so that some clean-up
1780 // can happen regardless of whether they call a virtual function or not. As a 1867 // can happen regardless of whether they call a virtual function or not. As a
1781 // rule of thumb, this function should be preferred to the destructor. See 1868 // rule of thumb, this function should be preferred to the destructor. See
1782 // destroy() that is the one calling willBeDestroyed(). 1869 // destroy() that is the one calling willBeDestroyed().
1783 // 1870 //
1784 // There are 2 types of destructions: regular destructions and tree tear-down. 1871 // There are 2 types of destructions: regular destructions and tree tear-down.
1785 // Regular destructions happen when the renderer is not needed anymore (e.g. 1872 // Regular destructions happen when the renderer is not needed anymore (e.g.
1786 // 'display' changed or the DOM Node was removed). 1873 // 'display' changed or the DOM Node was removed).
1787 // Tree tear-down is when the whole tree destroyed during navigation. It is 1874 // Tree tear-down is when the whole tree destroyed during navigation. It is
1788 // handled in the code by checking if documentBeingDestroyed() returns 'true'. 1875 // handled in the code by checking if documentBeingDestroyed() returns 'true'.
1789 // In this case, the code skips some unneeded expensive operations as we know 1876 // In this case, the code skips some unneeded expensive operations as we know
1790 // the tree is not reused (e.g. avoid clearing the containing block's line box ). 1877 // the tree is not reused (e.g. avoid clearing the containing block's line
1878 // box).
1791 virtual void willBeDestroyed(); 1879 virtual void willBeDestroyed();
1792 1880
1793 virtual void insertedIntoTree(); 1881 virtual void insertedIntoTree();
1794 virtual void willBeRemovedFromTree(); 1882 virtual void willBeRemovedFromTree();
1795 1883
1796 void setDocumentForAnonymous(Document* document) { 1884 void setDocumentForAnonymous(Document* document) {
1797 ASSERT(isAnonymous()); 1885 ASSERT(isAnonymous());
1798 m_node = document; 1886 m_node = document;
1799 } 1887 }
1800 1888
1801 // Add hit-test rects for the layout tree rooted at this node to the provided collection on a 1889 // Add hit-test rects for the layout tree rooted at this node to the provided
1802 // per-Layer basis. 1890 // collection on a per-Layer basis.
1803 // currentLayer must be the enclosing layer, and layerOffset is the current of fset within 1891 // currentLayer must be the enclosing layer, and layerOffset is the current
1804 // this layer. Subclass implementations will add any offset for this layoutObj ect within it's 1892 // offset within this layer. Subclass implementations will add any offset for
1805 // container, so callers should provide only the offset of the container withi n it's layer. 1893 // this layoutObject within it's container, so callers should provide only the
1806 // containerRect is a rect that has already been added for the currentLayer wh ich is likely to 1894 // offset of the container within it's layer.
1807 // be a container for child elements. Any rect wholly contained by containerRe ct can be 1895 // containerRect is a rect that has already been added for the currentLayer
1808 // skipped. 1896 // which is likely to be a container for child elements. Any rect wholly
1897 // contained by containerRect can be skipped.
1809 virtual void addLayerHitTestRects(LayerHitTestRects&, 1898 virtual void addLayerHitTestRects(LayerHitTestRects&,
1810 const PaintLayer* currentLayer, 1899 const PaintLayer* currentLayer,
1811 const LayoutPoint& layerOffset, 1900 const LayoutPoint& layerOffset,
1812 const LayoutRect& containerRect) const; 1901 const LayoutRect& containerRect) const;
1813 1902
1814 // Add hit-test rects for this layoutObject only to the provided list. layerOf fset is the offset 1903 // Add hit-test rects for this layoutObject only to the provided list.
1815 // of this layoutObject within the current layer that should be used for each result. 1904 // layerOffset is the offset of this layoutObject within the current layer
1905 // that should be used for each result.
1816 virtual void computeSelfHitTestRects(Vector<LayoutRect>&, 1906 virtual void computeSelfHitTestRects(Vector<LayoutRect>&,
1817 const LayoutPoint& layerOffset) const {} 1907 const LayoutPoint& layerOffset) const {}
1818 1908
1819 void setPreviousPaintInvalidationRect(const LayoutRect& rect) { 1909 void setPreviousPaintInvalidationRect(const LayoutRect& rect) {
1820 m_previousPaintInvalidationRect = rect; 1910 m_previousPaintInvalidationRect = rect;
1821 } 1911 }
1822 1912
1823 #if ENABLE(ASSERT) 1913 #if ENABLE(ASSERT)
1824 virtual bool paintInvalidationStateIsDirty() const { 1914 virtual bool paintInvalidationStateIsDirty() const {
1825 return shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState(); 1915 return shouldCheckForPaintInvalidationRegardlessOfPaintInvalidationState();
1826 } 1916 }
1827 #endif 1917 #endif
1828 1918
1829 // Called before paint invalidation. 1919 // Called before paint invalidation.
1830 virtual void ensureIsReadyForPaintInvalidation() { DCHECK(!needsLayout()); } 1920 virtual void ensureIsReadyForPaintInvalidation() { DCHECK(!needsLayout()); }
1831 1921
1832 // This function walks the descendants of |this|, following a 1922 // This function walks the descendants of |this|, following a
1833 // layout ordering. 1923 // layout ordering.
1834 // 1924 //
1835 // The ordering is important for PaintInvalidationState, as 1925 // The ordering is important for PaintInvalidationState, as it requires to be
1836 // it requires to be called following a descendant/container 1926 // called following a descendant/container relationship.
1837 // relationship.
1838 // 1927 //
1839 // The function is overridden to handle special children 1928 // The function is overridden to handle special children (e.g. percentage
1840 // (e.g. percentage height descendants or reflections). 1929 // height descendants or reflections).
1841 virtual void invalidatePaintOfSubtreesIfNeeded( 1930 virtual void invalidatePaintOfSubtreesIfNeeded(
1842 const PaintInvalidationState& childPaintInvalidationState); 1931 const PaintInvalidationState& childPaintInvalidationState);
1843 1932
1844 // This function generates the invalidation for this object only. 1933 // This function generates the invalidation for this object only.
1845 // It doesn't recurse into other object, as this is handled 1934 // It doesn't recurse into other object, as this is handled by
1846 // by invalidatePaintOfSubtreesIfNeeded. 1935 // invalidatePaintOfSubtreesIfNeeded.
1847 virtual PaintInvalidationReason invalidatePaintIfNeeded( 1936 virtual PaintInvalidationReason invalidatePaintIfNeeded(
1848 const PaintInvalidationState&); 1937 const PaintInvalidationState&);
1849 1938
1850 void setIsBackgroundAttachmentFixedObject(bool); 1939 void setIsBackgroundAttachmentFixedObject(bool);
1851 1940
1852 void clearSelfNeedsOverflowRecalcAfterStyleChange() { 1941 void clearSelfNeedsOverflowRecalcAfterStyleChange() {
1853 m_bitfields.setSelfNeedsOverflowRecalcAfterStyleChange(false); 1942 m_bitfields.setSelfNeedsOverflowRecalcAfterStyleChange(false);
1854 } 1943 }
1855 void setEverHadLayout() { m_bitfields.setEverHadLayout(true); } 1944 void setEverHadLayout() { m_bitfields.setEverHadLayout(true); }
1856 1945
1857 // Remove this object and all descendants from the containing LayoutFlowThread . 1946 // Remove this object and all descendants from the containing
1947 // LayoutFlowThread.
1858 void removeFromLayoutFlowThread(); 1948 void removeFromLayoutFlowThread();
1859 1949
1860 bool containsInlineWithOutlineAndContinuation() const { 1950 bool containsInlineWithOutlineAndContinuation() const {
1861 return m_bitfields.containsInlineWithOutlineAndContinuation(); 1951 return m_bitfields.containsInlineWithOutlineAndContinuation();
1862 } 1952 }
1863 void setContainsInlineWithOutlineAndContinuation(bool b) { 1953 void setContainsInlineWithOutlineAndContinuation(bool b) {
1864 m_bitfields.setContainsInlineWithOutlineAndContinuation(b); 1954 m_bitfields.setContainsInlineWithOutlineAndContinuation(b);
1865 } 1955 }
1866 1956
1867 private: 1957 private:
1868 // Adjusts a paint invalidation rect in the space of |m_previousPaintInvalidat ionRect| and |m_previousPositionFromPaintInvalidationBacking| 1958 // Adjusts a paint invalidation rect in the space of
1869 // to be in the space of the |paintInvalidationContainer|, 1959 // |m_previousPaintInvalidationRect| and
1870 // if needed. They can be different only if |paintInvalidationContainer| is a composited scroller. 1960 // |m_previousPositionFromPaintInvalidationBacking|
1961 // to be in the space of the |paintInvalidationContainer|, if needed. They can
1962 // be different only if |paintInvalidationContainer| is a composited scroller.
1871 void adjustInvalidationRectForCompositedScrolling( 1963 void adjustInvalidationRectForCompositedScrolling(
1872 LayoutRect&, 1964 LayoutRect&,
1873 const LayoutBoxModelObject& paintInvalidationContainer) const; 1965 const LayoutBoxModelObject& paintInvalidationContainer) const;
1874 1966
1875 void clearLayoutRootIfNeeded() const; 1967 void clearLayoutRootIfNeeded() const;
1876 1968
1877 bool isInert() const; 1969 bool isInert() const;
1878 1970
1879 void updateImage(StyleImage*, StyleImage*); 1971 void updateImage(StyleImage*, StyleImage*);
1880 1972
1881 void scheduleRelayout(); 1973 void scheduleRelayout();
1882 1974
1883 void updateShapeImage(const ShapeValue*, const ShapeValue*); 1975 void updateShapeImage(const ShapeValue*, const ShapeValue*);
1884 void updateFillImages(const FillLayer* oldLayers, const FillLayer& newLayers); 1976 void updateFillImages(const FillLayer* oldLayers, const FillLayer& newLayers);
1885 void updateCursorImages(const CursorList* oldCursors, 1977 void updateCursorImages(const CursorList* oldCursors,
1886 const CursorList* newCursors); 1978 const CursorList* newCursors);
1887 1979
1888 void setNeedsOverflowRecalcAfterStyleChange(); 1980 void setNeedsOverflowRecalcAfterStyleChange();
1889 1981
1890 // Walk up the parent chain and find the first scrolling block to disable 1982 // Walk up the parent chain and find the first scrolling block to disable
1891 // scroll anchoring on. 1983 // scroll anchoring on.
1892 void setScrollAnchorDisablingStyleChangedOnAncestor(); 1984 void setScrollAnchorDisablingStyleChangedOnAncestor();
1893 1985
1894 // FIXME: This should be 'markContaingBoxChainForOverflowRecalc when we make L ayoutBox 1986 // FIXME: This should be 'markContaingBoxChainForOverflowRecalc when we make
1895 // recomputeOverflow-capable. crbug.com/437012 and crbug.com/434700. 1987 // LayoutBox recomputeOverflow-capable. crbug.com/437012 and crbug.com/434700.
1896 inline void markAncestorsForOverflowRecalcIfNeeded(); 1988 inline void markAncestorsForOverflowRecalcIfNeeded();
1897 1989
1898 inline void markAncestorsForPaintInvalidation(); 1990 inline void markAncestorsForPaintInvalidation();
1899 1991
1900 inline void invalidateContainerPreferredLogicalWidths(); 1992 inline void invalidateContainerPreferredLogicalWidths();
1901 1993
1902 void invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal( 1994 void invalidatePaintIncludingNonSelfPaintingLayerDescendantsInternal(
1903 const LayoutBoxModelObject& paintInvalidationContainer); 1995 const LayoutBoxModelObject& paintInvalidationContainer);
1904 1996
1905 LayoutObject* containerForAbsolutePosition( 1997 LayoutObject* containerForAbsolutePosition(
(...skipping 18 matching lines...) Expand all
1924 void checkBlockPositionedObjectsNeedLayout(); 2016 void checkBlockPositionedObjectsNeedLayout();
1925 #endif 2017 #endif
1926 2018
1927 bool isTextOrSVGChild() const { 2019 bool isTextOrSVGChild() const {
1928 return isText() || (isSVG() && !isSVGRoot()); 2020 return isText() || (isSVG() && !isSVGRoot());
1929 } 2021 }
1930 2022
1931 static bool isAllowedToModifyLayoutTreeStructure(Document&); 2023 static bool isAllowedToModifyLayoutTreeStructure(Document&);
1932 2024
1933 // Returns the parent for paint invalidation. 2025 // Returns the parent for paint invalidation.
1934 // - For LayoutView, returns the owner layout object in the containing frame i f any or nullptr; 2026 // - For LayoutView, returns the owner layout object in the containing frame
2027 // if any or nullptr;
1935 // - For multi-column spanner, returns the spanner placeholder; 2028 // - For multi-column spanner, returns the spanner placeholder;
1936 // - Otherwise returns parent(). 2029 // - Otherwise returns parent().
1937 LayoutObject* paintInvalidationParent() const; 2030 LayoutObject* paintInvalidationParent() const;
1938 2031
1939 RefPtr<ComputedStyle> m_style; 2032 RefPtr<ComputedStyle> m_style;
1940 2033
1941 // Oilpan: This untraced pointer to the owning Node is considered safe. 2034 // Oilpan: This untraced pointer to the owning Node is considered safe.
1942 UntracedMember<Node> m_node; 2035 UntracedMember<Node> m_node;
1943 2036
1944 LayoutObject* m_parent; 2037 LayoutObject* m_parent;
(...skipping 17 matching lines...) Expand all
1962 enum PositionedState { 2055 enum PositionedState {
1963 IsStaticallyPositioned = 0, 2056 IsStaticallyPositioned = 0,
1964 IsRelativelyPositioned = 1, 2057 IsRelativelyPositioned = 1,
1965 IsOutOfFlowPositioned = 2, 2058 IsOutOfFlowPositioned = 2,
1966 IsStickyPositioned = 3, 2059 IsStickyPositioned = 3,
1967 }; 2060 };
1968 2061
1969 public: 2062 public:
1970 // LayoutObjectBitfields holds all the boolean values for LayoutObject. 2063 // LayoutObjectBitfields holds all the boolean values for LayoutObject.
1971 // 2064 //
1972 // This is done to promote better packing on LayoutObject (at the 2065 // This is done to promote better packing on LayoutObject (at the expense of
1973 // expense of preventing bit field packing for the subclasses). Classes 2066 // preventing bit field packing for the subclasses). Classes concerned about
1974 // concerned about packing and memory use should hoist their boolean to 2067 // packing and memory use should hoist their boolean to this class. See
1975 // this class. See below the field from sub-classes (e.g. 2068 // below the field from sub-classes (e.g. childrenInline).
1976 // childrenInline).
1977 // 2069 //
1978 // Some of those booleans are caches of ComputedStyle values (e.g. 2070 // Some of those booleans are caches of ComputedStyle values (e.g.
1979 // positionState). This enables better memory locality and thus better 2071 // positionState). This enables better memory locality and thus better
1980 // performance. 2072 // performance.
1981 // 2073 //
1982 // This class is an artifact of the WebKit era where LayoutObject wasn't 2074 // This class is an artifact of the WebKit era where LayoutObject wasn't
1983 // allowed to grow and each sub-class was strictly monitored for memory 2075 // allowed to grow and each sub-class was strictly monitored for memory
1984 // increase. Our measurements indicate that the size of LayoutObject and 2076 // increase. Our measurements indicate that the size of LayoutObject and
1985 // subsequent classes do not impact memory or speed in a significant 2077 // subsequent classes do not impact memory or speed in a significant
1986 // manner. This is based on growing LayoutObject in 2078 // manner. This is based on growing LayoutObject in
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
2027 m_isScrollAnchorObject(false), 2119 m_isScrollAnchorObject(false),
2028 m_scrollAnchorDisablingStyleChanged(false), 2120 m_scrollAnchorDisablingStyleChanged(false),
2029 m_hasBoxDecorationBackground(false), 2121 m_hasBoxDecorationBackground(false),
2030 m_positionedState(IsStaticallyPositioned), 2122 m_positionedState(IsStaticallyPositioned),
2031 m_selectionState(SelectionNone), 2123 m_selectionState(SelectionNone),
2032 m_backgroundObscurationState(BackgroundObscurationStatusInvalid), 2124 m_backgroundObscurationState(BackgroundObscurationStatusInvalid),
2033 m_fullPaintInvalidationReason(PaintInvalidationNone) {} 2125 m_fullPaintInvalidationReason(PaintInvalidationNone) {}
2034 2126
2035 // 32 bits have been used in the first word, and 18 in the second. 2127 // 32 bits have been used in the first word, and 18 in the second.
2036 2128
2037 // Self needs layout means that this layout object is marked for a full layo ut. 2129 // Self needs layout means that this layout object is marked for a full
2038 // This is the default layout but it is expensive as it recomputes everythin g. 2130 // layout. This is the default layout but it is expensive as it recomputes
2039 // For CSS boxes, this includes the width (laying out the line boxes again), the margins 2131 // everything. For CSS boxes, this includes the width (laying out the line
2040 // (due to block collapsing margins), the positions, the height and the pote ntial overflow. 2132 // boxes again), the margins (due to block collapsing margins), the
2133 // positions, the height and the potential overflow.
2041 ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout); 2134 ADD_BOOLEAN_BITFIELD(selfNeedsLayout, SelfNeedsLayout);
2042 2135
2043 // A positioned movement layout is a specialized type of layout used on posi tioned objects 2136 // A positioned movement layout is a specialized type of layout used on
2044 // that only visually moved. This layout is used when changing 'top'/'left' on a positioned 2137 // positioned objects that only visually moved. This layout is used when
2045 // element or margins on an out-of-flow one. Because the following operation s don't impact 2138 // changing 'top'/'left' on a positioned element or margins on an
2046 // the size of the object or sibling LayoutObjects, this layout is very ligh tweight. 2139 // out-of-flow one. Because the following operations don't impact the size
2140 // of the object or sibling LayoutObjects, this layout is very lightweight.
2047 // 2141 //
2048 // Positioned movement layout is implemented in LayoutBlock::simplifiedLayou t. 2142 // Positioned movement layout is implemented in
2143 // LayoutBlock::simplifiedLayout.
2049 ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout, 2144 ADD_BOOLEAN_BITFIELD(needsPositionedMovementLayout,
2050 NeedsPositionedMovementLayout); 2145 NeedsPositionedMovementLayout);
2051 2146
2052 // This boolean is set when a normal flow ('position' == static || relative) child requires 2147 // This boolean is set when a normal flow ('position' == static || relative)
2053 // layout (but this object doesn't). Due to the nature of CSS, laying out a child can cause 2148 // child requires layout (but this object doesn't). Due to the nature of
2054 // the parent to resize (e.g., if 'height' is auto). 2149 // CSS, laying out a child can cause the parent to resize (e.g., if 'height'
2150 // is auto).
2055 ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout); 2151 ADD_BOOLEAN_BITFIELD(normalChildNeedsLayout, NormalChildNeedsLayout);
2056 2152
2057 // This boolean is set when an out-of-flow positioned ('position' == fixed | | absolute) child 2153 // This boolean is set when an out-of-flow positioned ('position' == fixed
2058 // requires layout (but this object doesn't). 2154 // || absolute) child requires layout (but this object doesn't).
2059 ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout); 2155 ADD_BOOLEAN_BITFIELD(posChildNeedsLayout, PosChildNeedsLayout);
2060 2156
2061 // Simplified normal flow layout only relayouts the normal flow children, ig noring the 2157 // Simplified normal flow layout only relayouts the normal flow children,
2062 // out-of-flow descendants. 2158 // ignoring the out-of-flow descendants.
2063 // 2159 //
2064 // The implementation of this layout is in LayoutBlock::simplifiedNormalFlow Layout. 2160 // The implementation of this layout is in
2161 // LayoutBlock::simplifiedNormalFlowLayout.
2065 ADD_BOOLEAN_BITFIELD(needsSimplifiedNormalFlowLayout, 2162 ADD_BOOLEAN_BITFIELD(needsSimplifiedNormalFlowLayout,
2066 NeedsSimplifiedNormalFlowLayout); 2163 NeedsSimplifiedNormalFlowLayout);
2067 2164
2068 // Some properties only have a visual impact and don't impact the actual lay out position and 2165 // Some properties only have a visual impact and don't impact the actual
2069 // sizes of the object. An example of this is the 'transform' property, who doesn't modify the 2166 // layout position and sizes of the object. An example of this is the
2070 // layout but gets applied at paint time. 2167 // 'transform' property, who doesn't modify the layout but gets applied at
2071 // Setting this flag only recomputes the overflow information. 2168 // paint time. Setting this flag only recomputes the overflow information.
2072 ADD_BOOLEAN_BITFIELD(selfNeedsOverflowRecalcAfterStyleChange, 2169 ADD_BOOLEAN_BITFIELD(selfNeedsOverflowRecalcAfterStyleChange,
2073 SelfNeedsOverflowRecalcAfterStyleChange); 2170 SelfNeedsOverflowRecalcAfterStyleChange);
2074 2171
2075 // This flag is set on the ancestor of a LayoutObject needing 2172 // This flag is set on the ancestor of a LayoutObject needing
2076 // selfNeedsOverflowRecalcAfterStyleChange. This is needed as a descendant o verflow can 2173 // selfNeedsOverflowRecalcAfterStyleChange. This is needed as a descendant
2077 // bleed into its containing block's so we have to recompute it in some case s. 2174 // overflow can bleed into its containing block's so we have to recompute it
2175 // in some cases.
2078 ADD_BOOLEAN_BITFIELD(childNeedsOverflowRecalcAfterStyleChange, 2176 ADD_BOOLEAN_BITFIELD(childNeedsOverflowRecalcAfterStyleChange,
2079 ChildNeedsOverflowRecalcAfterStyleChange); 2177 ChildNeedsOverflowRecalcAfterStyleChange);
2080 2178
2081 // This boolean marks preferred logical widths for lazy recomputation. 2179 // This boolean marks preferred logical widths for lazy recomputation.
2082 // 2180 //
2083 // See INTRINSIC SIZES / PREFERRED LOGICAL WIDTHS above about those 2181 // See INTRINSIC SIZES / PREFERRED LOGICAL WIDTHS above about those
2084 // widths. 2182 // widths.
2085 ADD_BOOLEAN_BITFIELD(preferredLogicalWidthsDirty, 2183 ADD_BOOLEAN_BITFIELD(preferredLogicalWidthsDirty,
2086 PreferredLogicalWidthsDirty); 2184 PreferredLogicalWidthsDirty);
2087 2185
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
2123 // TODO(jchaffraix): We set this boolean for replaced elements that are 2221 // TODO(jchaffraix): We set this boolean for replaced elements that are
2124 // not inline but shouldn't (crbug.com/567964). This should be enforced. 2222 // not inline but shouldn't (crbug.com/567964). This should be enforced.
2125 ADD_BOOLEAN_BITFIELD(isAtomicInlineLevel, IsAtomicInlineLevel); 2223 ADD_BOOLEAN_BITFIELD(isAtomicInlineLevel, IsAtomicInlineLevel);
2126 ADD_BOOLEAN_BITFIELD(horizontalWritingMode, HorizontalWritingMode); 2224 ADD_BOOLEAN_BITFIELD(horizontalWritingMode, HorizontalWritingMode);
2127 2225
2128 ADD_BOOLEAN_BITFIELD(hasLayer, HasLayer); 2226 ADD_BOOLEAN_BITFIELD(hasLayer, HasLayer);
2129 2227
2130 // This boolean is set if overflow != 'visible'. 2228 // This boolean is set if overflow != 'visible'.
2131 // This means that this object may need an overflow clip to be applied 2229 // This means that this object may need an overflow clip to be applied
2132 // at paint time to its visual overflow (see OverflowModel for more 2230 // at paint time to its visual overflow (see OverflowModel for more
2133 // details). 2231 // details). Only set for LayoutBoxes and descendants.
2134 // Only set for LayoutBoxes and descendants.
2135 ADD_BOOLEAN_BITFIELD(hasOverflowClip, HasOverflowClip); 2232 ADD_BOOLEAN_BITFIELD(hasOverflowClip, HasOverflowClip);
2136 2233
2137 // This boolean is the cached value from 2234 // This boolean is the cached value from
2138 // ComputedStyle::hasTransformRelatedProperty. 2235 // ComputedStyle::hasTransformRelatedProperty.
2139 ADD_BOOLEAN_BITFIELD(hasTransformRelatedProperty, 2236 ADD_BOOLEAN_BITFIELD(hasTransformRelatedProperty,
2140 HasTransformRelatedProperty); 2237 HasTransformRelatedProperty);
2141 ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection); 2238 ADD_BOOLEAN_BITFIELD(hasReflection, HasReflection);
2142 2239
2143 // This boolean is used to know if this LayoutObject has one (or more) 2240 // This boolean is used to know if this LayoutObject has one (or more)
2144 // associated CounterNode(s). 2241 // associated CounterNode(s).
(...skipping 25 matching lines...) Expand all
2170 AlwaysCreateLineBoxesForLayoutInline); 2267 AlwaysCreateLineBoxesForLayoutInline);
2171 2268
2172 // Background obscuration status of the previous frame. 2269 // Background obscuration status of the previous frame.
2173 ADD_BOOLEAN_BITFIELD(previousBackgroundObscured, 2270 ADD_BOOLEAN_BITFIELD(previousBackgroundObscured,
2174 PreviousBackgroundObscured); 2271 PreviousBackgroundObscured);
2175 2272
2176 ADD_BOOLEAN_BITFIELD(isBackgroundAttachmentFixedObject, 2273 ADD_BOOLEAN_BITFIELD(isBackgroundAttachmentFixedObject,
2177 IsBackgroundAttachmentFixedObject); 2274 IsBackgroundAttachmentFixedObject);
2178 ADD_BOOLEAN_BITFIELD(isScrollAnchorObject, IsScrollAnchorObject); 2275 ADD_BOOLEAN_BITFIELD(isScrollAnchorObject, IsScrollAnchorObject);
2179 2276
2180 // Whether changes in this LayoutObject's CSS properties since the last layo ut should 2277 // Whether changes in this LayoutObject's CSS properties since the last
2181 // suppress any adjustments that would be made during the next layout by Scr ollAnchor 2278 // layout should suppress any adjustments that would be made during the next
2182 // objects for which this LayoutObject is on the path from the anchor node t o the 2279 // layout by ScrollAnchor objects for which this LayoutObject is on the path
2183 // scroller. See http://bit.ly/sanaclap for more info. 2280 // from the anchor node to the scroller.
2281 // See http://bit.ly/sanaclap for more info.
2184 ADD_BOOLEAN_BITFIELD(scrollAnchorDisablingStyleChanged, 2282 ADD_BOOLEAN_BITFIELD(scrollAnchorDisablingStyleChanged,
2185 ScrollAnchorDisablingStyleChanged); 2283 ScrollAnchorDisablingStyleChanged);
2186 2284
2187 ADD_BOOLEAN_BITFIELD(hasBoxDecorationBackground, 2285 ADD_BOOLEAN_BITFIELD(hasBoxDecorationBackground,
2188 HasBoxDecorationBackground); 2286 HasBoxDecorationBackground);
2189 2287
2190 private: 2288 private:
2191 // This is the cached 'position' value of this object 2289 // This is the cached 'position' value of this object
2192 // (see ComputedStyle::position). 2290 // (see ComputedStyle::position).
2193 unsigned m_positionedState : 2; // PositionedState 2291 unsigned m_positionedState : 2; // PositionedState
(...skipping 15 matching lines...) Expand all
2209 } 2307 }
2210 bool isInFlowPositioned() const { 2308 bool isInFlowPositioned() const {
2211 return m_positionedState == IsRelativelyPositioned || 2309 return m_positionedState == IsRelativelyPositioned ||
2212 m_positionedState == IsStickyPositioned; 2310 m_positionedState == IsStickyPositioned;
2213 } 2311 }
2214 bool isPositioned() const { 2312 bool isPositioned() const {
2215 return m_positionedState != IsStaticallyPositioned; 2313 return m_positionedState != IsStaticallyPositioned;
2216 } 2314 }
2217 2315
2218 void setPositionedState(int positionState) { 2316 void setPositionedState(int positionState) {
2219 // This mask maps FixedPosition and AbsolutePosition to IsOutOfFlowPositio ned, saving one bit. 2317 // This mask maps FixedPosition and AbsolutePosition to
2318 // IsOutOfFlowPositioned, saving one bit.
2220 m_positionedState = static_cast<PositionedState>(positionState & 0x3); 2319 m_positionedState = static_cast<PositionedState>(positionState & 0x3);
2221 } 2320 }
2222 void clearPositionedState() { m_positionedState = StaticPosition; } 2321 void clearPositionedState() { m_positionedState = StaticPosition; }
2223 2322
2224 ALWAYS_INLINE SelectionState getSelectionState() const { 2323 ALWAYS_INLINE SelectionState getSelectionState() const {
2225 return static_cast<SelectionState>(m_selectionState); 2324 return static_cast<SelectionState>(m_selectionState);
2226 } 2325 }
2227 ALWAYS_INLINE void setSelectionState(SelectionState selectionState) { 2326 ALWAYS_INLINE void setSelectionState(SelectionState selectionState) {
2228 m_selectionState = selectionState; 2327 m_selectionState = selectionState;
2229 } 2328 }
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
2266 m_bitfields.setSelfNeedsOverflowRecalcAfterStyleChange(true); 2365 m_bitfields.setSelfNeedsOverflowRecalcAfterStyleChange(true);
2267 } 2366 }
2268 void setChildNeedsOverflowRecalcAfterStyleChange() { 2367 void setChildNeedsOverflowRecalcAfterStyleChange() {
2269 m_bitfields.setChildNeedsOverflowRecalcAfterStyleChange(true); 2368 m_bitfields.setChildNeedsOverflowRecalcAfterStyleChange(true);
2270 } 2369 }
2271 2370
2272 private: 2371 private:
2273 // Store state between styleWillChange and styleDidChange 2372 // Store state between styleWillChange and styleDidChange
2274 static bool s_affectsParentBlock; 2373 static bool s_affectsParentBlock;
2275 2374
2276 // This stores the paint invalidation rect from the previous frame. This rect does *not* account for composited scrolling. See 2375 // This stores the paint invalidation rect from the previous frame. This rect
2376 // does *not* account for composited scrolling. See
2277 // adjustInvalidationRectForCompositedScrolling(). 2377 // adjustInvalidationRectForCompositedScrolling().
2278 LayoutRect m_previousPaintInvalidationRect; 2378 LayoutRect m_previousPaintInvalidationRect;
2279 2379
2280 // This stores the position in the paint invalidation backing's coordinate. 2380 // This stores the position in the paint invalidation backing's coordinate.
2281 // It is used to detect layoutObject shifts that forces a full invalidation. 2381 // It is used to detect layoutObject shifts that forces a full invalidation.
2282 // This point does *not* account for composited scrolling. See adjustInvalidat ionRectForCompositedScrolling(). 2382 // This point does *not* account for composited scrolling. See
2383 // adjustInvalidationRectForCompositedScrolling().
2283 LayoutPoint m_previousPositionFromPaintInvalidationBacking; 2384 LayoutPoint m_previousPositionFromPaintInvalidationBacking;
2284 }; 2385 };
2285 2386
2286 // FIXME: remove this once the layout object lifecycle ASSERTS are no longer hit . 2387 // FIXME: remove this once the layout object lifecycle ASSERTS are no longer
2388 // hit.
2287 class DeprecatedDisableModifyLayoutTreeStructureAsserts { 2389 class DeprecatedDisableModifyLayoutTreeStructureAsserts {
2288 STACK_ALLOCATED(); 2390 STACK_ALLOCATED();
2289 WTF_MAKE_NONCOPYABLE(DeprecatedDisableModifyLayoutTreeStructureAsserts); 2391 WTF_MAKE_NONCOPYABLE(DeprecatedDisableModifyLayoutTreeStructureAsserts);
2290 2392
2291 public: 2393 public:
2292 DeprecatedDisableModifyLayoutTreeStructureAsserts(); 2394 DeprecatedDisableModifyLayoutTreeStructureAsserts();
2293 2395
2294 static bool canModifyLayoutTreeStateInAnyState(); 2396 static bool canModifyLayoutTreeStateInAnyState();
2295 2397
2296 private: 2398 private:
2297 AutoReset<bool> m_disabler; 2399 AutoReset<bool> m_disabler;
2298 }; 2400 };
2299 2401
2300 // Allow equality comparisons of LayoutObjects by reference or pointer, intercha ngeably. 2402 // Allow equality comparisons of LayoutObjects by reference or pointer,
2403 // interchangeably.
2301 DEFINE_COMPARISON_OPERATORS_WITH_REFERENCES(LayoutObject) 2404 DEFINE_COMPARISON_OPERATORS_WITH_REFERENCES(LayoutObject)
2302 2405
2303 inline bool LayoutObject::documentBeingDestroyed() const { 2406 inline bool LayoutObject::documentBeingDestroyed() const {
2304 return document().lifecycle().state() >= DocumentLifecycle::Stopping; 2407 return document().lifecycle().state() >= DocumentLifecycle::Stopping;
2305 } 2408 }
2306 2409
2307 inline bool LayoutObject::isBeforeContent() const { 2410 inline bool LayoutObject::isBeforeContent() const {
2308 if (style()->styleType() != PseudoIdBefore) 2411 if (style()->styleType() != PseudoIdBefore)
2309 return false; 2412 return false;
2310 // Text nodes don't have their own styles, so ignore the style on a text node. 2413 // Text nodes don't have their own styles, so ignore the style on a text node.
2311 if (isText() && !isBR()) 2414 if (isText() && !isBR())
2312 return false; 2415 return false;
2313 return true; 2416 return true;
2314 } 2417 }
2315 2418
2316 inline bool LayoutObject::isAfterContent() const { 2419 inline bool LayoutObject::isAfterContent() const {
2317 if (style()->styleType() != PseudoIdAfter) 2420 if (style()->styleType() != PseudoIdAfter)
2318 return false; 2421 return false;
2319 // Text nodes don't have their own styles, so ignore the style on a text node. 2422 // Text nodes don't have their own styles, so ignore the style on a text node.
2320 if (isText() && !isBR()) 2423 if (isText() && !isBR())
2321 return false; 2424 return false;
2322 return true; 2425 return true;
2323 } 2426 }
2324 2427
2325 inline bool LayoutObject::isBeforeOrAfterContent() const { 2428 inline bool LayoutObject::isBeforeOrAfterContent() const {
2326 return isBeforeContent() || isAfterContent(); 2429 return isBeforeContent() || isAfterContent();
2327 } 2430 }
2328 2431
2329 // setNeedsLayout() won't cause full paint invalidations as 2432 // setNeedsLayout() won't cause full paint invalidations as
2330 // setNeedsLayoutAndFullPaintInvalidation() does. Otherwise the two methods are identical. 2433 // setNeedsLayoutAndFullPaintInvalidation() does. Otherwise the two methods are
2434 // identical.
2331 inline void LayoutObject::setNeedsLayout( 2435 inline void LayoutObject::setNeedsLayout(
2332 LayoutInvalidationReasonForTracing reason, 2436 LayoutInvalidationReasonForTracing reason,
2333 MarkingBehavior markParents, 2437 MarkingBehavior markParents,
2334 SubtreeLayoutScope* layouter) { 2438 SubtreeLayoutScope* layouter) {
2335 ASSERT(!isSetNeedsLayoutForbidden()); 2439 ASSERT(!isSetNeedsLayoutForbidden());
2336 bool alreadyNeededLayout = m_bitfields.selfNeedsLayout(); 2440 bool alreadyNeededLayout = m_bitfields.selfNeedsLayout();
2337 setSelfNeedsLayout(true); 2441 setSelfNeedsLayout(true);
2338 if (!alreadyNeededLayout) { 2442 if (!alreadyNeededLayout) {
2339 TRACE_EVENT_INSTANT1( 2443 TRACE_EVENT_INSTANT1(
2340 TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking"), 2444 TRACE_DISABLED_BY_DEFAULT("devtools.timeline.invalidationTracking"),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
2372 #endif 2476 #endif
2373 2477
2374 setScrollAnchorDisablingStyleChanged(false); 2478 setScrollAnchorDisablingStyleChanged(false);
2375 } 2479 }
2376 2480
2377 inline void LayoutObject::setChildNeedsLayout(MarkingBehavior markParents, 2481 inline void LayoutObject::setChildNeedsLayout(MarkingBehavior markParents,
2378 SubtreeLayoutScope* layouter) { 2482 SubtreeLayoutScope* layouter) {
2379 ASSERT(!isSetNeedsLayoutForbidden()); 2483 ASSERT(!isSetNeedsLayoutForbidden());
2380 bool alreadyNeededLayout = normalChildNeedsLayout(); 2484 bool alreadyNeededLayout = normalChildNeedsLayout();
2381 setNormalChildNeedsLayout(true); 2485 setNormalChildNeedsLayout(true);
2382 // FIXME: Replace MarkOnlyThis with the SubtreeLayoutScope code path and remov e the MarkingBehavior argument entirely. 2486 // FIXME: Replace MarkOnlyThis with the SubtreeLayoutScope code path and
2487 // remove the MarkingBehavior argument entirely.
2383 if (!alreadyNeededLayout && markParents == MarkContainerChain && 2488 if (!alreadyNeededLayout && markParents == MarkContainerChain &&
2384 (!layouter || layouter->root() != this)) 2489 (!layouter || layouter->root() != this))
2385 markContainerChainForLayout(!layouter, layouter); 2490 markContainerChainForLayout(!layouter, layouter);
2386 } 2491 }
2387 2492
2388 inline void LayoutObject::setNeedsPositionedMovementLayout() { 2493 inline void LayoutObject::setNeedsPositionedMovementLayout() {
2389 bool alreadyNeededLayout = needsPositionedMovementLayout(); 2494 bool alreadyNeededLayout = needsPositionedMovementLayout();
2390 setNeedsPositionedMovementLayout(true); 2495 setNeedsPositionedMovementLayout(true);
2391 ASSERT(!isSetNeedsLayoutForbidden()); 2496 ASSERT(!isSetNeedsLayoutForbidden());
2392 if (!alreadyNeededLayout) 2497 if (!alreadyNeededLayout)
(...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after
2491 CORE_EXPORT void showLineTree(const blink::LayoutObject*); 2596 CORE_EXPORT void showLineTree(const blink::LayoutObject*);
2492 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1); 2597 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1);
2493 // We don't make object2 an optional parameter so that showLayoutTree 2598 // We don't make object2 an optional parameter so that showLayoutTree
2494 // can be called from gdb easily. 2599 // can be called from gdb easily.
2495 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1, 2600 CORE_EXPORT void showLayoutTree(const blink::LayoutObject* object1,
2496 const blink::LayoutObject* object2); 2601 const blink::LayoutObject* object2);
2497 2602
2498 #endif 2603 #endif
2499 2604
2500 #endif // LayoutObject_h 2605 #endif // LayoutObject_h
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698