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 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) | 4 * (C) 2005 Allan Sandfeld Jensen (kde@carewolf.com) |
5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) | 5 * (C) 2005, 2006 Samuel Weinig (sam.weinig@gmail.com) |
6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. | 6 * Copyright (C) 2005, 2006, 2007, 2008, 2009, 2010 Apple Inc. All rights reserv
ed. |
7 * Copyright (C) 2013 Adobe Systems Incorporated. All rights reserved. | 7 * Copyright (C) 2013 Adobe Systems Incorporated. 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 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
112 | 112 |
113 return NoPaintLayer; | 113 return NoPaintLayer; |
114 } | 114 } |
115 | 115 |
116 void LayoutBox::willBeDestroyed() | 116 void LayoutBox::willBeDestroyed() |
117 { | 117 { |
118 clearOverrideSize(); | 118 clearOverrideSize(); |
119 clearContainingBlockOverrideSize(); | 119 clearContainingBlockOverrideSize(); |
120 clearExtraInlineAndBlockOffests(); | 120 clearExtraInlineAndBlockOffests(); |
121 | 121 |
122 LayoutBlock::removePercentHeightDescendantIfNeeded(this); | 122 if (isOutOfFlowPositioned()) |
| 123 LayoutBlock::removePositionedObject(this); |
| 124 removeFromPercentHeightContainer(); |
123 | 125 |
124 ShapeOutsideInfo::removeInfo(*this); | 126 ShapeOutsideInfo::removeInfo(*this); |
125 | 127 |
126 LayoutBoxModelObject::willBeDestroyed(); | 128 LayoutBoxModelObject::willBeDestroyed(); |
127 } | 129 } |
128 | 130 |
129 void LayoutBox::removeFloatingOrPositionedChildFromBlockLists() | 131 void LayoutBox::removeFloatingOrPositionedChildFromBlockLists() |
130 { | 132 { |
131 ASSERT(isFloatingOrOutOfFlowPositioned()); | 133 ASSERT(isFloatingOrOutOfFlowPositioned()); |
132 | 134 |
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
201 { | 203 { |
202 // Horizontal writing mode definition is updated in LayoutBoxModelObject::up
dateFromStyle, | 204 // Horizontal writing mode definition is updated in LayoutBoxModelObject::up
dateFromStyle, |
203 // (as part of the LayoutBoxModelObject::styleDidChange call below). So, we
can safely cache the horizontal | 205 // (as part of the LayoutBoxModelObject::styleDidChange call below). So, we
can safely cache the horizontal |
204 // writing mode value before style change here. | 206 // writing mode value before style change here. |
205 bool oldHorizontalWritingMode = isHorizontalWritingMode(); | 207 bool oldHorizontalWritingMode = isHorizontalWritingMode(); |
206 | 208 |
207 LayoutBoxModelObject::styleDidChange(diff, oldStyle); | 209 LayoutBoxModelObject::styleDidChange(diff, oldStyle); |
208 | 210 |
209 const ComputedStyle& newStyle = styleRef(); | 211 const ComputedStyle& newStyle = styleRef(); |
210 if (needsLayout() && oldStyle) | 212 if (needsLayout() && oldStyle) |
211 LayoutBlock::removePercentHeightDescendantIfNeeded(this); | 213 removeFromPercentHeightContainer(); |
212 | 214 |
213 if (LayoutBlock::hasPercentHeightContainerMap() && slowFirstChild() | 215 if (oldHorizontalWritingMode != isHorizontalWritingMode()) |
214 && oldHorizontalWritingMode != isHorizontalWritingMode()) | 216 clearPercentHeightDescendants(); |
215 LayoutBlock::clearPercentHeightDescendantsFrom(this); | |
216 | 217 |
217 // If our zoom factor changes and we have a defined scrollLeft/Top, we need
to adjust that value into the | 218 // If our zoom factor changes and we have a defined scrollLeft/Top, we need
to adjust that value into the |
218 // new zoomed coordinate space. | 219 // new zoomed coordinate space. |
219 if (hasOverflowClip() && oldStyle && oldStyle->effectiveZoom() != newStyle.e
ffectiveZoom() && layer()) { | 220 if (hasOverflowClip() && oldStyle && oldStyle->effectiveZoom() != newStyle.e
ffectiveZoom() && layer()) { |
220 if (int left = layer()->scrollableArea()->scrollXOffset()) { | 221 if (int left = layer()->scrollableArea()->scrollXOffset()) { |
221 left = (left / oldStyle->effectiveZoom()) * newStyle.effectiveZoom()
; | 222 left = (left / oldStyle->effectiveZoom()) * newStyle.effectiveZoom()
; |
222 layer()->scrollableArea()->scrollToXOffset(left); | 223 layer()->scrollableArea()->scrollToXOffset(left); |
223 } | 224 } |
224 if (int top = layer()->scrollableArea()->scrollYOffset()) { | 225 if (int top = layer()->scrollableArea()->scrollYOffset()) { |
225 top = (top / oldStyle->effectiveZoom()) * newStyle.effectiveZoom(); | 226 top = (top / oldStyle->effectiveZoom()) * newStyle.effectiveZoom(); |
(...skipping 4658 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4884 return ShapeOutsideInfo::isEnabledFor(*this) ? ShapeOutsideInfo::info(*this)
: nullptr; | 4885 return ShapeOutsideInfo::isEnabledFor(*this) ? ShapeOutsideInfo::info(*this)
: nullptr; |
4885 } | 4886 } |
4886 | 4887 |
4887 void LayoutBox::clearPreviousPaintInvalidationRects() | 4888 void LayoutBox::clearPreviousPaintInvalidationRects() |
4888 { | 4889 { |
4889 LayoutBoxModelObject::clearPreviousPaintInvalidationRects(); | 4890 LayoutBoxModelObject::clearPreviousPaintInvalidationRects(); |
4890 if (PaintLayerScrollableArea* scrollableArea = this->scrollableArea()) | 4891 if (PaintLayerScrollableArea* scrollableArea = this->scrollableArea()) |
4891 scrollableArea->clearPreviousPaintInvalidationRects(); | 4892 scrollableArea->clearPreviousPaintInvalidationRects(); |
4892 } | 4893 } |
4893 | 4894 |
| 4895 void LayoutBox::setPercentHeightContainer(LayoutBlock* container) |
| 4896 { |
| 4897 ASSERT(!container || !percentHeightContainer()); |
| 4898 if (!container && !m_rareData) |
| 4899 return; |
| 4900 ensureRareData().m_percentHeightContainer = container; |
| 4901 } |
| 4902 |
| 4903 void LayoutBox::removeFromPercentHeightContainer() |
| 4904 { |
| 4905 if (!percentHeightContainer()) |
| 4906 return; |
| 4907 |
| 4908 ASSERT(percentHeightContainer()->hasPercentHeightDescendant(this)); |
| 4909 percentHeightContainer()->removePercentHeightDescendant(this); |
| 4910 // The above call should call this object's setPercentHeightContainer(nullpt
r). |
| 4911 ASSERT(!percentHeightContainer()); |
| 4912 } |
| 4913 |
| 4914 void LayoutBox::clearPercentHeightDescendants() |
| 4915 { |
| 4916 for (LayoutObject* curr = slowFirstChild(); curr; curr = curr->nextInPreOrde
r(this)) { |
| 4917 if (curr->isBox()) |
| 4918 toLayoutBox(curr)->removeFromPercentHeightContainer(); |
| 4919 } |
| 4920 } |
| 4921 |
4894 } // namespace blink | 4922 } // namespace blink |
OLD | NEW |