| Index: Source/core/rendering/RenderBlock.cpp
|
| diff --git a/Source/core/rendering/RenderBlock.cpp b/Source/core/rendering/RenderBlock.cpp
|
| index da9b6215d797a841a9a37760ee523679e5c66212..5ef5049ecfc68aaad4e47b1bd7cbfa116b4eaf69 100644
|
| --- a/Source/core/rendering/RenderBlock.cpp
|
| +++ b/Source/core/rendering/RenderBlock.cpp
|
| @@ -4009,10 +4009,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 = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0, ShapeOutsideFloatBoundingBoxOffset);
|
| + while (logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0, ShapeOutsideFloatBoundingBoxOffset) - floatLogicalLeft < floatLogicalWidth) {
|
| logicalTopOffset += min(heightRemainingLeft, heightRemainingRight);
|
| - floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft);
|
| + floatLogicalLeft = logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0, ShapeOutsideFloatBoundingBoxOffset);
|
| if (insideFlowThread) {
|
| // Have to re-evaluate all of our offsets, since they may have changed.
|
| logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset.
|
| @@ -4024,10 +4024,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 = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0, ShapeOutsideFloatBoundingBoxOffset);
|
| + while (floatLogicalLeft - logicalLeftOffsetForLine(logicalTopOffset, logicalLeftOffset, false, &heightRemainingLeft, 0, ShapeOutsideFloatBoundingBoxOffset) < floatLogicalWidth) {
|
| logicalTopOffset += min(heightRemainingLeft, heightRemainingRight);
|
| - floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight);
|
| + floatLogicalLeft = logicalRightOffsetForLine(logicalTopOffset, logicalRightOffset, false, &heightRemainingRight, 0, ShapeOutsideFloatBoundingBoxOffset);
|
| if (insideFlowThread) {
|
| // Have to re-evaluate all of our offsets, since they may have changed.
|
| logicalRightOffset = logicalRightOffsetForContent(logicalTopOffset); // Constant part of right offset.
|
| @@ -4316,7 +4316,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::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const
|
| {
|
| LayoutUnit left = fixedOffset;
|
| if (m_floatingObjects && m_floatingObjects->hasLeftObjects()) {
|
| @@ -4327,7 +4327,8 @@ LayoutUnit RenderBlock::logicalLeftOffsetForLine(LayoutUnit logicalTop, LayoutUn
|
| m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter);
|
|
|
| #if ENABLE(CSS_EXCLUSIONS)
|
| - 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();
|
| @@ -4370,7 +4371,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::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutUnit fixedOffset, bool applyTextIndent, LayoutUnit* heightRemaining, LayoutUnit logicalHeight, ShapeOutsideFloatOffsetMode offsetMode) const
|
| {
|
| LayoutUnit right = fixedOffset;
|
| if (m_floatingObjects && m_floatingObjects->hasRightObjects()) {
|
| @@ -4382,7 +4383,8 @@ LayoutUnit RenderBlock::logicalRightOffsetForLine(LayoutUnit logicalTop, LayoutU
|
| m_floatingObjects->placedFloatsTree().allOverlapsWithAdapter(adapter);
|
|
|
| #if ENABLE(CSS_EXCLUSIONS)
|
| - 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();
|
|
|