| Index: third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
|
| diff --git a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
|
| index 785cb425f791ef657581f54bc3540041cbd69b0f..77ef5f3b1fde827d72b508e64aac1bbbffae1a14 100644
|
| --- a/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
|
| +++ b/third_party/WebKit/Source/core/layout/LayoutBlockFlow.cpp
|
| @@ -2649,25 +2649,12 @@ LayoutUnit LayoutBlockFlow::getClearDelta(LayoutBox* child,
|
|
|
| // At least one float is present. We need to perform the clearance
|
| // computation.
|
| - bool clearSet = child->style()->clear() != ClearNone;
|
| - LayoutUnit logicalBottom;
|
| - switch (child->style()->clear()) {
|
| - case ClearNone:
|
| - break;
|
| - case ClearLeft:
|
| - logicalBottom = lowestFloatLogicalBottom(FloatingObject::FloatLeft);
|
| - break;
|
| - case ClearRight:
|
| - logicalBottom = lowestFloatLogicalBottom(FloatingObject::FloatRight);
|
| - break;
|
| - case ClearBoth:
|
| - logicalBottom = lowestFloatLogicalBottom();
|
| - break;
|
| - }
|
| + EClear clear = child->style()->clear();
|
| + LayoutUnit logicalBottom = lowestFloatLogicalBottom(clear);
|
|
|
| // We also clear floats if we are too big to sit on the same line as a float
|
| // (and wish to avoid floats by default).
|
| - LayoutUnit result = clearSet
|
| + LayoutUnit result = clear != ClearNone
|
| ? (logicalBottom - logicalTop).clampNegativeToZero()
|
| : LayoutUnit();
|
| if (!result && child->avoidsFloats()) {
|
| @@ -3340,19 +3327,7 @@ void LayoutBlockFlow::childBecameNonInline(LayoutObject*) {
|
| void LayoutBlockFlow::clearFloats(EClear clear) {
|
| positionNewFloats(logicalHeight());
|
| // set y position
|
| - LayoutUnit newY;
|
| - switch (clear) {
|
| - case ClearLeft:
|
| - newY = lowestFloatLogicalBottom(FloatingObject::FloatLeft);
|
| - break;
|
| - case ClearRight:
|
| - newY = lowestFloatLogicalBottom(FloatingObject::FloatRight);
|
| - break;
|
| - case ClearBoth:
|
| - newY = lowestFloatLogicalBottom();
|
| - default:
|
| - break;
|
| - }
|
| + LayoutUnit newY = lowestFloatLogicalBottom(clear);
|
| if (size().height() < newY)
|
| setLogicalHeight(newY);
|
| }
|
| @@ -3653,14 +3628,8 @@ LayoutUnit LayoutBlockFlow::positionAndLayoutFloat(
|
| LayoutUnit childLogicalLeftMargin = style()->isLeftToRightDirection()
|
| ? marginStartForChild(childBox)
|
| : marginEndForChild(childBox);
|
| - if (childBox.style()->clear() & ClearLeft) {
|
| - logicalTop = std::max(lowestFloatLogicalBottom(FloatingObject::FloatLeft),
|
| - logicalTop);
|
| - }
|
| - if (childBox.style()->clear() & ClearRight) {
|
| - logicalTop = std::max(lowestFloatLogicalBottom(FloatingObject::FloatRight),
|
| - logicalTop);
|
| - }
|
| + logicalTop =
|
| + std::max(logicalTop, lowestFloatLogicalBottom(childBox.style()->clear()));
|
|
|
| bool isPaginated = view()->layoutState()->isPaginated();
|
| if (isPaginated && !childrenInline()) {
|
| @@ -3896,11 +3865,14 @@ void LayoutBlockFlow::addOverhangingFloats(LayoutBlockFlow* child,
|
| }
|
| }
|
|
|
| -LayoutUnit LayoutBlockFlow::lowestFloatLogicalBottom(
|
| - FloatingObject::Type floatType) const {
|
| - if (!m_floatingObjects)
|
| +LayoutUnit LayoutBlockFlow::lowestFloatLogicalBottom(EClear clear) const {
|
| + if (clear == ClearNone || !m_floatingObjects)
|
| return LayoutUnit();
|
|
|
| + FloatingObject::Type floatType =
|
| + clear == ClearLeft ? FloatingObject::FloatLeft
|
| + : clear == ClearRight ? FloatingObject::FloatRight
|
| + : FloatingObject::FloatLeftRight;
|
| return m_floatingObjects->lowestFloatLogicalBottom(floatType);
|
| }
|
|
|
|
|