| Index: Source/core/rendering/shapes/ShapeOutsideInfo.cpp
|
| diff --git a/Source/core/rendering/shapes/ShapeOutsideInfo.cpp b/Source/core/rendering/shapes/ShapeOutsideInfo.cpp
|
| index 603f6d432d2007cb3b5752796c29fa8f89a2ea16..f021c17a0ed75a5677e629ff38d189f63e5421fe 100644
|
| --- a/Source/core/rendering/shapes/ShapeOutsideInfo.cpp
|
| +++ b/Source/core/rendering/shapes/ShapeOutsideInfo.cpp
|
| @@ -173,21 +173,6 @@ const Shape& ShapeOutsideInfo::computedShape() const
|
| return *m_shape;
|
| }
|
|
|
| -SegmentList ShapeOutsideInfo::computeSegmentsForLine(LayoutUnit lineTop, LayoutUnit lineHeight) const
|
| -{
|
| - ASSERT(lineHeight >= 0);
|
| - SegmentList segments;
|
| -
|
| - computedShape().getExcludedIntervals((lineTop - logicalTopOffset()), std::min(lineHeight, shapeLogicalBottom() - lineTop), segments);
|
| -
|
| - for (size_t i = 0; i < segments.size(); i++) {
|
| - segments[i].logicalLeft += logicalLeftOffset();
|
| - segments[i].logicalRight += logicalLeftOffset();
|
| - }
|
| -
|
| - return segments;
|
| -}
|
| -
|
| inline LayoutUnit borderBeforeInWritingMode(const RenderBox& renderer, WritingMode writingMode)
|
| {
|
| switch (writingMode) {
|
| @@ -288,9 +273,10 @@ bool ShapeOutsideInfo::isEnabledFor(const RenderBox& box)
|
|
|
| return false;
|
| }
|
| -
|
| void ShapeOutsideInfo::updateDeltasForContainingBlockLine(const RenderBlockFlow& containingBlock, const FloatingObject& floatingObject, LayoutUnit lineTop, LayoutUnit lineHeight)
|
| {
|
| + ASSERT(lineHeight >= 0);
|
| +
|
| LayoutUnit borderBoxTop = containingBlock.logicalTopForFloat(&floatingObject) + containingBlock.marginBeforeForChild(&m_renderer);
|
| LayoutUnit borderBoxLineTop = lineTop - borderBoxTop;
|
|
|
| @@ -302,14 +288,14 @@ void ShapeOutsideInfo::updateDeltasForContainingBlockLine(const RenderBlockFlow&
|
| LayoutUnit floatMarginBoxWidth = containingBlock.logicalWidthForFloat(&floatingObject);
|
|
|
| if (lineOverlapsShapeBounds()) {
|
| - SegmentList segments = computeSegmentsForLine(borderBoxLineTop, lineHeight);
|
| - if (segments.size()) {
|
| + LineSegment segment = computedShape().getExcludedInterval((borderBoxLineTop - logicalTopOffset()), std::min(lineHeight, shapeLogicalBottom() - borderBoxLineTop));
|
| + if (segment.isValid) {
|
| LayoutUnit logicalLeftMargin = containingBlock.style()->isLeftToRightDirection() ? containingBlock.marginStartForChild(&m_renderer) : containingBlock.marginEndForChild(&m_renderer);
|
| - LayoutUnit rawLeftMarginBoxDelta = segments.first().logicalLeft + logicalLeftMargin;
|
| + LayoutUnit rawLeftMarginBoxDelta = segment.logicalLeft + logicalLeftOffset() + logicalLeftMargin;
|
| m_leftMarginBoxDelta = clampToLayoutUnit(rawLeftMarginBoxDelta, LayoutUnit(), floatMarginBoxWidth);
|
|
|
| LayoutUnit logicalRightMargin = containingBlock.style()->isLeftToRightDirection() ? containingBlock.marginEndForChild(&m_renderer) : containingBlock.marginStartForChild(&m_renderer);
|
| - LayoutUnit rawRightMarginBoxDelta = segments.last().logicalRight - containingBlock.logicalWidthForChild(&m_renderer) - logicalRightMargin;
|
| + LayoutUnit rawRightMarginBoxDelta = segment.logicalRight + logicalLeftOffset() - containingBlock.logicalWidthForChild(&m_renderer) - logicalRightMargin;
|
| m_rightMarginBoxDelta = clampToLayoutUnit(rawRightMarginBoxDelta, -floatMarginBoxWidth, LayoutUnit());
|
| m_lineOverlapsShape = true;
|
| return;
|
|
|