| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) | 2 * Copyright (C) 1999 Lars Knoll (knoll@kde.org) |
| 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) | 3 * (C) 1999 Antti Koivisto (koivisto@kde.org) |
| 4 * Copyright (C) 2003, 2006, 2007, 2009 Apple Inc. All rights reserved. | 4 * Copyright (C) 2003, 2006, 2007, 2009 Apple Inc. All rights reserved. |
| 5 * Copyright (C) 2010 Google Inc. All rights reserved. | 5 * Copyright (C) 2010 Google Inc. All rights reserved. |
| 6 * | 6 * |
| 7 * This library is free software; you can redistribute it and/or | 7 * This library is free software; you can redistribute it and/or |
| 8 * modify it under the terms of the GNU Library General Public | 8 * modify it under the terms of the GNU Library General Public |
| 9 * License as published by the Free Software Foundation; either | 9 * License as published by the Free Software Foundation; either |
| 10 * version 2 of the License, or (at your option) any later version. | 10 * version 2 of the License, or (at your option) any later version. |
| (...skipping 127 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 138 // This is the only way layers should ever be destroyed. | 138 // This is the only way layers should ever be destroyed. |
| 139 void destroyLayer(); | 139 void destroyLayer(); |
| 140 | 140 |
| 141 LayoutSize relativePositionOffset() const; | 141 LayoutSize relativePositionOffset() const; |
| 142 LayoutSize relativePositionLogicalOffset() const { | 142 LayoutSize relativePositionLogicalOffset() const { |
| 143 return style()->isHorizontalWritingMode() | 143 return style()->isHorizontalWritingMode() |
| 144 ? relativePositionOffset() | 144 ? relativePositionOffset() |
| 145 : relativePositionOffset().transposedSize(); | 145 : relativePositionOffset().transposedSize(); |
| 146 } | 146 } |
| 147 | 147 |
| 148 // Populates StickyPositionConstraints, setting the sticky box rect, containin
g block rect and updating | 148 // Populates StickyPositionConstraints, setting the sticky box rect, |
| 149 // the constraint offsets according to the available space. | 149 // containing block rect and updating the constraint offsets according to the |
| 150 // available space. |
| 150 FloatRect computeStickyConstrainingRect() const; | 151 FloatRect computeStickyConstrainingRect() const; |
| 151 void updateStickyPositionConstraints() const; | 152 void updateStickyPositionConstraints() const; |
| 152 LayoutSize stickyPositionOffset() const; | 153 LayoutSize stickyPositionOffset() const; |
| 153 | 154 |
| 154 LayoutSize offsetForInFlowPosition() const; | 155 LayoutSize offsetForInFlowPosition() const; |
| 155 | 156 |
| 156 // IE extensions. Used to calculate offsetWidth/Height. Overridden by inlines
(LayoutFlow) | 157 // IE extensions. Used to calculate offsetWidth/Height. Overridden by inlines |
| 157 // to return the remaining width on a given line (and the height of a single l
ine). | 158 // (LayoutInline) to return the remaining width on a given line (and the heigh
t |
| 159 // of a single line). |
| 158 virtual LayoutUnit offsetLeft(const Element*) const; | 160 virtual LayoutUnit offsetLeft(const Element*) const; |
| 159 virtual LayoutUnit offsetTop(const Element*) const; | 161 virtual LayoutUnit offsetTop(const Element*) const; |
| 160 virtual LayoutUnit offsetWidth() const = 0; | 162 virtual LayoutUnit offsetWidth() const = 0; |
| 161 virtual LayoutUnit offsetHeight() const = 0; | 163 virtual LayoutUnit offsetHeight() const = 0; |
| 162 | 164 |
| 163 int pixelSnappedOffsetLeft(const Element* parent) const { | 165 int pixelSnappedOffsetLeft(const Element* parent) const { |
| 164 return roundToInt(offsetLeft(parent)); | 166 return roundToInt(offsetLeft(parent)); |
| 165 } | 167 } |
| 166 int pixelSnappedOffsetTop(const Element* parent) const { | 168 int pixelSnappedOffsetTop(const Element* parent) const { |
| 167 return roundToInt(offsetTop(parent)); | 169 return roundToInt(offsetTop(parent)); |
| 168 } | 170 } |
| 169 virtual int pixelSnappedOffsetWidth(const Element*) const; | 171 virtual int pixelSnappedOffsetWidth(const Element*) const; |
| 170 virtual int pixelSnappedOffsetHeight(const Element*) const; | 172 virtual int pixelSnappedOffsetHeight(const Element*) const; |
| 171 | 173 |
| 172 bool hasSelfPaintingLayer() const; | 174 bool hasSelfPaintingLayer() const; |
| 173 PaintLayer* layer() const { return m_layer.get(); } | 175 PaintLayer* layer() const { return m_layer.get(); } |
| 174 PaintLayerScrollableArea* getScrollableArea() const; | 176 PaintLayerScrollableArea* getScrollableArea() const; |
| 175 | 177 |
| 176 virtual void updateFromStyle(); | 178 virtual void updateFromStyle(); |
| 177 | 179 |
| 178 // The type of PaintLayer to instantiate. | 180 // The type of PaintLayer to instantiate. Any value returned from this |
| 179 // Any value returned from this function other than NoPaintLayer | 181 // function other than NoPaintLayer will populate |m_layer|. |
| 180 // will populate |m_layer|. | |
| 181 virtual PaintLayerType layerTypeRequired() const = 0; | 182 virtual PaintLayerType layerTypeRequired() const = 0; |
| 182 | 183 |
| 183 // This will work on inlines to return the bounding box of all of the lines' b
order boxes. | 184 // This will work on inlines to return the bounding box of all of the lines' |
| 185 // border boxes. |
| 184 virtual IntRect borderBoundingBox() const = 0; | 186 virtual IntRect borderBoundingBox() const = 0; |
| 185 | 187 |
| 186 virtual LayoutRect visualOverflowRect() const = 0; | 188 virtual LayoutRect visualOverflowRect() const = 0; |
| 187 | 189 |
| 188 // Checks if this box, or any of it's descendants, or any of it's continuation
s, | 190 // Checks if this box, or any of it's descendants, or any of it's |
| 189 // will take up space in the layout of the page. | 191 // continuations, will take up space in the layout of the page. |
| 190 bool hasNonEmptyLayoutSize() const; | 192 bool hasNonEmptyLayoutSize() const; |
| 191 bool usesCompositedScrolling() const; | 193 bool usesCompositedScrolling() const; |
| 192 | 194 |
| 193 // Checks if all of the background's layers can be painted as locally | 195 // Checks if all of the background's layers can be painted as locally |
| 194 // attached. | 196 // attached. |
| 195 bool hasLocalEquivalentBackground() const; | 197 bool hasLocalEquivalentBackground() const; |
| 196 | 198 |
| 197 // These return the CSS computed padding values. | 199 // These return the CSS computed padding values. |
| 198 LayoutUnit computedCSSPaddingTop() const { | 200 LayoutUnit computedCSSPaddingTop() const { |
| 199 return computedCSSPadding(style()->paddingTop()); | 201 return computedCSSPadding(style()->paddingTop()); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 221 } | 223 } |
| 222 LayoutUnit computedCSSPaddingOver() const { | 224 LayoutUnit computedCSSPaddingOver() const { |
| 223 return computedCSSPadding(style()->paddingOver()); | 225 return computedCSSPadding(style()->paddingOver()); |
| 224 } | 226 } |
| 225 LayoutUnit computedCSSPaddingUnder() const { | 227 LayoutUnit computedCSSPaddingUnder() const { |
| 226 return computedCSSPadding(style()->paddingUnder()); | 228 return computedCSSPadding(style()->paddingUnder()); |
| 227 } | 229 } |
| 228 | 230 |
| 229 // These functions are used during layout. | 231 // These functions are used during layout. |
| 230 // - Table cells override them to include the intrinsic padding (see | 232 // - Table cells override them to include the intrinsic padding (see |
| 231 // explanations in LayoutTableCell). | 233 // explanations in LayoutTableCell). |
| 232 // - Table override them to exclude padding with collapsing borders. | 234 // - Table override them to exclude padding with collapsing borders. |
| 233 virtual LayoutUnit paddingTop() const { return computedCSSPaddingTop(); } | 235 virtual LayoutUnit paddingTop() const { return computedCSSPaddingTop(); } |
| 234 virtual LayoutUnit paddingBottom() const { | 236 virtual LayoutUnit paddingBottom() const { |
| 235 return computedCSSPaddingBottom(); | 237 return computedCSSPaddingBottom(); |
| 236 } | 238 } |
| 237 virtual LayoutUnit paddingLeft() const { return computedCSSPaddingLeft(); } | 239 virtual LayoutUnit paddingLeft() const { return computedCSSPaddingLeft(); } |
| 238 virtual LayoutUnit paddingRight() const { return computedCSSPaddingRight(); } | 240 virtual LayoutUnit paddingRight() const { return computedCSSPaddingRight(); } |
| 239 virtual LayoutUnit paddingBefore() const { | 241 virtual LayoutUnit paddingBefore() const { |
| 240 return computedCSSPaddingBefore(); | 242 return computedCSSPaddingBefore(); |
| 241 } | 243 } |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 387 | 389 |
| 388 // Returns true if the background is painted opaque in the given rect. | 390 // Returns true if the background is painted opaque in the given rect. |
| 389 // The query rect is given in local coordinate system. | 391 // The query rect is given in local coordinate system. |
| 390 virtual bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect&) const { | 392 virtual bool backgroundIsKnownToBeOpaqueInRect(const LayoutRect&) const { |
| 391 return false; | 393 return false; |
| 392 } | 394 } |
| 393 | 395 |
| 394 void invalidateTreeIfNeeded(const PaintInvalidationState&) override; | 396 void invalidateTreeIfNeeded(const PaintInvalidationState&) override; |
| 395 | 397 |
| 396 // http://www.w3.org/TR/css3-background/#body-background | 398 // http://www.w3.org/TR/css3-background/#body-background |
| 397 // <html> root element with no background steals background from its first <bo
dy> child. | 399 // <html> root element with no background steals background from its first |
| 398 // The used background for such body element should be the initial value. (i.e
. transparent) | 400 // <body> child. The used background for such body element should be the |
| 401 // initial value. (i.e. transparent) |
| 399 bool backgroundStolenForBeingBody( | 402 bool backgroundStolenForBeingBody( |
| 400 const ComputedStyle* rootElementStyle = nullptr) const; | 403 const ComputedStyle* rootElementStyle = nullptr) const; |
| 401 | 404 |
| 402 protected: | 405 protected: |
| 403 void willBeDestroyed() override; | 406 void willBeDestroyed() override; |
| 404 | 407 |
| 405 LayoutPoint adjustedPositionRelativeTo(const LayoutPoint&, | 408 LayoutPoint adjustedPositionRelativeTo(const LayoutPoint&, |
| 406 const Element*) const; | 409 const Element*) const; |
| 407 | 410 |
| 408 // Returns the continuation associated with |this|. | 411 // Returns the continuation associated with |this|. |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 443 const PaintLayer*, | 446 const PaintLayer*, |
| 444 const LayoutPoint&, | 447 const LayoutPoint&, |
| 445 const LayoutRect&) const override; | 448 const LayoutRect&) const override; |
| 446 | 449 |
| 447 void styleWillChange(StyleDifference, const ComputedStyle& newStyle) override; | 450 void styleWillChange(StyleDifference, const ComputedStyle& newStyle) override; |
| 448 void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override; | 451 void styleDidChange(StyleDifference, const ComputedStyle* oldStyle) override; |
| 449 | 452 |
| 450 void invalidateStickyConstraints(); | 453 void invalidateStickyConstraints(); |
| 451 | 454 |
| 452 public: | 455 public: |
| 453 // These functions are only used internally to manipulate the layout tree stru
cture via remove/insert/appendChildNode. | 456 // These functions are only used internally to manipulate the layout tree |
| 454 // Since they are typically called only to move objects around within anonymou
s blocks (which only have layers in | 457 // structure via remove/insert/appendChildNode. |
| 455 // the case of column spans), the default for fullRemoveInsert is false rather
than true. | 458 // Since they are typically called only to move objects around within |
| 459 // anonymous blocks (which only have layers in the case of column spans), the |
| 460 // default for fullRemoveInsert is false rather than true. |
| 456 void moveChildTo(LayoutBoxModelObject* toBoxModelObject, | 461 void moveChildTo(LayoutBoxModelObject* toBoxModelObject, |
| 457 LayoutObject* child, | 462 LayoutObject* child, |
| 458 LayoutObject* beforeChild, | 463 LayoutObject* beforeChild, |
| 459 bool fullRemoveInsert = false); | 464 bool fullRemoveInsert = false); |
| 460 void moveChildTo(LayoutBoxModelObject* toBoxModelObject, | 465 void moveChildTo(LayoutBoxModelObject* toBoxModelObject, |
| 461 LayoutObject* child, | 466 LayoutObject* child, |
| 462 bool fullRemoveInsert = false) { | 467 bool fullRemoveInsert = false) { |
| 463 moveChildTo(toBoxModelObject, child, 0, fullRemoveInsert); | 468 moveChildTo(toBoxModelObject, child, 0, fullRemoveInsert); |
| 464 } | 469 } |
| 465 void moveAllChildrenTo(LayoutBoxModelObject* toBoxModelObject, | 470 void moveAllChildrenTo(LayoutBoxModelObject* toBoxModelObject, |
| 466 bool fullRemoveInsert = false) { | 471 bool fullRemoveInsert = false) { |
| 467 moveAllChildrenTo(toBoxModelObject, 0, fullRemoveInsert); | 472 moveAllChildrenTo(toBoxModelObject, 0, fullRemoveInsert); |
| 468 } | 473 } |
| 469 void moveAllChildrenTo(LayoutBoxModelObject* toBoxModelObject, | 474 void moveAllChildrenTo(LayoutBoxModelObject* toBoxModelObject, |
| 470 LayoutObject* beforeChild, | 475 LayoutObject* beforeChild, |
| 471 bool fullRemoveInsert = false) { | 476 bool fullRemoveInsert = false) { |
| 472 moveChildrenTo(toBoxModelObject, slowFirstChild(), 0, beforeChild, | 477 moveChildrenTo(toBoxModelObject, slowFirstChild(), 0, beforeChild, |
| 473 fullRemoveInsert); | 478 fullRemoveInsert); |
| 474 } | 479 } |
| 475 // Move all of the kids from |startChild| up to but excluding |endChild|. 0 ca
n be passed as the |endChild| to denote | 480 // Move all of the kids from |startChild| up to but excluding |endChild|. 0 |
| 476 // that all the kids from |startChild| onwards should be moved. | 481 // can be passed as the |endChild| to denote that all the kids from |
| 482 // |startChild| onwards should be moved. |
| 477 void moveChildrenTo(LayoutBoxModelObject* toBoxModelObject, | 483 void moveChildrenTo(LayoutBoxModelObject* toBoxModelObject, |
| 478 LayoutObject* startChild, | 484 LayoutObject* startChild, |
| 479 LayoutObject* endChild, | 485 LayoutObject* endChild, |
| 480 bool fullRemoveInsert = false) { | 486 bool fullRemoveInsert = false) { |
| 481 moveChildrenTo(toBoxModelObject, startChild, endChild, 0, fullRemoveInsert); | 487 moveChildrenTo(toBoxModelObject, startChild, endChild, 0, fullRemoveInsert); |
| 482 } | 488 } |
| 483 virtual void moveChildrenTo(LayoutBoxModelObject* toBoxModelObject, | 489 virtual void moveChildrenTo(LayoutBoxModelObject* toBoxModelObject, |
| 484 LayoutObject* startChild, | 490 LayoutObject* startChild, |
| 485 LayoutObject* endChild, | 491 LayoutObject* endChild, |
| 486 LayoutObject* beforeChild, | 492 LayoutObject* beforeChild, |
| 487 bool fullRemoveInsert = false); | 493 bool fullRemoveInsert = false); |
| 488 | 494 |
| 489 private: | 495 private: |
| 490 void createLayer(); | 496 void createLayer(); |
| 491 | 497 |
| 492 LayoutUnit computedCSSPadding(const Length&) const; | 498 LayoutUnit computedCSSPadding(const Length&) const; |
| 493 bool isBoxModelObject() const final { return true; } | 499 bool isBoxModelObject() const final { return true; } |
| 494 | 500 |
| 495 LayoutBoxModelObjectRareData& ensureRareData() { | 501 LayoutBoxModelObjectRareData& ensureRareData() { |
| 496 if (!m_rareData) | 502 if (!m_rareData) |
| 497 m_rareData = wrapUnique(new LayoutBoxModelObjectRareData()); | 503 m_rareData = wrapUnique(new LayoutBoxModelObjectRareData()); |
| 498 return *m_rareData.get(); | 504 return *m_rareData.get(); |
| 499 } | 505 } |
| 500 | 506 |
| 501 bool hasAutoHeightOrContainingBlockWithAutoHeight( | 507 bool hasAutoHeightOrContainingBlockWithAutoHeight( |
| 502 bool checkingContainingBlock) const; | 508 bool checkingContainingBlock) const; |
| 503 | 509 |
| 504 // The PaintLayer associated with this object. | 510 // The PaintLayer associated with this object. |m_layer| can be nullptr |
| 505 // |m_layer| can be nullptr depending on the return value of layerTypeRequired
(). | 511 // depending on the return value of layerTypeRequired(). |
| 506 std::unique_ptr<PaintLayer> m_layer; | 512 std::unique_ptr<PaintLayer> m_layer; |
| 507 | 513 |
| 508 std::unique_ptr<LayoutBoxModelObjectRareData> m_rareData; | 514 std::unique_ptr<LayoutBoxModelObjectRareData> m_rareData; |
| 509 }; | 515 }; |
| 510 | 516 |
| 511 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBoxModelObject, isBoxModelObject()); | 517 DEFINE_LAYOUT_OBJECT_TYPE_CASTS(LayoutBoxModelObject, isBoxModelObject()); |
| 512 | 518 |
| 513 } // namespace blink | 519 } // namespace blink |
| 514 | 520 |
| 515 #endif // LayoutBoxModelObject_h | 521 #endif // LayoutBoxModelObject_h |
| OLD | NEW |