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

Side by Side Diff: Source/core/layout/LayoutBox.cpp

Issue 1212893005: Add position: sticky as supported position value when CSSStickyPosition is enabled. (Closed) Base URL: https://chromium.googlesource.com/chromium/blink.git@master
Patch Set: Merge, convert pixel to ref tests, and address comments. Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « Source/core/layout/LayoutBlockFlow.cpp ('k') | Source/core/layout/LayoutBoxModelObject.cpp » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 1229 matching lines...) Expand 10 before | Expand all | Expand 10 after
1240 { 1240 {
1241 if (!maxDepthToTest) 1241 if (!maxDepthToTest)
1242 return false; 1242 return false;
1243 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) { 1243 for (LayoutObject* child = slowFirstChild(); child; child = child->nextSibli ng()) {
1244 if (!child->isBox()) 1244 if (!child->isBox())
1245 continue; 1245 continue;
1246 LayoutBox* childBox = toLayoutBox(child); 1246 LayoutBox* childBox = toLayoutBox(child);
1247 if (!isCandidateForOpaquenessTest(*childBox)) 1247 if (!isCandidateForOpaquenessTest(*childBox))
1248 continue; 1248 continue;
1249 LayoutPoint childLocation = childBox->location(); 1249 LayoutPoint childLocation = childBox->location();
1250 if (childBox->isRelPositioned()) 1250 if (childBox->isInFlowPositioned())
1251 childLocation.move(childBox->relativePositionOffset()); 1251 childLocation.move(childBox->offsetForInFlowPosition());
1252 LayoutRect childLocalRect = localRect; 1252 LayoutRect childLocalRect = localRect;
1253 childLocalRect.moveBy(-childLocation); 1253 childLocalRect.moveBy(-childLocation);
1254 if (childLocalRect.y() < 0 || childLocalRect.x() < 0) { 1254 if (childLocalRect.y() < 0 || childLocalRect.x() < 0) {
1255 // If there is unobscured area above/left of a static positioned box then the rect is probably not covered. 1255 // If there is unobscured area above/left of a static positioned box then the rect is probably not covered.
1256 if (childBox->style()->position() == StaticPosition) 1256 if (childBox->style()->position() == StaticPosition)
1257 return false; 1257 return false;
1258 continue; 1258 continue;
1259 } 1259 }
1260 if (childLocalRect.maxY() > childBox->size().height() || childLocalRect. maxX() > childBox->size().width()) 1260 if (childLocalRect.maxY() > childBox->size().height() || childLocalRect. maxX() > childBox->size().width())
1261 continue; 1261 continue;
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after
1608 } 1608 }
1609 1609
1610 LayoutBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState); 1610 LayoutBoxModelObject::mapAbsoluteToLocalPoint(mode, transformState);
1611 } 1611 }
1612 1612
1613 LayoutSize LayoutBox::offsetFromContainer(const LayoutObject* o, const LayoutPoi nt& point, bool* offsetDependsOnPoint) const 1613 LayoutSize LayoutBox::offsetFromContainer(const LayoutObject* o, const LayoutPoi nt& point, bool* offsetDependsOnPoint) const
1614 { 1614 {
1615 ASSERT(o == container()); 1615 ASSERT(o == container());
1616 1616
1617 LayoutSize offset; 1617 LayoutSize offset;
1618 if (isRelPositioned()) 1618 if (isInFlowPositioned())
1619 offset += offsetForInFlowPosition(); 1619 offset += offsetForInFlowPosition();
1620 1620
1621 if (!isInline() || isReplaced()) { 1621 if (!isInline() || isReplaced()) {
1622 offset += topLeftLocationOffset(); 1622 offset += topLeftLocationOffset();
1623 if (o->isLayoutFlowThread()) { 1623 if (o->isLayoutFlowThread()) {
1624 // So far the point has been in flow thread coordinates (i.e. as if everything in 1624 // So far the point has been in flow thread coordinates (i.e. as if everything in
1625 // the fragmentation context lived in one tall single column). Conve rt it to a 1625 // the fragmentation context lived in one tall single column). Conve rt it to a
1626 // visual point now. 1626 // visual point now.
1627 LayoutPoint pointInContainer = point + offset; 1627 LayoutPoint pointInContainer = point + offset;
1628 offset += o->columnOffset(pointInContainer); 1628 offset += o->columnOffset(pointInContainer);
1629 if (offsetDependsOnPoint) 1629 if (offsetDependsOnPoint)
1630 *offsetDependsOnPoint = true; 1630 *offsetDependsOnPoint = true;
1631 } 1631 }
1632 } 1632 }
1633 1633
1634 if (o->hasOverflowClip()) 1634 if (o->hasOverflowClip())
1635 offset -= toLayoutBox(o)->scrolledContentOffset(); 1635 offset -= toLayoutBox(o)->scrolledContentOffset();
1636 1636
1637 if (style()->position() == AbsolutePosition && o->isRelPositioned() && o->is LayoutInline()) 1637 if (style()->position() == AbsolutePosition && o->isInFlowPositioned() && o- >isLayoutInline())
1638 offset += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); 1638 offset += toLayoutInline(o)->offsetForInFlowPositionedInline(*this);
1639 1639
1640 return offset; 1640 return offset;
1641 } 1641 }
1642 1642
1643 InlineBox* LayoutBox::createInlineBox() 1643 InlineBox* LayoutBox::createInlineBox()
1644 { 1644 {
1645 return new InlineBox(*this); 1645 return new InlineBox(*this);
1646 } 1646 }
1647 1647
(...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after
1686 } else if (isReplaced()) { 1686 } else if (isReplaced()) {
1687 // FIXME: the call to roundedLayoutPoint() below is temporary and should be removed once 1687 // FIXME: the call to roundedLayoutPoint() below is temporary and should be removed once
1688 // the transition to LayoutUnit-based types is complete (crbug.com/32123 7) 1688 // the transition to LayoutUnit-based types is complete (crbug.com/32123 7)
1689 setLocationAndUpdateOverflowControlsIfNeeded(box->topLeft()); 1689 setLocationAndUpdateOverflowControlsIfNeeded(box->topLeft());
1690 setInlineBoxWrapper(box); 1690 setInlineBoxWrapper(box);
1691 } 1691 }
1692 } 1692 }
1693 1693
1694 void LayoutBox::moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal) 1694 void LayoutBox::moveWithEdgeOfInlineContainerIfNecessary(bool isHorizontal)
1695 { 1695 {
1696 ASSERT(isOutOfFlowPositioned() && container()->isLayoutInline() && container ()->isRelPositioned()); 1696 ASSERT(isOutOfFlowPositioned() && container()->isLayoutInline() && container ()->isInFlowPositioned());
1697 // If this object is inside a relative positioned inline and its inline posi tion is an explicit offset from the edge of its container 1697 // If this object is inside a relative positioned inline and its inline posi tion is an explicit offset from the edge of its container
1698 // then it will need to move if its inline container has changed width. We d o not track if the width has changed 1698 // then it will need to move if its inline container has changed width. We d o not track if the width has changed
1699 // but if we are here then we are laying out lines inside it, so it probably has - mark our object for layout so that it can 1699 // but if we are here then we are laying out lines inside it, so it probably has - mark our object for layout so that it can
1700 // move to the new offset created by the new width. 1700 // move to the new offset created by the new width.
1701 if (!normalChildNeedsLayout() && !style()->hasStaticInlinePosition(isHorizon tal)) 1701 if (!normalChildNeedsLayout() && !style()->hasStaticInlinePosition(isHorizon tal))
1702 setChildNeedsLayout(MarkOnlyThis); 1702 setChildNeedsLayout(MarkOnlyThis);
1703 } 1703 }
1704 1704
1705 void LayoutBox::deleteLineBoxWrapper() 1705 void LayoutBox::deleteLineBoxWrapper()
1706 { 1706 {
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
1792 topLeft.move(locationOffset()); 1792 topLeft.move(locationOffset());
1793 1793
1794 // We are now in our parent container's coordinate space. Apply our transfo rm to obtain a bounding box 1794 // We are now in our parent container's coordinate space. Apply our transfo rm to obtain a bounding box
1795 // in the parent's coordinate space that encloses us. 1795 // in the parent's coordinate space that encloses us.
1796 if (hasLayer() && layer()->transform()) { 1796 if (hasLayer() && layer()->transform()) {
1797 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect ))); 1797 rect = LayoutRect(layer()->transform()->mapRect(pixelSnappedIntRect(rect )));
1798 topLeft = rect.location(); 1798 topLeft = rect.location();
1799 topLeft.move(locationOffset()); 1799 topLeft.move(locationOffset());
1800 } 1800 }
1801 1801
1802 if (position == AbsolutePosition && o->isRelPositioned() && o->isLayoutInlin e()) { 1802 if (position == AbsolutePosition && o->isInFlowPositioned() && o->isLayoutIn line()) {
1803 topLeft += toLayoutInline(o)->offsetForInFlowPositionedInline(*this); 1803 topLeft += toLayoutInline(o)->offsetForInFlowPositionedInline(*this);
1804 } else if (styleToUse.hasInFlowPosition() && layer()) { 1804 } else if (styleToUse.hasInFlowPosition() && layer()) {
1805 // Apply the relative position offset when invalidating a rectangle. Th e layer 1805 // Apply the relative position offset when invalidating a rectangle. Th e layer
1806 // is translated, but the layout box isn't, so we need to do this to get the 1806 // is translated, but the layout box isn't, so we need to do this to get the
1807 // right dirty rect. Since this is called from LayoutObject::setStyle, the relative position 1807 // right dirty rect. Since this is called from LayoutObject::setStyle, the relative position
1808 // flag on the LayoutObject has been cleared, so use the one on the styl e(). 1808 // flag on the LayoutObject has been cleared, so use the one on the styl e().
1809 topLeft += layer()->offsetForInFlowPosition(); 1809 topLeft += layer()->offsetForInFlowPosition();
1810 } 1810 }
1811 1811
1812 // FIXME: We ignore the lightweight clipping rect that controls use, since i f |o| is in mid-layout, 1812 // FIXME: We ignore the lightweight clipping rect that controls use, since i f |o| is in mid-layout,
(...skipping 902 matching lines...) Expand 10 before | Expand all | Expand 10 after
2715 return containingBlock->isHorizontalWritingMode() ? viewportSize.wid th() : viewportSize.height(); 2715 return containingBlock->isHorizontalWritingMode() ? viewportSize.wid th() : viewportSize.height();
2716 } 2716 }
2717 } 2717 }
2718 2718
2719 if (hasOverrideContainingBlockLogicalWidth()) 2719 if (hasOverrideContainingBlockLogicalWidth())
2720 return overrideContainingBlockContentLogicalWidth(); 2720 return overrideContainingBlockContentLogicalWidth();
2721 2721
2722 if (containingBlock->isBox()) 2722 if (containingBlock->isBox())
2723 return toLayoutBox(containingBlock)->clientLogicalWidth(); 2723 return toLayoutBox(containingBlock)->clientLogicalWidth();
2724 2724
2725 ASSERT(containingBlock->isLayoutInline() && containingBlock->isRelPositioned ()); 2725 ASSERT(containingBlock->isLayoutInline() && containingBlock->isInFlowPositio ned());
2726 2726
2727 const LayoutInline* flow = toLayoutInline(containingBlock); 2727 const LayoutInline* flow = toLayoutInline(containingBlock);
2728 InlineFlowBox* first = flow->firstLineBox(); 2728 InlineFlowBox* first = flow->firstLineBox();
2729 InlineFlowBox* last = flow->lastLineBox(); 2729 InlineFlowBox* last = flow->lastLineBox();
2730 2730
2731 // If the containing block is empty, return a width of 0. 2731 // If the containing block is empty, return a width of 0.
2732 if (!first || !last) 2732 if (!first || !last)
2733 return LayoutUnit(); 2733 return LayoutUnit();
2734 2734
2735 LayoutUnit fromLeft; 2735 LayoutUnit fromLeft;
(...skipping 26 matching lines...) Expand all
2762 2762
2763 if (hasOverrideContainingBlockLogicalHeight()) 2763 if (hasOverrideContainingBlockLogicalHeight())
2764 return overrideContainingBlockContentLogicalHeight(); 2764 return overrideContainingBlockContentLogicalHeight();
2765 2765
2766 if (containingBlock->isBox()) { 2766 if (containingBlock->isBox()) {
2767 const LayoutBlock* cb = containingBlock->isLayoutBlock() ? 2767 const LayoutBlock* cb = containingBlock->isLayoutBlock() ?
2768 toLayoutBlock(containingBlock) : containingBlock->containingBlock(); 2768 toLayoutBlock(containingBlock) : containingBlock->containingBlock();
2769 return cb->clientLogicalHeight(); 2769 return cb->clientLogicalHeight();
2770 } 2770 }
2771 2771
2772 ASSERT(containingBlock->isLayoutInline() && containingBlock->isRelPositioned ()); 2772 ASSERT(containingBlock->isLayoutInline() && containingBlock->isInFlowPositio ned());
2773 2773
2774 const LayoutInline* flow = toLayoutInline(containingBlock); 2774 const LayoutInline* flow = toLayoutInline(containingBlock);
2775 InlineFlowBox* first = flow->firstLineBox(); 2775 InlineFlowBox* first = flow->firstLineBox();
2776 InlineFlowBox* last = flow->lastLineBox(); 2776 InlineFlowBox* last = flow->lastLineBox();
2777 2777
2778 // If the containing block is empty, return a height of 0. 2778 // If the containing block is empty, return a height of 0.
2779 if (!first || !last) 2779 if (!first || !last)
2780 return LayoutUnit(); 2780 return LayoutUnit();
2781 2781
2782 LayoutUnit heightResult; 2782 LayoutUnit heightResult;
(...skipping 10 matching lines...) Expand all
2793 { 2793 {
2794 if (!logicalLeft.isAuto() || !logicalRight.isAuto()) 2794 if (!logicalLeft.isAuto() || !logicalRight.isAuto())
2795 return; 2795 return;
2796 2796
2797 // FIXME: The static distance computation has not been patched for mixed wri ting modes yet. 2797 // FIXME: The static distance computation has not been patched for mixed wri ting modes yet.
2798 if (child->parent()->style()->direction() == LTR) { 2798 if (child->parent()->style()->direction() == LTR) {
2799 LayoutUnit staticPosition = child->layer()->staticInlinePosition() - con tainerBlock->borderLogicalLeft(); 2799 LayoutUnit staticPosition = child->layer()->staticInlinePosition() - con tainerBlock->borderLogicalLeft();
2800 for (LayoutObject* curr = child->parent(); curr && curr != containerBloc k; curr = curr->container()) { 2800 for (LayoutObject* curr = child->parent(); curr && curr != containerBloc k; curr = curr->container()) {
2801 if (curr->isBox()) { 2801 if (curr->isBox()) {
2802 staticPosition += toLayoutBox(curr)->logicalLeft(); 2802 staticPosition += toLayoutBox(curr)->logicalLeft();
2803 if (toLayoutBox(curr)->isRelPositioned()) 2803 if (toLayoutBox(curr)->isInFlowPositioned())
2804 staticPosition += toLayoutBox(curr)->relativePositionOffset( ).width(); 2804 staticPosition += toLayoutBox(curr)->offsetForInFlowPosition ().width();
2805 } else if (curr->isInline()) { 2805 } else if (curr->isInline()) {
2806 if (curr->isRelPositioned()) { 2806 if (curr->isInFlowPositioned()) {
2807 if (!curr->style()->logicalLeft().isAuto()) 2807 if (!curr->style()->logicalLeft().isAuto())
2808 staticPosition += valueForLength(curr->style()->logicalL eft(), curr->containingBlock()->availableWidth()); 2808 staticPosition += valueForLength(curr->style()->logicalL eft(), curr->containingBlock()->availableWidth());
2809 else 2809 else
2810 staticPosition -= valueForLength(curr->style()->logicalR ight(), curr->containingBlock()->availableWidth()); 2810 staticPosition -= valueForLength(curr->style()->logicalR ight(), curr->containingBlock()->availableWidth());
2811 } 2811 }
2812 } 2812 }
2813 } 2813 }
2814 logicalLeft.setValue(Fixed, staticPosition); 2814 logicalLeft.setValue(Fixed, staticPosition);
2815 } else { 2815 } else {
2816 LayoutBox* enclosingBox = child->parent()->enclosingBox(); 2816 LayoutBox* enclosingBox = child->parent()->enclosingBox();
2817 LayoutUnit staticPosition = child->layer()->staticInlinePosition() + con tainerLogicalWidth + containerBlock->borderLogicalLeft(); 2817 LayoutUnit staticPosition = child->layer()->staticInlinePosition() + con tainerLogicalWidth + containerBlock->borderLogicalLeft();
2818 for (LayoutObject* curr = child->parent(); curr; curr = curr->container( )) { 2818 for (LayoutObject* curr = child->parent(); curr; curr = curr->container( )) {
2819 if (curr->isBox()) { 2819 if (curr->isBox()) {
2820 if (curr != containerBlock) { 2820 if (curr != containerBlock) {
2821 staticPosition -= toLayoutBox(curr)->logicalLeft(); 2821 staticPosition -= toLayoutBox(curr)->logicalLeft();
2822 if (toLayoutBox(curr)->isRelPositioned()) 2822 if (toLayoutBox(curr)->isInFlowPositioned())
2823 staticPosition -= toLayoutBox(curr)->relativePositionOff set().width(); 2823 staticPosition -= toLayoutBox(curr)->offsetForInFlowPosi tion().width();
2824 } 2824 }
2825 if (curr == enclosingBox) 2825 if (curr == enclosingBox)
2826 staticPosition -= enclosingBox->logicalWidth(); 2826 staticPosition -= enclosingBox->logicalWidth();
2827 } else if (curr->isInline()) { 2827 } else if (curr->isInline()) {
2828 if (curr->isRelPositioned()) { 2828 if (curr->isInFlowPositioned()) {
2829 if (!curr->style()->logicalLeft().isAuto()) 2829 if (!curr->style()->logicalLeft().isAuto())
2830 staticPosition -= valueForLength(curr->style()->logicalL eft(), curr->containingBlock()->availableWidth()); 2830 staticPosition -= valueForLength(curr->style()->logicalL eft(), curr->containingBlock()->availableWidth());
2831 else 2831 else
2832 staticPosition += valueForLength(curr->style()->logicalR ight(), curr->containingBlock()->availableWidth()); 2832 staticPosition += valueForLength(curr->style()->logicalR ight(), curr->containingBlock()->availableWidth());
2833 } 2833 }
2834 } 2834 }
2835 if (curr == containerBlock) 2835 if (curr == containerBlock)
2836 break; 2836 break;
2837 } 2837 }
2838 logicalRight.setValue(Fixed, staticPosition); 2838 logicalRight.setValue(Fixed, staticPosition);
(...skipping 1560 matching lines...) Expand 10 before | Expand all | Expand 10 after
4399 LayoutRect rect = borderBoxRect(); 4399 LayoutRect rect = borderBoxRect();
4400 // We want to include the margin, but only when it adds height. Quirky margi ns don't contribute height 4400 // We want to include the margin, but only when it adds height. Quirky margi ns don't contribute height
4401 // nor do the margins of self-collapsing blocks. 4401 // nor do the margins of self-collapsing blocks.
4402 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock()) 4402 if (!styleRef().hasMarginAfterQuirk() && !isSelfCollapsingBlock())
4403 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA fter()) : LayoutSize(marginAfter(), LayoutUnit())); 4403 rect.expand(isHorizontalWritingMode() ? LayoutSize(LayoutUnit(), marginA fter()) : LayoutSize(marginAfter(), LayoutUnit()));
4404 4404
4405 if (!hasOverflowClip()) 4405 if (!hasOverflowClip())
4406 rect.unite(layoutOverflowRect()); 4406 rect.unite(layoutOverflowRect());
4407 4407
4408 bool hasTransform = hasLayer() && layer()->transform(); 4408 bool hasTransform = hasLayer() && layer()->transform();
4409 if (isRelPositioned() || hasTransform) { 4409 if (isInFlowPositioned() || hasTransform) {
4410 // If we are relatively positioned or if we have a transform, then we ha ve to convert 4410 // If we are relatively positioned or if we have a transform, then we ha ve to convert
4411 // this rectangle into physical coordinates, apply relative positioning and transforms 4411 // this rectangle into physical coordinates, apply relative positioning and transforms
4412 // to it, and then convert it back. 4412 // to it, and then convert it back.
4413 flipForWritingMode(rect); 4413 flipForWritingMode(rect);
4414 4414
4415 if (hasTransform) 4415 if (hasTransform)
4416 rect = layer()->currentTransform().mapRect(rect); 4416 rect = layer()->currentTransform().mapRect(rect);
4417 4417
4418 if (isRelPositioned()) 4418 if (isInFlowPositioned())
4419 rect.move(offsetForInFlowPosition()); 4419 rect.move(offsetForInFlowPosition());
4420 4420
4421 // Now we need to flip back. 4421 // Now we need to flip back.
4422 flipForWritingMode(rect); 4422 flipForWritingMode(rect);
4423 } 4423 }
4424 4424
4425 // If the writing modes of the child and parent match, then we don't have to 4425 // If the writing modes of the child and parent match, then we don't have to
4426 // do anything fancy. Just return the result. 4426 // do anything fancy. Just return the result.
4427 if (parentStyle.writingMode() == style()->writingMode()) 4427 if (parentStyle.writingMode() == style()->writingMode())
4428 return rect; 4428 return rect;
(...skipping 327 matching lines...) Expand 10 before | Expand all | Expand 10 after
4756 StyleImage* borderImage = style()->borderImage().image(); 4756 StyleImage* borderImage = style()->borderImage().image();
4757 return borderImage && borderImage->canRender(*this, style()->effectiveZoom() ) && borderImage->isLoaded(); 4757 return borderImage && borderImage->canRender(*this, style()->effectiveZoom() ) && borderImage->isLoaded();
4758 } 4758 }
4759 4759
4760 ShapeOutsideInfo* LayoutBox::shapeOutsideInfo() const 4760 ShapeOutsideInfo* LayoutBox::shapeOutsideInfo() const
4761 { 4761 {
4762 return ShapeOutsideInfo::isEnabledFor(*this) ? ShapeOutsideInfo::info(*this) : nullptr; 4762 return ShapeOutsideInfo::isEnabledFor(*this) ? ShapeOutsideInfo::info(*this) : nullptr;
4763 } 4763 }
4764 4764
4765 } // namespace blink 4765 } // namespace blink
OLDNEW
« no previous file with comments | « Source/core/layout/LayoutBlockFlow.cpp ('k') | Source/core/layout/LayoutBoxModelObject.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698