Chromium Code Reviews| Index: Source/core/rendering/RenderBlock.cpp |
| diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp |
| index 1cf46af5b6240c4ef6f40a6e60bfee90f5bfcd08..718b9d37d063c2f15ebbcb4ae7bf7b4af232fa1a 100644 |
| --- a/Source/core/rendering/RenderBlock.cpp |
| +++ b/Source/core/rendering/RenderBlock.cpp |
| @@ -4033,10 +4033,10 @@ LayoutPoint RenderBlock::computeLogicalLocationForFloat(const FloatingObject* fl |
| if (childBox->style()->floating() == LeftFloat) { |
| LayoutUnit heightRemainingLeft = 1; |
| LayoutUnit heightRemainingRight = 1; |
| - floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft); |
| - while (logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight) - floatLogicalLeft < floatLogicalWidth) { |
| + floatLogicalLeft = logicalLeftOffsetForLineUsingFloatBoundingBox(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0); |
|
Julien - ping for review
2013/05/29 17:14:49
The last argument (0) is optional, it's probably b
|
| + while (logicalRightOffsetForLineUsingFloatBoundingBox(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0) - floatLogicalLeft < floatLogicalWidth) { |
| logicalTopOffset += min(heightRemainingLeft, heightRemainingRight); |
| - floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft); |
| + floatLogicalLeft = logicalLeftOffsetForLineUsingFloatBoundingBox(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0); |
| if (insideFlowThread) { |
| // Have to re-evaluate all of our offsets, since they may have changed. |
| logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset. |
| @@ -4048,10 +4048,10 @@ LayoutPoint RenderBlock::computeLogicalLocationForFloat(const FloatingObject* fl |
| } else { |
| LayoutUnit heightRemainingLeft = 1; |
| LayoutUnit heightRemainingRight = 1; |
| - floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight); |
| - while (floatLogicalLeft - logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft) < floatLogicalWidth) { |
| + floatLogicalLeft = logicalRightOffsetForLineUsingFloatBoundingBox(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0); |
| + while (floatLogicalLeft - logicalLeftOffsetForLineUsingFloatBoundingBox(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0) < floatLogicalWidth) { |
| logicalTopOffset += min(heightRemainingLeft, heightRemainingRight); |
| - floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight); |
| + floatLogicalLeft = logicalRightOffsetForLineUsingFloatBoundingBox(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0); |
| if (insideFlowThread) { |
| // Have to re-evaluate all of our offsets, since they may have changed. |
| logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset. |
| @@ -4336,7 +4336,7 @@ LayoutUnit RenderBlock::logicalRightOffsetForContent(RenderRegion* region, Layou |
| return logicalRightOffset - (logicalWidth() - (isHorizontalWritingMode() ? boxRect.maxX() : boxRect.maxY())); |
| } |
| -LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight) const |
| +LayoutUnit RenderBlock::logicalLeftFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const |
| { |
| LayoutUnit left = fixedOffset; |
| if (m_floatingObjects && m_floatingObjects->hasLeftObjects()) { |
| @@ -4346,13 +4346,20 @@ LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUn |
| FloatIntervalSearchAdapter<FloatingObject::FloatLeft> adapter(this, roundToInt(logicalTop), roundToInt(logicalTop + logicalHeight), left, heightRemaining); |
| m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter); |
| - if (const FloatingObject* lastFloat = adapter.lastFloat()) { |
| + const FloatingObject* lastFloat = adapter.lastFloat(); |
| + if (offsetMode == ShapeOutsideFloatShapeOffset && lastFloat) { |
| if (ExclusionShapeOutsideInfo* shapeOutside = lastFloat->renderer()->exclusionShapeOutsideInfo()) { |
| shapeOutside->computeSegmentsForLine(logicalTop - logicalTopForFloat(lastFloat) + shapeOutside->shapeLogicalTop(), logicalHeight); |
| left += shapeOutside->rightSegmentShapeBoundingBoxDelta(); |
| } |
| } |
| } |
| + return left; |
| +} |
| + |
| +LayoutUnit RenderBlock::logicalLeftOffsetForLineWithoutFloats(LayoutUnit fixedOffset, bool applyTextIndent) const |
|
Julien - ping for review
2013/05/29 17:14:49
Ideally we should ASSERT that there is no floats t
|
| +{ |
| + LayoutUnit left = fixedOffset; |
| if (applyTextIndent && style()->isLeftToRightDirection()) |
| left += textIndentOffset(); |
| @@ -4388,7 +4395,7 @@ LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUn |
| return left; |
| } |
| -LayoutUnit RenderBlock::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight) const |
| +LayoutUnit RenderBlock::logicalRightFloatOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const |
| { |
| LayoutUnit right = fixedOffset; |
| if (m_floatingObjects && m_floatingObjects->hasRightObjects()) { |
| @@ -4399,7 +4406,8 @@ LayoutUnit RenderBlock::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutU |
| FloatIntervalSearchAdapter<FloatingObject::FloatRight> adapter(this, roundToInt(logicalTop), roundToInt(logicalTop + logicalHeight), rightFloatOffset, heightRemaining); |
| m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter); |
| - if (const FloatingObject* lastFloat = adapter.lastFloat()) { |
| + const FloatingObject* lastFloat = adapter.lastFloat(); |
| + if (offsetMode == ShapeOutsideFloatShapeOffset && lastFloat) { |
| if (ExclusionShapeOutsideInfo* shapeOutside = lastFloat->renderer()->exclusionShapeOutsideInfo()) { |
| shapeOutside->computeSegmentsForLine(logicalTop - logicalTopForFloat(lastFloat) + shapeOutside->shapeLogicalTop(), logicalHeight); |
| rightFloatOffset += shapeOutside->leftSegmentShapeBoundingBoxDelta(); |
| @@ -4408,7 +4416,13 @@ LayoutUnit RenderBlock::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutU |
| right = min(right, rightFloatOffset); |
| } |
| + return right; |
| +} |
| +LayoutUnit RenderBlock::logicalRightOffsetForLineWithoutFloats(LayoutUnit fixedOffset, bool applyTextIndent) const |
|
Julien - ping for review
2013/05/29 17:14:49
Ditto.
|
| +{ |
| + LayoutUnit right = fixedOffset; |
| + |
| if (applyTextIndent && !style()->isLeftToRightDirection()) |
| right -= textIndentOffset(); |