Index: third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
diff --git a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
index 87a2f7d19ded9ab6783cb4204caba738a1f3e77e..8a6710236b99001c8a4cba3b65c13aaeb0a4c091 100644 |
--- a/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
+++ b/third_party/WebKit/Source/core/layout/LayoutBlock.cpp |
@@ -40,7 +40,6 @@ |
#include "core/layout/HitTestLocation.h" |
#include "core/layout/HitTestResult.h" |
#include "core/layout/LayoutAnalyzer.h" |
-#include "core/layout/LayoutDeprecatedFlexibleBox.h" |
#include "core/layout/LayoutFlexibleBox.h" |
#include "core/layout/LayoutFlowThread.h" |
#include "core/layout/LayoutGrid.h" |
@@ -2089,16 +2088,17 @@ LayoutUnit LayoutBlock::minLineHeightForReplacedObject(bool isFirstLine, LayoutU |
return std::max<LayoutUnit>(replacedHeight, lineHeight(isFirstLine, isHorizontalWritingMode() ? HorizontalLine : VerticalLine, PositionOfInteriorLineBoxes)); |
} |
+// TODO(mstensho): Figure out if all of this baseline code is needed here, or if it should be moved |
+// down to LayoutBlockFlow. LayoutDeprecatedFlexibleBox and LayoutGrid lack baseline calculation |
+// overrides, so the code is here just for them. Just walking the block children in logical order |
+// seems rather wrong for those two layout modes, though. |
+ |
int LayoutBlock::firstLineBoxBaseline() const |
{ |
+ ASSERT(!childrenInline()); |
if (isWritingModeRoot() && !isRubyRun()) |
return -1; |
- if (childrenInline()) { |
- if (firstLineBox()) |
- return firstLineBox()->logicalTop() + style(true)->getFontMetrics().ascent(firstRootBox()->baselineType()); |
- return -1; |
- } |
for (LayoutBox* curr = firstChildBox(); curr; curr = curr->nextSiblingBox()) { |
if (!curr->isFloatingOrOutOfFlowPositioned()) { |
int result = curr->firstLineBoxBaseline(); |
@@ -2111,15 +2111,7 @@ int LayoutBlock::firstLineBoxBaseline() const |
int LayoutBlock::inlineBlockBaseline(LineDirectionMode lineDirection) const |
{ |
- // CSS2.1 states that the baseline of an 'inline-block' is: |
- // the baseline of the last line box in the normal flow, unless it has |
- // either no in-flow line boxes or if its 'overflow' property has a computed |
- // value other than 'visible', in which case the baseline is the bottom |
- // margin edge. |
- // We likewise avoid using the last line box in the case of size containment, |
- // where the block's contents shouldn't be considered when laying out its |
- // ancestors or siblings. |
- |
+ ASSERT(!childrenInline()); |
if ((!style()->isOverflowVisible() && !shouldIgnoreOverflowPropertyForInlineBlockBaseline()) || style()->containsSize()) { |
// We are not calling LayoutBox::baselinePosition here because the caller should add the margin-top/margin-right, not us. |
return lineDirection == HorizontalLine ? size().height() + marginBottom() : size().width() + marginLeft(); |
@@ -2128,18 +2120,6 @@ int LayoutBlock::inlineBlockBaseline(LineDirectionMode lineDirection) const |
if (isWritingModeRoot() && !isRubyRun()) |
return -1; |
- if (childrenInline()) { |
- if (!firstLineBox() && hasLineIfEmpty()) { |
- const FontMetrics& fontMetrics = firstLineStyle()->getFontMetrics(); |
- return fontMetrics.ascent() |
- + (lineHeight(true, lineDirection, PositionOfInteriorLineBoxes) - fontMetrics.height()) / 2 |
- + (lineDirection == HorizontalLine ? borderTop() + paddingTop() : borderRight() + paddingRight()); |
- } |
- if (lastLineBox()) |
- return lastLineBox()->logicalTop() + style(lastLineBox() == firstLineBox())->getFontMetrics().ascent(lastRootBox()->baselineType()); |
- return -1; |
- } |
- |
bool haveNormalFlowChild = false; |
for (LayoutBox* curr = lastChildBox(); curr; curr = curr->previousSiblingBox()) { |
if (!curr->isFloatingOrOutOfFlowPositioned()) { |