| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 2000 Lars Knoll (knoll@kde.org) |
| 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) | 3 * (C) 2000 Antti Koivisto (koivisto@kde.org) |
| 4 * (C) 2000 Dirk Mueller (mueller@kde.org) | 4 * (C) 2000 Dirk Mueller (mueller@kde.org) |
| 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) | 5 * (C) 2004 Allan Sandfeld Jensen (kde@carewolf.com) |
| 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r
ights reserved. | 6 * Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2012 Apple Inc. All r
ights reserved. |
| 7 * Copyright (C) 2009 Google Inc. All rights reserved. | 7 * Copyright (C) 2009 Google Inc. All rights reserved. |
| 8 * | 8 * |
| 9 * This library is free software; you can redistribute it and/or | 9 * This library is free software; you can redistribute it and/or |
| 10 * modify it under the terms of the GNU Library General Public | 10 * modify it under the terms of the GNU Library General Public |
| (...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 117 LayoutRect bounds; | 117 LayoutRect bounds; |
| 118 bool draggable; | 118 bool draggable; |
| 119 }; | 119 }; |
| 120 | 120 |
| 121 typedef WTF::HashMap<const DeprecatedPaintLayer*, Vector<LayoutRect>> LayerHitTe
stRects; | 121 typedef WTF::HashMap<const DeprecatedPaintLayer*, Vector<LayoutRect>> LayerHitTe
stRects; |
| 122 | 122 |
| 123 #ifndef NDEBUG | 123 #ifndef NDEBUG |
| 124 const int showTreeCharacterOffset = 39; | 124 const int showTreeCharacterOffset = 39; |
| 125 #endif | 125 #endif |
| 126 | 126 |
| 127 // Base class for all rendering tree objects. | 127 // Base class for all layout tree objects. |
| 128 class CORE_EXPORT LayoutObject : public ImageResourceClient { | 128 class CORE_EXPORT LayoutObject : public ImageResourceClient { |
| 129 friend class LayoutBlock; | 129 friend class LayoutBlock; |
| 130 friend class LayoutBlockFlow; | 130 friend class LayoutBlockFlow; |
| 131 friend class DeprecatedPaintLayerReflectionInfo; // For setParent | 131 friend class DeprecatedPaintLayerReflectionInfo; // For setParent |
| 132 friend class DeprecatedPaintLayerScrollableArea; // For setParent. | 132 friend class DeprecatedPaintLayerScrollableArea; // For setParent. |
| 133 friend class LayoutObjectChildList; | 133 friend class LayoutObjectChildList; |
| 134 WTF_MAKE_NONCOPYABLE(LayoutObject); | 134 WTF_MAKE_NONCOPYABLE(LayoutObject); |
| 135 public: | 135 public: |
| 136 // Anonymous objects should pass the document as their node, and they will t
hen automatically be | 136 // Anonymous objects should pass the document as their node, and they will t
hen automatically be |
| 137 // marked as anonymous in the constructor. | 137 // marked as anonymous in the constructor. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 175 LayoutObject* nextInPreOrder() const; | 175 LayoutObject* nextInPreOrder() const; |
| 176 LayoutObject* nextInPreOrder(const LayoutObject* stayWithin) const; | 176 LayoutObject* nextInPreOrder(const LayoutObject* stayWithin) const; |
| 177 LayoutObject* nextInPreOrderAfterChildren() const; | 177 LayoutObject* nextInPreOrderAfterChildren() const; |
| 178 LayoutObject* nextInPreOrderAfterChildren(const LayoutObject* stayWithin) co
nst; | 178 LayoutObject* nextInPreOrderAfterChildren(const LayoutObject* stayWithin) co
nst; |
| 179 LayoutObject* previousInPreOrder() const; | 179 LayoutObject* previousInPreOrder() const; |
| 180 LayoutObject* previousInPreOrder(const LayoutObject* stayWithin) const; | 180 LayoutObject* previousInPreOrder(const LayoutObject* stayWithin) const; |
| 181 LayoutObject* childAt(unsigned) const; | 181 LayoutObject* childAt(unsigned) const; |
| 182 | 182 |
| 183 LayoutObject* lastLeafChild() const; | 183 LayoutObject* lastLeafChild() const; |
| 184 | 184 |
| 185 // The following six functions are used when the render tree hierarchy chang
es to make sure layers get | 185 // The following six functions are used when the layout tree hierarchy chang
es to make sure layers get |
| 186 // properly added and removed. Since containership can be implemented by an
y subclass, and since a hierarchy | 186 // properly added and removed. Since containership can be implemented by an
y subclass, and since a hierarchy |
| 187 // can contain a mixture of boxes and other object types, these functions ne
ed to be in the base class. | 187 // can contain a mixture of boxes and other object types, these functions ne
ed to be in the base class. |
| 188 DeprecatedPaintLayer* enclosingLayer() const; | 188 DeprecatedPaintLayer* enclosingLayer() const; |
| 189 void addLayers(DeprecatedPaintLayer* parentLayer); | 189 void addLayers(DeprecatedPaintLayer* parentLayer); |
| 190 void removeLayers(DeprecatedPaintLayer* parentLayer); | 190 void removeLayers(DeprecatedPaintLayer* parentLayer); |
| 191 void moveLayers(DeprecatedPaintLayer* oldParent, DeprecatedPaintLayer* newPa
rent); | 191 void moveLayers(DeprecatedPaintLayer* oldParent, DeprecatedPaintLayer* newPa
rent); |
| 192 DeprecatedPaintLayer* findNextLayer(DeprecatedPaintLayer* parentLayer, Layou
tObject* startPoint, bool checkParent = true); | 192 DeprecatedPaintLayer* findNextLayer(DeprecatedPaintLayer* parentLayer, Layou
tObject* startPoint, bool checkParent = true); |
| 193 | 193 |
| 194 // Scrolling is a LayoutBox concept, however some code just cares about recu
rsively scrolling our enclosing ScrollableArea(s). | 194 // Scrolling is a LayoutBox concept, however some code just cares about recu
rsively scrolling our enclosing ScrollableArea(s). |
| 195 bool scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX =
ScrollAlignment::alignCenterIfNeeded, const ScrollAlignment& alignY = ScrollAlig
nment::alignCenterIfNeeded); | 195 bool scrollRectToVisible(const LayoutRect&, const ScrollAlignment& alignX =
ScrollAlignment::alignCenterIfNeeded, const ScrollAlignment& alignY = ScrollAlig
nment::alignCenterIfNeeded); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 216 // Helper class forbidding calls to setNeedsLayout() during its lifetime. | 216 // Helper class forbidding calls to setNeedsLayout() during its lifetime. |
| 217 class SetLayoutNeededForbiddenScope { | 217 class SetLayoutNeededForbiddenScope { |
| 218 public: | 218 public: |
| 219 explicit SetLayoutNeededForbiddenScope(LayoutObject&); | 219 explicit SetLayoutNeededForbiddenScope(LayoutObject&); |
| 220 ~SetLayoutNeededForbiddenScope(); | 220 ~SetLayoutNeededForbiddenScope(); |
| 221 private: | 221 private: |
| 222 LayoutObject& m_layoutObject; | 222 LayoutObject& m_layoutObject; |
| 223 bool m_preexistingForbidden; | 223 bool m_preexistingForbidden; |
| 224 }; | 224 }; |
| 225 | 225 |
| 226 void assertRendererLaidOut() const | 226 void assertLaidOut() const |
| 227 { | 227 { |
| 228 #ifndef NDEBUG | 228 #ifndef NDEBUG |
| 229 if (needsLayout()) | 229 if (needsLayout()) |
| 230 showLayoutTreeForThis(); | 230 showLayoutTreeForThis(); |
| 231 #endif | 231 #endif |
| 232 ASSERT_WITH_SECURITY_IMPLICATION(!needsLayout()); | 232 ASSERT_WITH_SECURITY_IMPLICATION(!needsLayout()); |
| 233 } | 233 } |
| 234 | 234 |
| 235 void assertSubtreeIsLaidOut() const | 235 void assertSubtreeIsLaidOut() const |
| 236 { | 236 { |
| 237 for (const LayoutObject* renderer = this; renderer; renderer = renderer-
>nextInPreOrder()) | 237 for (const LayoutObject* layoutObject = this; layoutObject; layoutObject
= layoutObject->nextInPreOrder()) |
| 238 renderer->assertRendererLaidOut(); | 238 layoutObject->assertLaidOut(); |
| 239 } | 239 } |
| 240 | 240 |
| 241 void assertRendererClearedPaintInvalidationState() const | 241 void assertClearedPaintInvalidationState() const |
| 242 { | 242 { |
| 243 #ifndef NDEBUG | 243 #ifndef NDEBUG |
| 244 if (paintInvalidationStateIsDirty()) { | 244 if (paintInvalidationStateIsDirty()) { |
| 245 showLayoutTreeForThis(); | 245 showLayoutTreeForThis(); |
| 246 ASSERT_NOT_REACHED(); | 246 ASSERT_NOT_REACHED(); |
| 247 } | 247 } |
| 248 #endif | 248 #endif |
| 249 } | 249 } |
| 250 | 250 |
| 251 void assertSubtreeClearedPaintInvalidationState() const | 251 void assertSubtreeClearedPaintInvalidationState() const |
| 252 { | 252 { |
| 253 for (const LayoutObject* renderer = this; renderer; renderer = renderer-
>nextInPreOrder()) | 253 for (const LayoutObject* layoutObject = this; layoutObject; layoutObject
= layoutObject->nextInPreOrder()) |
| 254 renderer->assertRendererClearedPaintInvalidationState(); | 254 layoutObject->assertClearedPaintInvalidationState(); |
| 255 } | 255 } |
| 256 | 256 |
| 257 #endif | 257 #endif |
| 258 | 258 |
| 259 // Correct version of !rendererHasNoBoxEffectObsolete(). | 259 // Correct version of !layoutObjectHasNoBoxEffectObsolete(). |
| 260 bool hasBoxEffect() const | 260 bool hasBoxEffect() const |
| 261 { | 261 { |
| 262 return hasBoxDecorationBackground() || style()->hasVisualOverflowingEffe
ct(); | 262 return hasBoxDecorationBackground() || style()->hasVisualOverflowingEffe
ct(); |
| 263 } | 263 } |
| 264 | 264 |
| 265 // Obtains the nearest enclosing block (including this block) that contribut
es a first-line style to our inline | 265 // Obtains the nearest enclosing block (including this block) that contribut
es a first-line style to our inline |
| 266 // children. | 266 // children. |
| 267 virtual LayoutBlock* firstLineBlock() const; | 267 virtual LayoutBlock* firstLineBlock() const; |
| 268 | 268 |
| 269 // LayoutObject tree manipulation | 269 // LayoutObject tree manipulation |
| (...skipping 165 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 435 NotInsideFlowThread = 0, | 435 NotInsideFlowThread = 0, |
| 436 InsideOutOfFlowThread = 1, | 436 InsideOutOfFlowThread = 1, |
| 437 InsideInFlowThread = 2, | 437 InsideInFlowThread = 2, |
| 438 }; | 438 }; |
| 439 | 439 |
| 440 void setFlowThreadStateIncludingDescendants(FlowThreadState); | 440 void setFlowThreadStateIncludingDescendants(FlowThreadState); |
| 441 | 441 |
| 442 FlowThreadState flowThreadState() const { return m_bitfields.flowThreadState
(); } | 442 FlowThreadState flowThreadState() const { return m_bitfields.flowThreadState
(); } |
| 443 void setFlowThreadState(FlowThreadState state) { m_bitfields.setFlowThreadSt
ate(state); } | 443 void setFlowThreadState(FlowThreadState state) { m_bitfields.setFlowThreadSt
ate(state); } |
| 444 | 444 |
| 445 // FIXME: Until all SVG renders can be subclasses of LayoutSVGModelObject we
have | 445 // FIXME: Until all SVG layoutObjects can be subclasses of LayoutSVGModelObj
ect we have |
| 446 // to add SVG renderer methods to LayoutObject with an ASSERT_NOT_REACHED()
default implementation. | 446 // to add SVG layoutObject methods to LayoutObject with an ASSERT_NOT_REACHE
D() default implementation. |
| 447 bool isSVG() const { return isOfType(LayoutObjectSVG); } | 447 bool isSVG() const { return isOfType(LayoutObjectSVG); } |
| 448 bool isSVGRoot() const { return isOfType(LayoutObjectSVGRoot); } | 448 bool isSVGRoot() const { return isOfType(LayoutObjectSVGRoot); } |
| 449 bool isSVGContainer() const { return isOfType(LayoutObjectSVGContainer); } | 449 bool isSVGContainer() const { return isOfType(LayoutObjectSVGContainer); } |
| 450 bool isSVGTransformableContainer() const { return isOfType(LayoutObjectSVGTr
ansformableContainer); } | 450 bool isSVGTransformableContainer() const { return isOfType(LayoutObjectSVGTr
ansformableContainer); } |
| 451 bool isSVGViewportContainer() const { return isOfType(LayoutObjectSVGViewpor
tContainer); } | 451 bool isSVGViewportContainer() const { return isOfType(LayoutObjectSVGViewpor
tContainer); } |
| 452 bool isSVGGradientStop() const { return isOfType(LayoutObjectSVGGradientStop
); } | 452 bool isSVGGradientStop() const { return isOfType(LayoutObjectSVGGradientStop
); } |
| 453 bool isSVGHiddenContainer() const { return isOfType(LayoutObjectSVGHiddenCon
tainer); } | 453 bool isSVGHiddenContainer() const { return isOfType(LayoutObjectSVGHiddenCon
tainer); } |
| 454 bool isSVGShape() const { return isOfType(LayoutObjectSVGShape); } | 454 bool isSVGShape() const { return isOfType(LayoutObjectSVGShape); } |
| 455 bool isSVGText() const { return isOfType(LayoutObjectSVGText); } | 455 bool isSVGText() const { return isOfType(LayoutObjectSVGText); } |
| 456 bool isSVGTextPath() const { return isOfType(LayoutObjectSVGTextPath); } | 456 bool isSVGTextPath() const { return isOfType(LayoutObjectSVGTextPath); } |
| 457 bool isSVGInline() const { return isOfType(LayoutObjectSVGInline); } | 457 bool isSVGInline() const { return isOfType(LayoutObjectSVGInline); } |
| 458 bool isSVGInlineText() const { return isOfType(LayoutObjectSVGInlineText); } | 458 bool isSVGInlineText() const { return isOfType(LayoutObjectSVGInlineText); } |
| 459 bool isSVGImage() const { return isOfType(LayoutObjectSVGImage); } | 459 bool isSVGImage() const { return isOfType(LayoutObjectSVGImage); } |
| 460 bool isSVGForeignObject() const { return isOfType(LayoutObjectSVGForeignObje
ct); } | 460 bool isSVGForeignObject() const { return isOfType(LayoutObjectSVGForeignObje
ct); } |
| 461 bool isSVGResourceContainer() const { return isOfType(LayoutObjectSVGResourc
eContainer); } | 461 bool isSVGResourceContainer() const { return isOfType(LayoutObjectSVGResourc
eContainer); } |
| 462 bool isSVGResourceFilter() const { return isOfType(LayoutObjectSVGResourceFi
lter); } | 462 bool isSVGResourceFilter() const { return isOfType(LayoutObjectSVGResourceFi
lter); } |
| 463 bool isSVGResourceFilterPrimitive() const { return isOfType(LayoutObjectSVGR
esourceFilterPrimitive); } | 463 bool isSVGResourceFilterPrimitive() const { return isOfType(LayoutObjectSVGR
esourceFilterPrimitive); } |
| 464 | 464 |
| 465 // FIXME: Those belong into a SVG specific base-class for all renderers (see
above) | 465 // FIXME: Those belong into a SVG specific base-class for all layoutObjects
(see above) |
| 466 // Unfortunately we don't have such a class yet, because it's not possible f
or all renderers | 466 // Unfortunately we don't have such a class yet, because it's not possible f
or all layoutObjects |
| 467 // to inherit from LayoutSVGObject -> LayoutObject (some need LayoutBlock in
heritance for instance) | 467 // to inherit from LayoutSVGObject -> LayoutObject (some need LayoutBlock in
heritance for instance) |
| 468 virtual void setNeedsTransformUpdate() { } | 468 virtual void setNeedsTransformUpdate() { } |
| 469 virtual void setNeedsBoundariesUpdate(); | 469 virtual void setNeedsBoundariesUpdate(); |
| 470 | 470 |
| 471 bool isBlendingAllowed() const { return !isSVG() || (isSVGContainer() && !is
SVGHiddenContainer()) || isSVGShape() || isSVGImage() || isSVGText(); } | 471 bool isBlendingAllowed() const { return !isSVG() || (isSVGContainer() && !is
SVGHiddenContainer()) || isSVGShape() || isSVGImage() || isSVGText(); } |
| 472 virtual bool hasNonIsolatedBlendingDescendants() const { return false; } | 472 virtual bool hasNonIsolatedBlendingDescendants() const { return false; } |
| 473 enum DescendantIsolationState { | 473 enum DescendantIsolationState { |
| 474 DescendantIsolationRequired, | 474 DescendantIsolationRequired, |
| 475 DescendantIsolationNeedsUpdate, | 475 DescendantIsolationNeedsUpdate, |
| 476 }; | 476 }; |
| 477 virtual void descendantIsolationRequirementsChanged(DescendantIsolationState
) { } | 477 virtual void descendantIsolationRequirementsChanged(DescendantIsolationState
) { } |
| 478 | 478 |
| 479 // Per SVG 1.1 objectBoundingBox ignores clipping, masking, filter effects,
opacity and stroke-width. | 479 // Per SVG 1.1 objectBoundingBox ignores clipping, masking, filter effects,
opacity and stroke-width. |
| 480 // This is used for all computation of objectBoundingBox relative units and
by SVGLocatable::getBBox(). | 480 // This is used for all computation of objectBoundingBox relative units and
by SVGLocatable::getBBox(). |
| 481 // NOTE: Markers are not specifically ignored here by SVG 1.1 spec, but we i
gnore them | 481 // NOTE: Markers are not specifically ignored here by SVG 1.1 spec, but we i
gnore them |
| 482 // since stroke-width is ignored (and marker size can depend on stroke-width
). | 482 // since stroke-width is ignored (and marker size can depend on stroke-width
). |
| 483 // objectBoundingBox is returned local coordinates. | 483 // objectBoundingBox is returned local coordinates. |
| 484 // The name objectBoundingBox is taken from the SVG 1.1 spec. | 484 // The name objectBoundingBox is taken from the SVG 1.1 spec. |
| 485 virtual FloatRect objectBoundingBox() const; | 485 virtual FloatRect objectBoundingBox() const; |
| 486 virtual FloatRect strokeBoundingBox() const; | 486 virtual FloatRect strokeBoundingBox() const; |
| 487 | 487 |
| 488 // Returns the smallest rectangle enclosing all of the painted content | 488 // Returns the smallest rectangle enclosing all of the painted content |
| 489 // respecting clipping, masking, filters, opacity, stroke-width and markers | 489 // respecting clipping, masking, filters, opacity, stroke-width and markers |
| 490 virtual FloatRect paintInvalidationRectInLocalCoordinates() const; | 490 virtual FloatRect paintInvalidationRectInLocalCoordinates() const; |
| 491 | 491 |
| 492 // This only returns the transform="" value from the element | 492 // This only returns the transform="" value from the element |
| 493 // most callsites want localToParentTransform() instead. | 493 // most callsites want localToParentTransform() instead. |
| 494 virtual AffineTransform localTransform() const; | 494 virtual AffineTransform localTransform() const; |
| 495 | 495 |
| 496 // Returns the full transform mapping from local coordinates to local coords
for the parent SVG renderer | 496 // Returns the full transform mapping from local coordinates to local coords
for the parent SVG layoutObject |
| 497 // This includes any viewport transforms and x/y offsets as well as the tran
sform="" value off the element. | 497 // This includes any viewport transforms and x/y offsets as well as the tran
sform="" value off the element. |
| 498 virtual const AffineTransform& localToParentTransform() const; | 498 virtual const AffineTransform& localToParentTransform() const; |
| 499 | 499 |
| 500 // SVG uses FloatPoint precise hit testing, and passes the point in parent | 500 // SVG uses FloatPoint precise hit testing, and passes the point in parent |
| 501 // coordinates instead of in paint invalidaiton container coordinates. Event
ually the | 501 // coordinates instead of in paint invalidaiton container coordinates. Event
ually the |
| 502 // rest of the rendering tree will move to a similar model. | 502 // rest of the layout tree will move to a similar model. |
| 503 virtual bool nodeAtFloatPoint(HitTestResult&, const FloatPoint& pointInParen
t, HitTestAction); | 503 virtual bool nodeAtFloatPoint(HitTestResult&, const FloatPoint& pointInParen
t, HitTestAction); |
| 504 | 504 |
| 505 bool isAnonymous() const { return m_bitfields.isAnonymous(); } | 505 bool isAnonymous() const { return m_bitfields.isAnonymous(); } |
| 506 bool isAnonymousBlock() const | 506 bool isAnonymousBlock() const |
| 507 { | 507 { |
| 508 // This function is kept in sync with anonymous block creation condition
s in | 508 // This function is kept in sync with anonymous block creation condition
s in |
| 509 // LayoutBlock::createAnonymousBlock(). This includes creating an anonym
ous | 509 // LayoutBlock::createAnonymousBlock(). This includes creating an anonym
ous |
| 510 // LayoutBlock having a BLOCK or BOX display. Other classes such as Layo
utTextFragment | 510 // LayoutBlock having a BLOCK or BOX display. Other classes such as Layo
utTextFragment |
| 511 // are not LayoutBlocks and will return false. See https://bugs.webkit.o
rg/show_bug.cgi?id=56709. | 511 // are not LayoutBlocks and will return false. See https://bugs.webkit.o
rg/show_bug.cgi?id=56709. |
| 512 return isAnonymous() && (style()->display() == BLOCK || style()->display
() == BOX) && style()->styleType() == NOPSEUDO && isLayoutBlock() && !isListMark
er() && !isLayoutFlowThread() && !isLayoutMultiColumnSet() | 512 return isAnonymous() && (style()->display() == BLOCK || style()->display
() == BOX) && style()->styleType() == NOPSEUDO && isLayoutBlock() && !isListMark
er() && !isLayoutFlowThread() && !isLayoutMultiColumnSet() |
| (...skipping 104 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 617 } | 617 } |
| 618 | 618 |
| 619 Node* nonPseudoNode() const | 619 Node* nonPseudoNode() const |
| 620 { | 620 { |
| 621 return isPseudoElement() ? 0 : node(); | 621 return isPseudoElement() ? 0 : node(); |
| 622 } | 622 } |
| 623 | 623 |
| 624 // FIXME: Why does LayoutPart need this? crbug.com/422457 | 624 // FIXME: Why does LayoutPart need this? crbug.com/422457 |
| 625 void clearNode() { m_node = nullptr; } | 625 void clearNode() { m_node = nullptr; } |
| 626 | 626 |
| 627 // Returns the styled node that caused the generation of this renderer. | 627 // Returns the styled node that caused the generation of this layoutObject. |
| 628 // This is the same as node() except for renderers of :before, :after and | 628 // This is the same as node() except for layoutObjects of :before, :after an
d |
| 629 // :first-letter pseudo elements for which their parent node is returned. | 629 // :first-letter pseudo elements for which their parent node is returned. |
| 630 Node* generatingNode() const { return isPseudoElement() ? node()->parentOrSh
adowHostNode() : node(); } | 630 Node* generatingNode() const { return isPseudoElement() ? node()->parentOrSh
adowHostNode() : node(); } |
| 631 | 631 |
| 632 Document& document() const { return m_node->document(); } | 632 Document& document() const { return m_node->document(); } |
| 633 LocalFrame* frame() const { return document().frame(); } | 633 LocalFrame* frame() const { return document().frame(); } |
| 634 | 634 |
| 635 virtual LayoutMultiColumnSpannerPlaceholder* spannerPlaceholder() const { re
turn 0; } | 635 virtual LayoutMultiColumnSpannerPlaceholder* spannerPlaceholder() const { re
turn 0; } |
| 636 bool isColumnSpanAll() const { return style()->columnSpan() == ColumnSpanAll
&& spannerPlaceholder(); } | 636 bool isColumnSpanAll() const { return style()->columnSpan() == ColumnSpanAll
&& spannerPlaceholder(); } |
| 637 | 637 |
| 638 // Returns the object containing this one. Can be different from parent for
positioned elements. | 638 // Returns the object containing this one. Can be different from parent for
positioned elements. |
| 639 // If paintInvalidationContainer and paintInvalidationContainerSkipped are n
ot null, on return *paintInvalidationContainerSkipped | 639 // If paintInvalidationContainer and paintInvalidationContainerSkipped are n
ot null, on return *paintInvalidationContainerSkipped |
| 640 // is true if the renderer returned is an ancestor of paintInvalidationConta
iner. | 640 // is true if the layoutObject returned is an ancestor of paintInvalidationC
ontainer. |
| 641 LayoutObject* container(const LayoutBoxModelObject* paintInvalidationContain
er = 0, bool* paintInvalidationContainerSkipped = 0) const; | 641 LayoutObject* container(const LayoutBoxModelObject* paintInvalidationContain
er = 0, bool* paintInvalidationContainerSkipped = 0) const; |
| 642 LayoutBlock* containerForFixedPosition(const LayoutBoxModelObject* paintInva
lidationContainer = 0, bool* paintInvalidationContainerSkipped = 0) const; | 642 LayoutBlock* containerForFixedPosition(const LayoutBoxModelObject* paintInva
lidationContainer = 0, bool* paintInvalidationContainerSkipped = 0) const; |
| 643 | 643 |
| 644 virtual LayoutObject* hoverAncestor() const { return parent(); } | 644 virtual LayoutObject* hoverAncestor() const { return parent(); } |
| 645 | 645 |
| 646 Element* offsetParent() const; | 646 Element* offsetParent() const; |
| 647 | 647 |
| 648 void markContainerChainForLayout(bool scheduleRelayout = true, LayoutObject*
newRoot = 0, SubtreeLayoutScope* = 0); | 648 void markContainerChainForLayout(bool scheduleRelayout = true, LayoutObject*
newRoot = 0, SubtreeLayoutScope* = 0); |
| 649 void setNeedsLayout(LayoutInvalidationReasonForTracing, MarkingBehavior = Ma
rkContainerChain, SubtreeLayoutScope* = 0); | 649 void setNeedsLayout(LayoutInvalidationReasonForTracing, MarkingBehavior = Ma
rkContainerChain, SubtreeLayoutScope* = 0); |
| 650 void setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidationReasonForTraci
ng, MarkingBehavior = MarkContainerChain, SubtreeLayoutScope* = 0); | 650 void setNeedsLayoutAndFullPaintInvalidation(LayoutInvalidationReasonForTraci
ng, MarkingBehavior = MarkContainerChain, SubtreeLayoutScope* = 0); |
| (...skipping 115 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 766 // Convert an absolute quad to local coordinates. | 766 // Convert an absolute quad to local coordinates. |
| 767 FloatQuad absoluteToLocalQuad(const FloatQuad&, MapCoordinatesFlags mode = 0
) const; | 767 FloatQuad absoluteToLocalQuad(const FloatQuad&, MapCoordinatesFlags mode = 0
) const; |
| 768 | 768 |
| 769 // Convert a local quad into the coordinate system of container, taking tran
sforms into account. | 769 // Convert a local quad into the coordinate system of container, taking tran
sforms into account. |
| 770 FloatQuad localToContainerQuad(const FloatQuad&, const LayoutBoxModelObject*
paintInvalidatinoContainer, MapCoordinatesFlags = 0, bool* wasFixed = 0) const; | 770 FloatQuad localToContainerQuad(const FloatQuad&, const LayoutBoxModelObject*
paintInvalidatinoContainer, MapCoordinatesFlags = 0, bool* wasFixed = 0) const; |
| 771 FloatPoint localToContainerPoint(const FloatPoint&, const LayoutBoxModelObje
ct* paintInvalidationContainer, MapCoordinatesFlags = 0, bool* wasFixed = 0, con
st PaintInvalidationState* = 0) const; | 771 FloatPoint localToContainerPoint(const FloatPoint&, const LayoutBoxModelObje
ct* paintInvalidationContainer, MapCoordinatesFlags = 0, bool* wasFixed = 0, con
st PaintInvalidationState* = 0) const; |
| 772 | 772 |
| 773 // Convert a local point into the coordinate system of backing coordinates.
Also returns the backing layer if needed. | 773 // Convert a local point into the coordinate system of backing coordinates.
Also returns the backing layer if needed. |
| 774 FloatPoint localToInvalidationBackingPoint(const LayoutPoint&, DeprecatedPai
ntLayer** backingLayer = nullptr); | 774 FloatPoint localToInvalidationBackingPoint(const LayoutPoint&, DeprecatedPai
ntLayer** backingLayer = nullptr); |
| 775 | 775 |
| 776 // Return the offset from the container() renderer (excluding transforms). I
n multi-column layout, | 776 // Return the offset from the container() layoutObject (excluding transforms
). In multi-column layout, |
| 777 // different offsets apply at different points, so return the offset that ap
plies to the given point. | 777 // different offsets apply at different points, so return the offset that ap
plies to the given point. |
| 778 virtual LayoutSize offsetFromContainer(const LayoutObject*, const LayoutPoin
t&, bool* offsetDependsOnPoint = 0) const; | 778 virtual LayoutSize offsetFromContainer(const LayoutObject*, const LayoutPoin
t&, bool* offsetDependsOnPoint = 0) const; |
| 779 // Return the offset from an object up the container() chain. Asserts that n
one of the intermediate objects have transforms. | 779 // Return the offset from an object up the container() chain. Asserts that n
one of the intermediate objects have transforms. |
| 780 LayoutSize offsetFromAncestorContainer(const LayoutObject*) const; | 780 LayoutSize offsetFromAncestorContainer(const LayoutObject*) const; |
| 781 | 781 |
| 782 virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint&) const { } | 782 virtual void absoluteRects(Vector<IntRect>&, const LayoutPoint&) const { } |
| 783 | 783 |
| 784 FloatRect absoluteBoundingBoxFloatRect() const; | 784 FloatRect absoluteBoundingBoxFloatRect() const; |
| 785 // This returns an IntRect enclosing this object. If this object has an | 785 // This returns an IntRect enclosing this object. If this object has an |
| 786 // integral size and the position has fractional values, the resultant | 786 // integral size and the position has fractional values, the resultant |
| (...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 849 bool isPaintInvalidationContainer() const; | 849 bool isPaintInvalidationContainer() const; |
| 850 | 850 |
| 851 LayoutRect computePaintInvalidationRect() | 851 LayoutRect computePaintInvalidationRect() |
| 852 { | 852 { |
| 853 return computePaintInvalidationRect(containerForPaintInvalidation()); | 853 return computePaintInvalidationRect(containerForPaintInvalidation()); |
| 854 } | 854 } |
| 855 | 855 |
| 856 // Returns the paint invalidation rect for this LayoutObject in the coordina
te space of the paint backing (typically a GraphicsLayer) for |paintInvalidation
Container|. | 856 // Returns the paint invalidation rect for this LayoutObject in the coordina
te space of the paint backing (typically a GraphicsLayer) for |paintInvalidation
Container|. |
| 857 LayoutRect computePaintInvalidationRect(const LayoutBoxModelObject* paintInv
alidationContainer, const PaintInvalidationState* = 0) const; | 857 LayoutRect computePaintInvalidationRect(const LayoutBoxModelObject* paintInv
alidationContainer, const PaintInvalidationState* = 0) const; |
| 858 | 858 |
| 859 // Returns the rect bounds needed to invalidate the paint of this object, in
the coordinate space of the rendering backing of |paintInvalidationContainer| | 859 // Returns the rect bounds needed to invalidate the paint of this object, in
the coordinate space of the layoutObject backing of |paintInvalidationContainer
| |
| 860 LayoutRect boundsRectForPaintInvalidation(const LayoutBoxModelObject* paintI
nvalidationContainer, const PaintInvalidationState* = 0) const; | 860 LayoutRect boundsRectForPaintInvalidation(const LayoutBoxModelObject* paintI
nvalidationContainer, const PaintInvalidationState* = 0) const; |
| 861 | 861 |
| 862 // Actually do the paint invalidate of rect r for this object which has been
computed in the coordinate space | 862 // Actually do the paint invalidate of rect r for this object which has been
computed in the coordinate space |
| 863 // of the GraphicsLayer backing of |paintInvalidationContainer|. Note that t
his coordinaten space is not the same | 863 // of the GraphicsLayer backing of |paintInvalidationContainer|. Note that t
his coordinaten space is not the same |
| 864 // as the local coordinate space of |paintInvalidationContainer| in the pres
ence of layer squashing. | 864 // as the local coordinate space of |paintInvalidationContainer| in the pres
ence of layer squashing. |
| 865 // If |paintInvalidationContainer| is 0, invalidate paints via the view. | 865 // If |paintInvalidationContainer| is 0, invalidate paints via the view. |
| 866 // FIXME: |paintInvalidationContainer| should never be 0. See crbug.com/3636
99. | 866 // FIXME: |paintInvalidationContainer| should never be 0. See crbug.com/3636
99. |
| 867 void invalidatePaintUsingContainer(const LayoutBoxModelObject* paintInvalida
tionContainer, const LayoutRect&, PaintInvalidationReason) const; | 867 void invalidatePaintUsingContainer(const LayoutBoxModelObject* paintInvalida
tionContainer, const LayoutRect&, PaintInvalidationReason) const; |
| 868 | 868 |
| 869 // Invalidate the paint of a specific subrectangle within a given object. Th
e rect |r| is in the object's coordinate space. | 869 // Invalidate the paint of a specific subrectangle within a given object. Th
e rect |r| is in the object's coordinate space. |
| 870 void invalidatePaintRectangle(const LayoutRect&) const; | 870 void invalidatePaintRectangle(const LayoutRect&) const; |
| 871 void invalidatePaintRectangleNotInvalidatingDisplayItemClients(const LayoutR
ect& r) const { invalidatePaintRectangleInternal(r); } | 871 void invalidatePaintRectangleNotInvalidatingDisplayItemClients(const LayoutR
ect& r) const { invalidatePaintRectangleInternal(r); } |
| 872 | 872 |
| 873 // Walk the tree after layout issuing paint invalidations for renderers that
have changed or moved, updating bounds that have changed, and clearing paint in
validation state. | 873 // Walk the tree after layout issuing paint invalidations for layoutObjects
that have changed or moved, updating bounds that have changed, and clearing pain
t invalidation state. |
| 874 virtual void invalidateTreeIfNeeded(PaintInvalidationState&); | 874 virtual void invalidateTreeIfNeeded(PaintInvalidationState&); |
| 875 | 875 |
| 876 virtual void invalidatePaintForOverflow(); | 876 virtual void invalidatePaintForOverflow(); |
| 877 void invalidatePaintForOverflowIfNeeded(); | 877 void invalidatePaintForOverflowIfNeeded(); |
| 878 | 878 |
| 879 void invalidatePaintIncludingNonCompositingDescendants(); | 879 void invalidatePaintIncludingNonCompositingDescendants(); |
| 880 | 880 |
| 881 // Returns the rect that should have paint invalidated whenever this object
changes. The rect is in the view's | 881 // Returns the rect that should have paint invalidated whenever this object
changes. The rect is in the view's |
| 882 // coordinate space. This method deals with outlines and overflow. | 882 // coordinate space. This method deals with outlines and overflow. |
| 883 virtual LayoutRect absoluteClippedOverflowRect() const; | 883 virtual LayoutRect absoluteClippedOverflowRect() const; |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 929 bool isSelectable() const; | 929 bool isSelectable() const; |
| 930 // Obtains the selection colors that should be used when painting a selectio
n. | 930 // Obtains the selection colors that should be used when painting a selectio
n. |
| 931 Color selectionBackgroundColor() const; | 931 Color selectionBackgroundColor() const; |
| 932 Color selectionForegroundColor() const; | 932 Color selectionForegroundColor() const; |
| 933 Color selectionEmphasisMarkColor() const; | 933 Color selectionEmphasisMarkColor() const; |
| 934 | 934 |
| 935 // Whether or not a given block needs to paint selection gaps. | 935 // Whether or not a given block needs to paint selection gaps. |
| 936 virtual bool shouldPaintSelectionGaps() const { return false; } | 936 virtual bool shouldPaintSelectionGaps() const { return false; } |
| 937 | 937 |
| 938 /** | 938 /** |
| 939 * Returns the local coordinates of the caret within this render object. | 939 * Returns the local coordinates of the caret within this layout object. |
| 940 * @param caretOffset zero-based offset determining position within the rend
er object. | 940 * @param caretOffset zero-based offset determining position within the layo
ut object. |
| 941 * @param extraWidthToEndOfLine optional out arg to give extra width to end
of line - | 941 * @param extraWidthToEndOfLine optional out arg to give extra width to end
of line - |
| 942 * useful for character range rect computations | 942 * useful for character range rect computations |
| 943 */ | 943 */ |
| 944 virtual LayoutRect localCaretRect(InlineBox*, int caretOffset, LayoutUnit* e
xtraWidthToEndOfLine = 0); | 944 virtual LayoutRect localCaretRect(InlineBox*, int caretOffset, LayoutUnit* e
xtraWidthToEndOfLine = 0); |
| 945 | 945 |
| 946 // When performing a global document tear-down, the renderer of the document
is cleared. We use this | 946 // When performing a global document tear-down, the layoutObject of the docu
ment is cleared. We use this |
| 947 // as a hook to detect the case of document destruction and don't waste time
doing unnecessary work. | 947 // as a hook to detect the case of document destruction and don't waste time
doing unnecessary work. |
| 948 bool documentBeingDestroyed() const; | 948 bool documentBeingDestroyed() const; |
| 949 | 949 |
| 950 void destroyAndCleanupAnonymousWrappers(); | 950 void destroyAndCleanupAnonymousWrappers(); |
| 951 virtual void destroy(); | 951 virtual void destroy(); |
| 952 | 952 |
| 953 // Virtual function helpers for the deprecated Flexible Box Layout (display:
-webkit-box). | 953 // Virtual function helpers for the deprecated Flexible Box Layout (display:
-webkit-box). |
| 954 virtual bool isDeprecatedFlexibleBox() const { return false; } | 954 virtual bool isDeprecatedFlexibleBox() const { return false; } |
| 955 | 955 |
| 956 // Virtual function helper for the new FlexibleBox Layout (display: -webkit-
flex). | 956 // Virtual function helper for the new FlexibleBox Layout (display: -webkit-
flex). |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 989 | 989 |
| 990 bool visibleToHitTestRequest(const HitTestRequest& request) const { return s
tyle()->visibility() == VISIBLE && (request.ignorePointerEventsNone() || style()
->pointerEvents() != PE_NONE) && !isInert(); } | 990 bool visibleToHitTestRequest(const HitTestRequest& request) const { return s
tyle()->visibility() == VISIBLE && (request.ignorePointerEventsNone() || style()
->pointerEvents() != PE_NONE) && !isInert(); } |
| 991 | 991 |
| 992 bool visibleToHitTesting() const { return style()->visibility() == VISIBLE &
& style()->pointerEvents() != PE_NONE && !isInert(); } | 992 bool visibleToHitTesting() const { return style()->visibility() == VISIBLE &
& style()->pointerEvents() != PE_NONE && !isInert(); } |
| 993 | 993 |
| 994 // Map points and quads through elements, potentially via 3d transforms. You
should never need to call these directly; use | 994 // Map points and quads through elements, potentially via 3d transforms. You
should never need to call these directly; use |
| 995 // localToAbsolute/absoluteToLocal methods instead. | 995 // localToAbsolute/absoluteToLocal methods instead. |
| 996 virtual void mapLocalToContainer(const LayoutBoxModelObject* paintInvalidati
onContainer, TransformState&, MapCoordinatesFlags = ApplyContainerFlip, bool* wa
sFixed = 0, const PaintInvalidationState* = 0) const; | 996 virtual void mapLocalToContainer(const LayoutBoxModelObject* paintInvalidati
onContainer, TransformState&, MapCoordinatesFlags = ApplyContainerFlip, bool* wa
sFixed = 0, const PaintInvalidationState* = 0) const; |
| 997 virtual void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) c
onst; | 997 virtual void mapAbsoluteToLocalPoint(MapCoordinatesFlags, TransformState&) c
onst; |
| 998 | 998 |
| 999 // Pushes state onto LayoutGeometryMap about how to map coordinates from thi
s renderer to its container, or ancestorToStopAt (whichever is encountered first
). | 999 // Pushes state onto LayoutGeometryMap about how to map coordinates from thi
s layoutObject to its container, or ancestorToStopAt (whichever is encountered f
irst). |
| 1000 // Returns the renderer which was mapped to (container or ancestorToStopAt). | 1000 // Returns the layoutObject which was mapped to (container or ancestorToStop
At). |
| 1001 virtual const LayoutObject* pushMappingToContainer(const LayoutBoxModelObjec
t* ancestorToStopAt, LayoutGeometryMap&) const; | 1001 virtual const LayoutObject* pushMappingToContainer(const LayoutBoxModelObjec
t* ancestorToStopAt, LayoutGeometryMap&) const; |
| 1002 | 1002 |
| 1003 bool shouldUseTransformFromContainer(const LayoutObject* container) const; | 1003 bool shouldUseTransformFromContainer(const LayoutObject* container) const; |
| 1004 void getTransformFromContainer(const LayoutObject* container, const LayoutSi
ze& offsetInContainer, TransformationMatrix&) const; | 1004 void getTransformFromContainer(const LayoutObject* container, const LayoutSi
ze& offsetInContainer, TransformationMatrix&) const; |
| 1005 | 1005 |
| 1006 bool createsGroup() const { return isTransparent() || hasMask() || hasFilter
() || style()->hasBlendMode(); } | 1006 bool createsGroup() const { return isTransparent() || hasMask() || hasFilter
() || style()->hasBlendMode(); } |
| 1007 | 1007 |
| 1008 virtual void addFocusRingRects(Vector<LayoutRect>&, const LayoutPoint& addit
ionalOffset) const { } | 1008 virtual void addFocusRingRects(Vector<LayoutRect>&, const LayoutPoint& addit
ionalOffset) const { } |
| 1009 | 1009 |
| 1010 // Compute a list of hit-test rectangles per layer rooted at this renderer. | 1010 // Compute a list of hit-test rectangles per layer rooted at this layoutObje
ct. |
| 1011 virtual void computeLayerHitTestRects(LayerHitTestRects&) const; | 1011 virtual void computeLayerHitTestRects(LayerHitTestRects&) const; |
| 1012 | 1012 |
| 1013 // Return the renderer whose background style is used to paint the root back
ground. Should only be called on the renderer for which isDocumentElement() is t
rue. | 1013 // Return the layoutObject whose background style is used to paint the root
background. Should only be called on the layoutObject for which isDocumentElemen
t() is true. |
| 1014 LayoutObject* rendererForRootBackground(); | 1014 LayoutObject* layoutObjectForRootBackground(); |
| 1015 | 1015 |
| 1016 RespectImageOrientationEnum shouldRespectImageOrientation() const; | 1016 RespectImageOrientationEnum shouldRespectImageOrientation() const; |
| 1017 | 1017 |
| 1018 bool isRelayoutBoundaryForInspector() const; | 1018 bool isRelayoutBoundaryForInspector() const; |
| 1019 | 1019 |
| 1020 // The previous paint invalidation rect in the object's previous paint backi
ng. | 1020 // The previous paint invalidation rect in the object's previous paint backi
ng. |
| 1021 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP
aintInvalidationRect; } | 1021 const LayoutRect& previousPaintInvalidationRect() const { return m_previousP
aintInvalidationRect; } |
| 1022 void setPreviousPaintInvalidationRect(const LayoutRect& rect) { m_previousPa
intInvalidationRect = rect; } | 1022 void setPreviousPaintInvalidationRect(const LayoutRect& rect) { m_previousPa
intInvalidationRect = rect; } |
| 1023 | 1023 |
| 1024 // The previous position of the top-left corner of the object in its previou
s paint backing. | 1024 // The previous position of the top-left corner of the object in its previou
s paint backing. |
| 1025 const LayoutPoint& previousPositionFromPaintInvalidationBacking() const { re
turn m_previousPositionFromPaintInvalidationBacking; } | 1025 const LayoutPoint& previousPositionFromPaintInvalidationBacking() const { re
turn m_previousPositionFromPaintInvalidationBacking; } |
| 1026 void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& posi
tionFromPaintInvalidationBacking) { m_previousPositionFromPaintInvalidationBacki
ng = positionFromPaintInvalidationBacking; } | 1026 void setPreviousPositionFromPaintInvalidationBacking(const LayoutPoint& posi
tionFromPaintInvalidationBacking) { m_previousPositionFromPaintInvalidationBacki
ng = positionFromPaintInvalidationBacking; } |
| 1027 | 1027 |
| 1028 bool shouldDoFullPaintInvalidation() const { return m_bitfields.fullPaintInv
alidationReason() != PaintInvalidationNone; } | 1028 bool shouldDoFullPaintInvalidation() const { return m_bitfields.fullPaintInv
alidationReason() != PaintInvalidationNone; } |
| 1029 void setShouldDoFullPaintInvalidation(PaintInvalidationReason = PaintInvalid
ationFull); | 1029 void setShouldDoFullPaintInvalidation(PaintInvalidationReason = PaintInvalid
ationFull); |
| 1030 void clearShouldDoFullPaintInvalidation() { m_bitfields.setFullPaintInvalida
tionReason(PaintInvalidationNone); } | 1030 void clearShouldDoFullPaintInvalidation() { m_bitfields.setFullPaintInvalida
tionReason(PaintInvalidationNone); } |
| 1031 | 1031 |
| 1032 bool shouldInvalidateOverflowForPaint() const { return m_bitfields.shouldInv
alidateOverflowForPaint(); } | 1032 bool shouldInvalidateOverflowForPaint() const { return m_bitfields.shouldInv
alidateOverflowForPaint(); } |
| 1033 | 1033 |
| 1034 virtual void clearPaintInvalidationState(const PaintInvalidationState&); | 1034 virtual void clearPaintInvalidationState(const PaintInvalidationState&); |
| 1035 | 1035 |
| 1036 // Indicates whether this render object was re-laid-out since the last frame
. | 1036 // Indicates whether this layout object was re-laid-out since the last frame
. |
| 1037 // The flag will be cleared during invalidateTreeIfNeeded. | 1037 // The flag will be cleared during invalidateTreeIfNeeded. |
| 1038 bool layoutDidGetCalledSinceLastFrame() const { return m_bitfields.layoutDid
GetCalledSinceLastFrame(); } | 1038 bool layoutDidGetCalledSinceLastFrame() const { return m_bitfields.layoutDid
GetCalledSinceLastFrame(); } |
| 1039 | 1039 |
| 1040 bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInval
idation(); } | 1040 bool mayNeedPaintInvalidation() const { return m_bitfields.mayNeedPaintInval
idation(); } |
| 1041 void setMayNeedPaintInvalidation(); | 1041 void setMayNeedPaintInvalidation(); |
| 1042 | 1042 |
| 1043 bool shouldInvalidateSelection() const { return m_bitfields.shouldInvalidate
Selection(); } | 1043 bool shouldInvalidateSelection() const { return m_bitfields.shouldInvalidate
Selection(); } |
| 1044 void setShouldInvalidateSelection(); | 1044 void setShouldInvalidateSelection(); |
| 1045 void clearShouldInvalidateSelection() { m_bitfields.setShouldInvalidateSelec
tion(false); } | 1045 void clearShouldInvalidateSelection() { m_bitfields.setShouldInvalidateSelec
tion(false); } |
| 1046 | 1046 |
| (...skipping 108 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1155 | 1155 |
| 1156 void clearLayoutRootIfNeeded() const; | 1156 void clearLayoutRootIfNeeded() const; |
| 1157 virtual void willBeDestroyed(); | 1157 virtual void willBeDestroyed(); |
| 1158 void postDestroy(); | 1158 void postDestroy(); |
| 1159 | 1159 |
| 1160 virtual void insertedIntoTree(); | 1160 virtual void insertedIntoTree(); |
| 1161 virtual void willBeRemovedFromTree(); | 1161 virtual void willBeRemovedFromTree(); |
| 1162 | 1162 |
| 1163 void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_
node = document; } | 1163 void setDocumentForAnonymous(Document* document) { ASSERT(isAnonymous()); m_
node = document; } |
| 1164 | 1164 |
| 1165 // Add hit-test rects for the render tree rooted at this node to the provide
d collection on a | 1165 // Add hit-test rects for the layout tree rooted at this node to the provide
d collection on a |
| 1166 // per-Layer basis. | 1166 // per-Layer basis. |
| 1167 // currentLayer must be the enclosing layer, and layerOffset is the current
offset within | 1167 // currentLayer must be the enclosing layer, and layerOffset is the current
offset within |
| 1168 // this layer. Subclass implementations will add any offset for this rendere
r within it's | 1168 // this layer. Subclass implementations will add any offset for this layoutO
bject within it's |
| 1169 // container, so callers should provide only the offset of the container wit
hin it's layer. | 1169 // container, so callers should provide only the offset of the container wit
hin it's layer. |
| 1170 // containerRect is a rect that has already been added for the currentLayer
which is likely to | 1170 // containerRect is a rect that has already been added for the currentLayer
which is likely to |
| 1171 // be a container for child elements. Any rect wholly contained by container
Rect can be | 1171 // be a container for child elements. Any rect wholly contained by container
Rect can be |
| 1172 // skipped. | 1172 // skipped. |
| 1173 virtual void addLayerHitTestRects(LayerHitTestRects&, const DeprecatedPaintL
ayer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& containerR
ect) const; | 1173 virtual void addLayerHitTestRects(LayerHitTestRects&, const DeprecatedPaintL
ayer* currentLayer, const LayoutPoint& layerOffset, const LayoutRect& containerR
ect) const; |
| 1174 | 1174 |
| 1175 // Add hit-test rects for this renderer only to the provided list. layerOffs
et is the offset | 1175 // Add hit-test rects for this layoutObject only to the provided list. layer
Offset is the offset |
| 1176 // of this renderer within the current layer that should be used for each re
sult. | 1176 // of this layoutObject within the current layer that should be used for eac
h result. |
| 1177 virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint&
layerOffset) const { }; | 1177 virtual void computeSelfHitTestRects(Vector<LayoutRect>&, const LayoutPoint&
layerOffset) const { }; |
| 1178 | 1178 |
| 1179 virtual PaintInvalidationReason paintInvalidationReason(const LayoutBoxModel
Object& paintInvalidationContainer, | 1179 virtual PaintInvalidationReason paintInvalidationReason(const LayoutBoxModel
Object& paintInvalidationContainer, |
| 1180 const LayoutRect& oldPaintInvalidationRect, const LayoutPoint& oldPositi
onFromPaintInvalidationBacking, | 1180 const LayoutRect& oldPaintInvalidationRect, const LayoutPoint& oldPositi
onFromPaintInvalidationBacking, |
| 1181 const LayoutRect& newPaintInvalidationRect, const LayoutPoint& newPositi
onFromPaintInvalidationBacking) const; | 1181 const LayoutRect& newPaintInvalidationRect, const LayoutPoint& newPositi
onFromPaintInvalidationBacking) const; |
| 1182 virtual void incrementallyInvalidatePaint(const LayoutBoxModelObject& paintI
nvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds,
const LayoutPoint& positionFromPaintInvalidationBacking); | 1182 virtual void incrementallyInvalidatePaint(const LayoutBoxModelObject& paintI
nvalidationContainer, const LayoutRect& oldBounds, const LayoutRect& newBounds,
const LayoutPoint& positionFromPaintInvalidationBacking); |
| 1183 void fullyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationConta
iner, PaintInvalidationReason, const LayoutRect& oldBounds, const LayoutRect& ne
wBounds); | 1183 void fullyInvalidatePaint(const LayoutBoxModelObject& paintInvalidationConta
iner, PaintInvalidationReason, const LayoutRect& oldBounds, const LayoutRect& ne
wBounds); |
| 1184 | 1184 |
| 1185 virtual bool hasNonCompositedScrollbars() const { return false; } | 1185 virtual bool hasNonCompositedScrollbars() const { return false; } |
| 1186 | 1186 |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1235 Color selectionColor(int colorProperty) const; | 1235 Color selectionColor(int colorProperty) const; |
| 1236 | 1236 |
| 1237 void removeShapeImageClient(ShapeValue*); | 1237 void removeShapeImageClient(ShapeValue*); |
| 1238 | 1238 |
| 1239 #if ENABLE(ASSERT) | 1239 #if ENABLE(ASSERT) |
| 1240 void checkBlockPositionedObjectsNeedLayout(); | 1240 void checkBlockPositionedObjectsNeedLayout(); |
| 1241 #endif | 1241 #endif |
| 1242 | 1242 |
| 1243 bool isTextOrSVGChild() const { return isText() || (isSVG() && !isSVGRoot())
; } | 1243 bool isTextOrSVGChild() const { return isText() || (isSVG() && !isSVGRoot())
; } |
| 1244 | 1244 |
| 1245 static bool isAllowedToModifyRenderTreeStructure(Document&); | 1245 static bool isAllowedToModifyLayoutTreeStructure(Document&); |
| 1246 | 1246 |
| 1247 const LayoutBoxModelObject* invalidatePaintRectangleInternal(const LayoutRec
t&) const; | 1247 const LayoutBoxModelObject* invalidatePaintRectangleInternal(const LayoutRec
t&) const; |
| 1248 | 1248 |
| 1249 RefPtr<ComputedStyle> m_style; | 1249 RefPtr<ComputedStyle> m_style; |
| 1250 | 1250 |
| 1251 // Oilpan: raw pointer back to the owning Node is considered safe. | 1251 // Oilpan: raw pointer back to the owning Node is considered safe. |
| 1252 Node* m_node; | 1252 Node* m_node; |
| 1253 | 1253 |
| 1254 LayoutObject* m_parent; | 1254 LayoutObject* m_parent; |
| 1255 LayoutObject* m_previous; | 1255 LayoutObject* m_previous; |
| (...skipping 157 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1413 void setChildNeedsOverflowRecalcAfterStyleChange(bool b) { m_bitfields.setCh
ildNeedsOverflowRecalcAfterStyleChange(b); } | 1413 void setChildNeedsOverflowRecalcAfterStyleChange(bool b) { m_bitfields.setCh
ildNeedsOverflowRecalcAfterStyleChange(b); } |
| 1414 | 1414 |
| 1415 private: | 1415 private: |
| 1416 // Store state between styleWillChange and styleDidChange | 1416 // Store state between styleWillChange and styleDidChange |
| 1417 static bool s_affectsParentBlock; | 1417 static bool s_affectsParentBlock; |
| 1418 | 1418 |
| 1419 // This stores the paint invalidation rect from the previous frame. | 1419 // This stores the paint invalidation rect from the previous frame. |
| 1420 LayoutRect m_previousPaintInvalidationRect; | 1420 LayoutRect m_previousPaintInvalidationRect; |
| 1421 | 1421 |
| 1422 // This stores the position in the paint invalidation backing's coordinate. | 1422 // This stores the position in the paint invalidation backing's coordinate. |
| 1423 // It is used to detect renderer shifts that forces a full invalidation. | 1423 // It is used to detect layoutObject shifts that forces a full invalidation. |
| 1424 LayoutPoint m_previousPositionFromPaintInvalidationBacking; | 1424 LayoutPoint m_previousPositionFromPaintInvalidationBacking; |
| 1425 | 1425 |
| 1426 static unsigned s_instanceCount; | 1426 static unsigned s_instanceCount; |
| 1427 }; | 1427 }; |
| 1428 | 1428 |
| 1429 // FIXME: remove this once the render object lifecycle ASSERTS are no longer hit
. | 1429 // FIXME: remove this once the layout object lifecycle ASSERTS are no longer hit
. |
| 1430 class DeprecatedDisableModifyRenderTreeStructureAsserts { | 1430 class DeprecatedDisableModifyLayoutTreeStructureAsserts { |
| 1431 WTF_MAKE_NONCOPYABLE(DeprecatedDisableModifyRenderTreeStructureAsserts); | 1431 WTF_MAKE_NONCOPYABLE(DeprecatedDisableModifyLayoutTreeStructureAsserts); |
| 1432 public: | 1432 public: |
| 1433 DeprecatedDisableModifyRenderTreeStructureAsserts(); | 1433 DeprecatedDisableModifyLayoutTreeStructureAsserts(); |
| 1434 | 1434 |
| 1435 static bool canModifyRenderTreeStateInAnyState(); | 1435 static bool canModifyLayoutTreeStateInAnyState(); |
| 1436 | 1436 |
| 1437 private: | 1437 private: |
| 1438 TemporaryChange<bool> m_disabler; | 1438 TemporaryChange<bool> m_disabler; |
| 1439 }; | 1439 }; |
| 1440 | 1440 |
| 1441 // FIXME: We should not allow paint invalidation out of paint invalidation state
. crbug.com/457415 | 1441 // FIXME: We should not allow paint invalidation out of paint invalidation state
. crbug.com/457415 |
| 1442 // Remove this once we fix the bug. | 1442 // Remove this once we fix the bug. |
| 1443 class DisablePaintInvalidationStateAsserts { | 1443 class DisablePaintInvalidationStateAsserts { |
| 1444 WTF_MAKE_NONCOPYABLE(DisablePaintInvalidationStateAsserts); | 1444 WTF_MAKE_NONCOPYABLE(DisablePaintInvalidationStateAsserts); |
| 1445 public: | 1445 public: |
| (...skipping 98 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1544 inline bool LayoutObject::preservesNewline() const | 1544 inline bool LayoutObject::preservesNewline() const |
| 1545 { | 1545 { |
| 1546 if (isSVGInlineText()) | 1546 if (isSVGInlineText()) |
| 1547 return false; | 1547 return false; |
| 1548 | 1548 |
| 1549 return style()->preserveNewline(); | 1549 return style()->preserveNewline(); |
| 1550 } | 1550 } |
| 1551 | 1551 |
| 1552 inline bool LayoutObject::layerCreationAllowedForSubtree() const | 1552 inline bool LayoutObject::layerCreationAllowedForSubtree() const |
| 1553 { | 1553 { |
| 1554 LayoutObject* parentRenderer = parent(); | 1554 LayoutObject* parentLayoutObject = parent(); |
| 1555 while (parentRenderer) { | 1555 while (parentLayoutObject) { |
| 1556 if (parentRenderer->isSVGHiddenContainer()) | 1556 if (parentLayoutObject->isSVGHiddenContainer()) |
| 1557 return false; | 1557 return false; |
| 1558 parentRenderer = parentRenderer->parent(); | 1558 parentLayoutObject = parentLayoutObject->parent(); |
| 1559 } | 1559 } |
| 1560 | 1560 |
| 1561 return true; | 1561 return true; |
| 1562 } | 1562 } |
| 1563 | 1563 |
| 1564 inline void LayoutObject::setSelectionStateIfNeeded(SelectionState state) | 1564 inline void LayoutObject::setSelectionStateIfNeeded(SelectionState state) |
| 1565 { | 1565 { |
| 1566 if (selectionState() == state) | 1566 if (selectionState() == state) |
| 1567 return; | 1567 return; |
| 1568 | 1568 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 1595 } | 1595 } |
| 1596 return m_bitfields.boxDecorationBackgroundState() == HasBoxDecorationBackgro
undKnownToBeObscured; | 1596 return m_bitfields.boxDecorationBackgroundState() == HasBoxDecorationBackgro
undKnownToBeObscured; |
| 1597 } | 1597 } |
| 1598 | 1598 |
| 1599 inline void makeMatrixRenderable(TransformationMatrix& matrix, bool has3DRenderi
ng) | 1599 inline void makeMatrixRenderable(TransformationMatrix& matrix, bool has3DRenderi
ng) |
| 1600 { | 1600 { |
| 1601 if (!has3DRendering) | 1601 if (!has3DRendering) |
| 1602 matrix.makeAffine(); | 1602 matrix.makeAffine(); |
| 1603 } | 1603 } |
| 1604 | 1604 |
| 1605 inline int adjustForAbsoluteZoom(int value, LayoutObject* renderer) | 1605 inline int adjustForAbsoluteZoom(int value, LayoutObject* layoutObject) |
| 1606 { | 1606 { |
| 1607 return adjustForAbsoluteZoom(value, renderer->style()); | 1607 return adjustForAbsoluteZoom(value, layoutObject->style()); |
| 1608 } | 1608 } |
| 1609 | 1609 |
| 1610 inline double adjustDoubleForAbsoluteZoom(double value, LayoutObject& renderer) | 1610 inline double adjustDoubleForAbsoluteZoom(double value, LayoutObject& layoutObje
ct) |
| 1611 { | 1611 { |
| 1612 ASSERT(renderer.style()); | 1612 ASSERT(layoutObject.style()); |
| 1613 return adjustDoubleForAbsoluteZoom(value, *renderer.style()); | 1613 return adjustDoubleForAbsoluteZoom(value, *layoutObject.style()); |
| 1614 } | 1614 } |
| 1615 | 1615 |
| 1616 inline LayoutUnit adjustLayoutUnitForAbsoluteZoom(LayoutUnit value, LayoutObject
& renderer) | 1616 inline LayoutUnit adjustLayoutUnitForAbsoluteZoom(LayoutUnit value, LayoutObject
& layoutObject) |
| 1617 { | 1617 { |
| 1618 ASSERT(renderer.style()); | 1618 ASSERT(layoutObject.style()); |
| 1619 return adjustLayoutUnitForAbsoluteZoom(value, *renderer.style()); | 1619 return adjustLayoutUnitForAbsoluteZoom(value, *layoutObject.style()); |
| 1620 } | 1620 } |
| 1621 | 1621 |
| 1622 inline void adjustFloatQuadForAbsoluteZoom(FloatQuad& quad, LayoutObject& render
er) | 1622 inline void adjustFloatQuadForAbsoluteZoom(FloatQuad& quad, LayoutObject& layout
Object) |
| 1623 { | 1623 { |
| 1624 float zoom = renderer.style()->effectiveZoom(); | 1624 float zoom = layoutObject.style()->effectiveZoom(); |
| 1625 if (zoom != 1) | 1625 if (zoom != 1) |
| 1626 quad.scale(1 / zoom, 1 / zoom); | 1626 quad.scale(1 / zoom, 1 / zoom); |
| 1627 } | 1627 } |
| 1628 | 1628 |
| 1629 inline void adjustFloatRectForAbsoluteZoom(FloatRect& rect, LayoutObject& render
er) | 1629 inline void adjustFloatRectForAbsoluteZoom(FloatRect& rect, LayoutObject& layout
Object) |
| 1630 { | 1630 { |
| 1631 float zoom = renderer.style()->effectiveZoom(); | 1631 float zoom = layoutObject.style()->effectiveZoom(); |
| 1632 if (zoom != 1) | 1632 if (zoom != 1) |
| 1633 rect.scale(1 / zoom, 1 / zoom); | 1633 rect.scale(1 / zoom, 1 / zoom); |
| 1634 } | 1634 } |
| 1635 | 1635 |
| 1636 inline double adjustScrollForAbsoluteZoom(double value, LayoutObject& renderer) | 1636 inline double adjustScrollForAbsoluteZoom(double value, LayoutObject& layoutObje
ct) |
| 1637 { | 1637 { |
| 1638 ASSERT(renderer.style()); | 1638 ASSERT(layoutObject.style()); |
| 1639 return adjustScrollForAbsoluteZoom(value, *renderer.style()); | 1639 return adjustScrollForAbsoluteZoom(value, *layoutObject.style()); |
| 1640 } | 1640 } |
| 1641 | 1641 |
| 1642 #define DEFINE_LAYOUT_OBJECT_TYPE_CASTS(thisType, predicate) \ | 1642 #define DEFINE_LAYOUT_OBJECT_TYPE_CASTS(thisType, predicate) \ |
| 1643 DEFINE_TYPE_CASTS(thisType, LayoutObject, object, object->predicate, object.
predicate) | 1643 DEFINE_TYPE_CASTS(thisType, LayoutObject, object, object->predicate, object.
predicate) |
| 1644 | 1644 |
| 1645 } // namespace blink | 1645 } // namespace blink |
| 1646 | 1646 |
| 1647 #ifndef NDEBUG | 1647 #ifndef NDEBUG |
| 1648 // Outside the WebCore namespace for ease of invocation from gdb. | 1648 // Outside the WebCore namespace for ease of invocation from gdb. |
| 1649 void showTree(const blink::LayoutObject*); | 1649 void showTree(const blink::LayoutObject*); |
| 1650 void showLineTree(const blink::LayoutObject*); | 1650 void showLineTree(const blink::LayoutObject*); |
| 1651 void showLayoutTree(const blink::LayoutObject* object1); | 1651 void showLayoutTree(const blink::LayoutObject* object1); |
| 1652 // We don't make object2 an optional parameter so that showLayoutTree | 1652 // We don't make object2 an optional parameter so that showLayoutTree |
| 1653 // can be called from gdb easily. | 1653 // can be called from gdb easily. |
| 1654 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec
t* object2); | 1654 void showLayoutTree(const blink::LayoutObject* object1, const blink::LayoutObjec
t* object2); |
| 1655 | 1655 |
| 1656 #endif | 1656 #endif |
| 1657 | 1657 |
| 1658 #endif // LayoutObject_h | 1658 #endif // LayoutObject_h |
| OLD | NEW |