| 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 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 71 | 71 |
| 72 namespace blink { | 72 namespace blink { |
| 73 | 73 |
| 74 using namespace HTMLNames; | 74 using namespace HTMLNames; |
| 75 | 75 |
| 76 // Used by flexible boxes when flexing this element and by table cells. | 76 // Used by flexible boxes when flexing this element and by table cells. |
| 77 typedef WTF::HashMap<const LayoutBox*, LayoutUnit> OverrideSizeMap; | 77 typedef WTF::HashMap<const LayoutBox*, LayoutUnit> OverrideSizeMap; |
| 78 | 78 |
| 79 // Used by grid elements to properly size their grid items. | 79 // Used by grid elements to properly size their grid items. |
| 80 // FIXME: Move these into LayoutBoxRareData. | 80 // FIXME: Move these into LayoutBoxRareData. |
| 81 static OverrideSizeMap* gOverrideContainingBlockLogicalHeightMap = 0; | 81 static OverrideSizeMap* gOverrideContainingBlockLogicalHeightMap = nullptr; |
| 82 static OverrideSizeMap* gOverrideContainingBlockLogicalWidthMap = 0; | 82 static OverrideSizeMap* gOverrideContainingBlockLogicalWidthMap = nullptr; |
| 83 static OverrideSizeMap* gExtraInlineOffsetMap = 0; | 83 static OverrideSizeMap* gExtraInlineOffsetMap = nullptr; |
| 84 static OverrideSizeMap* gExtraBlockOffsetMap = 0; | 84 static OverrideSizeMap* gExtraBlockOffsetMap = nullptr; |
| 85 | 85 |
| 86 | 86 |
| 87 // Size of border belt for autoscroll. When mouse pointer in border belt, | 87 // Size of border belt for autoscroll. When mouse pointer in border belt, |
| 88 // autoscroll is started. | 88 // autoscroll is started. |
| 89 static const int autoscrollBeltSize = 20; | 89 static const int autoscrollBeltSize = 20; |
| 90 static const unsigned backgroundObscurationTestMaxDepth = 4; | 90 static const unsigned backgroundObscurationTestMaxDepth = 4; |
| 91 | 91 |
| 92 static bool skipBodyBackground(const LayoutBox* bodyElementLayoutObject) | 92 static bool skipBodyBackground(const LayoutBox* bodyElementLayoutObject) |
| 93 { | 93 { |
| 94 ASSERT(bodyElementLayoutObject->isBody()); | 94 ASSERT(bodyElementLayoutObject->isBody()); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 } | 147 } |
| 148 | 148 |
| 149 void LayoutBox::removeFloatingOrPositionedChildFromBlockLists() | 149 void LayoutBox::removeFloatingOrPositionedChildFromBlockLists() |
| 150 { | 150 { |
| 151 ASSERT(isFloatingOrOutOfFlowPositioned()); | 151 ASSERT(isFloatingOrOutOfFlowPositioned()); |
| 152 | 152 |
| 153 if (documentBeingDestroyed()) | 153 if (documentBeingDestroyed()) |
| 154 return; | 154 return; |
| 155 | 155 |
| 156 if (isFloating()) { | 156 if (isFloating()) { |
| 157 LayoutBlockFlow* parentBlockFlow = 0; | 157 LayoutBlockFlow* parentBlockFlow = nullptr; |
| 158 for (LayoutObject* curr = parent(); curr && !curr->isLayoutView(); curr
= curr->parent()) { | 158 for (LayoutObject* curr = parent(); curr && !curr->isLayoutView(); curr
= curr->parent()) { |
| 159 if (curr->isLayoutBlockFlow()) { | 159 if (curr->isLayoutBlockFlow()) { |
| 160 LayoutBlockFlow* currBlockFlow = toLayoutBlockFlow(curr); | 160 LayoutBlockFlow* currBlockFlow = toLayoutBlockFlow(curr); |
| 161 if (!parentBlockFlow || currBlockFlow->containsFloat(this)) | 161 if (!parentBlockFlow || currBlockFlow->containsFloat(this)) |
| 162 parentBlockFlow = currBlockFlow; | 162 parentBlockFlow = currBlockFlow; |
| 163 } | 163 } |
| 164 } | 164 } |
| 165 | 165 |
| 166 if (parentBlockFlow) { | 166 if (parentBlockFlow) { |
| 167 parentBlockFlow->markSiblingsWithFloatsForLayout(this); | 167 parentBlockFlow->markSiblingsWithFloatsForLayout(this); |
| (...skipping 303 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 471 } | 471 } |
| 472 } | 472 } |
| 473 return false; | 473 return false; |
| 474 } | 474 } |
| 475 | 475 |
| 476 void LayoutBox::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignmen
t& alignX, const ScrollAlignment& alignY) | 476 void LayoutBox::scrollRectToVisible(const LayoutRect& rect, const ScrollAlignmen
t& alignX, const ScrollAlignment& alignY) |
| 477 { | 477 { |
| 478 // Presumably the same issue as in setScrollTop. See crbug.com/343132. | 478 // Presumably the same issue as in setScrollTop. See crbug.com/343132. |
| 479 DisableCompositingQueryAsserts disabler; | 479 DisableCompositingQueryAsserts disabler; |
| 480 | 480 |
| 481 LayoutBox* parentBox = 0; | 481 LayoutBox* parentBox = nullptr; |
| 482 LayoutRect newRect = rect; | 482 LayoutRect newRect = rect; |
| 483 | 483 |
| 484 bool restrictedByLineClamp = false; | 484 bool restrictedByLineClamp = false; |
| 485 if (parent()) { | 485 if (parent()) { |
| 486 parentBox = parent()->enclosingBox(); | 486 parentBox = parent()->enclosingBox(); |
| 487 restrictedByLineClamp = !parent()->style()->lineClamp().isNone(); | 487 restrictedByLineClamp = !parent()->style()->lineClamp().isNone(); |
| 488 } | 488 } |
| 489 | 489 |
| 490 if (hasOverflowClip() && !restrictedByLineClamp) { | 490 if (hasOverflowClip() && !restrictedByLineClamp) { |
| 491 // Don't scroll to reveal an overflow layer that is restricted by the -w
ebkit-line-clamp property. | 491 // Don't scroll to reveal an overflow layer that is restricted by the -w
ebkit-line-clamp property. |
| 492 // This will prevent us from revealing text hidden by the slider in Safa
ri RSS. | 492 // This will prevent us from revealing text hidden by the slider in Safa
ri RSS. |
| 493 newRect = layer()->scrollableArea()->scrollIntoView(rect, alignX, alignY
); | 493 newRect = layer()->scrollableArea()->scrollIntoView(rect, alignX, alignY
); |
| 494 } else if (!parentBox && canBeProgramaticallyScrolled()) { | 494 } else if (!parentBox && canBeProgramaticallyScrolled()) { |
| 495 if (FrameView* frameView = this->frameView()) { | 495 if (FrameView* frameView = this->frameView()) { |
| 496 HTMLFrameOwnerElement* ownerElement = document().ownerElement(); | 496 HTMLFrameOwnerElement* ownerElement = document().ownerElement(); |
| 497 if (!isDisallowedAutoscroll(ownerElement, frameView)) { | 497 if (!isDisallowedAutoscroll(ownerElement, frameView)) { |
| 498 frameView->scrollableArea()->scrollIntoView(rect, alignX, alignY
); | 498 frameView->scrollableArea()->scrollIntoView(rect, alignX, alignY
); |
| 499 | 499 |
| 500 if (ownerElement && ownerElement->layoutObject()) { | 500 if (ownerElement && ownerElement->layoutObject()) { |
| 501 if (frameView->safeToPropagateScrollToParent()) { | 501 if (frameView->safeToPropagateScrollToParent()) { |
| 502 parentBox = ownerElement->layoutObject()->enclosingBox()
; | 502 parentBox = ownerElement->layoutObject()->enclosingBox()
; |
| 503 // FIXME: This doesn't correctly convert the rect to | 503 // FIXME: This doesn't correctly convert the rect to |
| 504 // absolute coordinates in the parent. | 504 // absolute coordinates in the parent. |
| 505 newRect.setX(rect.x() - frameView->scrollX() + frameView
->x()); | 505 newRect.setX(rect.x() - frameView->scrollX() + frameView
->x()); |
| 506 newRect.setY(rect.y() - frameView->scrollY() + frameView
->y()); | 506 newRect.setY(rect.y() - frameView->scrollY() + frameView
->y()); |
| 507 } else { | 507 } else { |
| 508 parentBox = 0; | 508 parentBox = nullptr; |
| 509 } | 509 } |
| 510 } | 510 } |
| 511 } | 511 } |
| 512 } | 512 } |
| 513 } | 513 } |
| 514 | 514 |
| 515 // If we are fixed-position, it is useless to scroll the parent. | 515 // If we are fixed-position, it is useless to scroll the parent. |
| 516 if (hasLayer() && layer()->scrollsWithViewport()) | 516 if (hasLayer() && layer()->scrollsWithViewport()) |
| 517 return; | 517 return; |
| 518 | 518 |
| (...skipping 1171 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1690 { | 1690 { |
| 1691 return new InlineBox(*this); | 1691 return new InlineBox(*this); |
| 1692 } | 1692 } |
| 1693 | 1693 |
| 1694 void LayoutBox::dirtyLineBoxes(bool fullLayout) | 1694 void LayoutBox::dirtyLineBoxes(bool fullLayout) |
| 1695 { | 1695 { |
| 1696 if (inlineBoxWrapper()) { | 1696 if (inlineBoxWrapper()) { |
| 1697 if (fullLayout) { | 1697 if (fullLayout) { |
| 1698 inlineBoxWrapper()->destroy(); | 1698 inlineBoxWrapper()->destroy(); |
| 1699 ASSERT(m_rareData); | 1699 ASSERT(m_rareData); |
| 1700 m_rareData->m_inlineBoxWrapper = 0; | 1700 m_rareData->m_inlineBoxWrapper = nullptr; |
| 1701 } else { | 1701 } else { |
| 1702 inlineBoxWrapper()->dirtyLineBoxes(); | 1702 inlineBoxWrapper()->dirtyLineBoxes(); |
| 1703 } | 1703 } |
| 1704 } | 1704 } |
| 1705 } | 1705 } |
| 1706 | 1706 |
| 1707 void LayoutBox::positionLineBox(InlineBox* box) | 1707 void LayoutBox::positionLineBox(InlineBox* box) |
| 1708 { | 1708 { |
| 1709 if (isOutOfFlowPositioned()) { | 1709 if (isOutOfFlowPositioned()) { |
| 1710 // Cache the x position only if we were an INLINE type originally. | 1710 // Cache the x position only if we were an INLINE type originally. |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1748 setChildNeedsLayout(MarkOnlyThis); | 1748 setChildNeedsLayout(MarkOnlyThis); |
| 1749 } | 1749 } |
| 1750 | 1750 |
| 1751 void LayoutBox::deleteLineBoxWrapper() | 1751 void LayoutBox::deleteLineBoxWrapper() |
| 1752 { | 1752 { |
| 1753 if (inlineBoxWrapper()) { | 1753 if (inlineBoxWrapper()) { |
| 1754 if (!documentBeingDestroyed()) | 1754 if (!documentBeingDestroyed()) |
| 1755 inlineBoxWrapper()->remove(); | 1755 inlineBoxWrapper()->remove(); |
| 1756 inlineBoxWrapper()->destroy(); | 1756 inlineBoxWrapper()->destroy(); |
| 1757 ASSERT(m_rareData); | 1757 ASSERT(m_rareData); |
| 1758 m_rareData->m_inlineBoxWrapper = 0; | 1758 m_rareData->m_inlineBoxWrapper = nullptr; |
| 1759 } | 1759 } |
| 1760 } | 1760 } |
| 1761 | 1761 |
| 1762 void LayoutBox::setSpannerPlaceholder(LayoutMultiColumnSpannerPlaceholder& place
holder) | 1762 void LayoutBox::setSpannerPlaceholder(LayoutMultiColumnSpannerPlaceholder& place
holder) |
| 1763 { | 1763 { |
| 1764 RELEASE_ASSERT(!m_rareData || !m_rareData->m_spannerPlaceholder); // not exp
ected to change directly from one spanner to another. | 1764 RELEASE_ASSERT(!m_rareData || !m_rareData->m_spannerPlaceholder); // not exp
ected to change directly from one spanner to another. |
| 1765 ensureRareData().m_spannerPlaceholder = &placeholder; | 1765 ensureRareData().m_spannerPlaceholder = &placeholder; |
| 1766 } | 1766 } |
| 1767 | 1767 |
| 1768 void LayoutBox::clearSpannerPlaceholder() | 1768 void LayoutBox::clearSpannerPlaceholder() |
| 1769 { | 1769 { |
| 1770 if (!m_rareData) | 1770 if (!m_rareData) |
| 1771 return; | 1771 return; |
| 1772 m_rareData->m_spannerPlaceholder = 0; | 1772 m_rareData->m_spannerPlaceholder = nullptr; |
| 1773 } | 1773 } |
| 1774 | 1774 |
| 1775 LayoutRect LayoutBox::clippedOverflowRectForPaintInvalidation(const LayoutBoxMod
elObject* paintInvalidationContainer, const PaintInvalidationState* paintInvalid
ationState) const | 1775 LayoutRect LayoutBox::clippedOverflowRectForPaintInvalidation(const LayoutBoxMod
elObject* paintInvalidationContainer, const PaintInvalidationState* paintInvalid
ationState) const |
| 1776 { | 1776 { |
| 1777 if (style()->visibility() != VISIBLE) { | 1777 if (style()->visibility() != VISIBLE) { |
| 1778 DeprecatedPaintLayer* layer = enclosingLayer(); | 1778 DeprecatedPaintLayer* layer = enclosingLayer(); |
| 1779 layer->updateDescendantDependentFlags(); | 1779 layer->updateDescendantDependentFlags(); |
| 1780 if (layer->subtreeIsInvisible()) | 1780 if (layer->subtreeIsInvisible()) |
| 1781 return LayoutRect(); | 1781 return LayoutRect(); |
| 1782 } | 1782 } |
| (...skipping 2051 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3834 | 3834 |
| 3835 if (point.x() < 0 || point.x() > right || point.y() < 0 || point.y() > b
ottom) { | 3835 if (point.x() < 0 || point.x() > right || point.y() < 0 || point.y() > b
ottom) { |
| 3836 if (point.x() <= right / 2) | 3836 if (point.x() <= right / 2) |
| 3837 return createPositionWithAffinity(firstPositionInOrBeforeNode(no
nPseudoNode())); | 3837 return createPositionWithAffinity(firstPositionInOrBeforeNode(no
nPseudoNode())); |
| 3838 return createPositionWithAffinity(lastPositionInOrAfterNode(nonPseud
oNode())); | 3838 return createPositionWithAffinity(lastPositionInOrAfterNode(nonPseud
oNode())); |
| 3839 } | 3839 } |
| 3840 } | 3840 } |
| 3841 | 3841 |
| 3842 // Pass off to the closest child. | 3842 // Pass off to the closest child. |
| 3843 LayoutUnit minDist = LayoutUnit::max(); | 3843 LayoutUnit minDist = LayoutUnit::max(); |
| 3844 LayoutBox* closestLayoutObject = 0; | 3844 LayoutBox* closestLayoutObject = nullptr; |
| 3845 LayoutPoint adjustedPoint = point; | 3845 LayoutPoint adjustedPoint = point; |
| 3846 if (isTableRow()) | 3846 if (isTableRow()) |
| 3847 adjustedPoint.moveBy(location()); | 3847 adjustedPoint.moveBy(location()); |
| 3848 | 3848 |
| 3849 for (LayoutObject* layoutObject = firstChild; layoutObject; layoutObject = l
ayoutObject->nextSibling()) { | 3849 for (LayoutObject* layoutObject = firstChild; layoutObject; layoutObject = l
ayoutObject->nextSibling()) { |
| 3850 if ((!layoutObject->slowFirstChild() && !layoutObject->isInline() && !la
youtObject->isLayoutBlockFlow() ) | 3850 if ((!layoutObject->slowFirstChild() && !layoutObject->isInline() && !la
youtObject->isLayoutBlockFlow() ) |
| 3851 || layoutObject->style()->visibility() != VISIBLE) | 3851 || layoutObject->style()->visibility() != VISIBLE) |
| 3852 continue; | 3852 continue; |
| 3853 | 3853 |
| 3854 if (!layoutObject->isBox()) | 3854 if (!layoutObject->isBox()) |
| (...skipping 537 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4392 | 4392 |
| 4393 DeprecatedPaintLayer* LayoutBox::enclosingFloatPaintingLayer() const | 4393 DeprecatedPaintLayer* LayoutBox::enclosingFloatPaintingLayer() const |
| 4394 { | 4394 { |
| 4395 const LayoutObject* curr = this; | 4395 const LayoutObject* curr = this; |
| 4396 while (curr) { | 4396 while (curr) { |
| 4397 DeprecatedPaintLayer* layer = curr->hasLayer() && curr->isBox() ? toLayo
utBox(curr)->layer() : 0; | 4397 DeprecatedPaintLayer* layer = curr->hasLayer() && curr->isBox() ? toLayo
utBox(curr)->layer() : 0; |
| 4398 if (layer && layer->isSelfPaintingLayer()) | 4398 if (layer && layer->isSelfPaintingLayer()) |
| 4399 return layer; | 4399 return layer; |
| 4400 curr = curr->parent(); | 4400 curr = curr->parent(); |
| 4401 } | 4401 } |
| 4402 return 0; | 4402 return nullptr; |
| 4403 } | 4403 } |
| 4404 | 4404 |
| 4405 LayoutRect LayoutBox::logicalVisualOverflowRectForPropagation(const ComputedStyl
e& parentStyle) const | 4405 LayoutRect LayoutBox::logicalVisualOverflowRectForPropagation(const ComputedStyl
e& parentStyle) const |
| 4406 { | 4406 { |
| 4407 LayoutRect rect = visualOverflowRectForPropagation(parentStyle); | 4407 LayoutRect rect = visualOverflowRectForPropagation(parentStyle); |
| 4408 if (!parentStyle.isHorizontalWritingMode()) | 4408 if (!parentStyle.isHorizontalWritingMode()) |
| 4409 return rect.transposedRect(); | 4409 return rect.transposedRect(); |
| 4410 return rect; | 4410 return rect; |
| 4411 } | 4411 } |
| 4412 | 4412 |
| (...skipping 380 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4793 bool LayoutBox::canRenderBorderImage() const | 4793 bool LayoutBox::canRenderBorderImage() const |
| 4794 { | 4794 { |
| 4795 if (!style()->hasBorderDecoration()) | 4795 if (!style()->hasBorderDecoration()) |
| 4796 return false; | 4796 return false; |
| 4797 | 4797 |
| 4798 StyleImage* borderImage = style()->borderImage().image(); | 4798 StyleImage* borderImage = style()->borderImage().image(); |
| 4799 return borderImage && borderImage->canRender(*this, style()->effectiveZoom()
) && borderImage->isLoaded(); | 4799 return borderImage && borderImage->canRender(*this, style()->effectiveZoom()
) && borderImage->isLoaded(); |
| 4800 } | 4800 } |
| 4801 | 4801 |
| 4802 } // namespace blink | 4802 } // namespace blink |
| OLD | NEW |