Index: third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp |
diff --git a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp |
index 3ccb629a003aa5a9be1522ea1f7ff8471c46fb8a..8522e467abc5153821f02689c3cafd215300ab21 100644 |
--- a/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp |
+++ b/third_party/WebKit/Source/core/layout/line/InlineFlowBox.cpp |
@@ -898,36 +898,11 @@ void InlineFlowBox::PlaceBoxesInBlockDirection( |
} |
} |
-LayoutUnit InlineFlowBox::MaxLogicalBottomForUnderline( |
- LineLayoutItem decoration_object, |
- LayoutUnit max_logical_bottom) const { |
- for (InlineBox* curr = FirstChild(); curr; curr = curr->NextOnLine()) { |
- if (curr->GetLineLayoutItem().IsOutOfFlowPositioned()) |
- continue; // Positioned placeholders don't affect calculations. |
- |
- // If the text decoration isn't in effect on the child, it must be outside |
- // of |decorationObject|. |
- if (!(curr->LineStyleRef().TextDecorationsInEffect() & |
- kTextDecorationUnderline)) |
- continue; |
- |
- if (decoration_object && decoration_object.IsLayoutInline() && |
- !IsAncestorAndWithinBlock(decoration_object, curr->GetLineLayoutItem())) |
- continue; |
- |
- if (curr->IsInlineFlowBox()) { |
- max_logical_bottom = ToInlineFlowBox(curr)->MaxLogicalBottomForUnderline( |
- decoration_object, max_logical_bottom); |
- } else if (curr->IsInlineTextBox()) { |
- max_logical_bottom = std::max(max_logical_bottom, curr->LogicalBottom()); |
- } |
- } |
- return max_logical_bottom; |
-} |
- |
-LayoutUnit InlineFlowBox::MinLogicalTopForUnderline( |
- LineLayoutItem decoration_object, |
- LayoutUnit min_logical_top) const { |
+LayoutUnit InlineFlowBox::FarthestPositionForUnderline( |
+ LineLayoutItem decorating_box, |
+ LineVerticalPositionType position_type, |
+ FontBaseline baseline_type, |
+ LayoutUnit farthest) const { |
for (InlineBox* curr = FirstChild(); curr; curr = curr->NextOnLine()) { |
if (curr->GetLineLayoutItem().IsOutOfFlowPositioned()) |
continue; // Positioned placeholders don't affect calculations. |
@@ -938,18 +913,23 @@ LayoutUnit InlineFlowBox::MinLogicalTopForUnderline( |
kTextDecorationUnderline)) |
continue; |
- if (decoration_object && decoration_object.IsLayoutInline() && |
- !IsAncestorAndWithinBlock(decoration_object, curr->GetLineLayoutItem())) |
+ if (decorating_box && decorating_box.IsLayoutInline() && |
+ !IsAncestorAndWithinBlock(decorating_box, curr->GetLineLayoutItem())) |
continue; |
if (curr->IsInlineFlowBox()) { |
- min_logical_top = ToInlineFlowBox(curr)->MinLogicalTopForUnderline( |
- decoration_object, min_logical_top); |
+ farthest = ToInlineFlowBox(curr)->FarthestPositionForUnderline( |
+ decorating_box, position_type, baseline_type, farthest); |
} else if (curr->IsInlineTextBox()) { |
- min_logical_top = std::min(min_logical_top, curr->LogicalTop()); |
+ LayoutUnit position = |
+ ToInlineTextBox(curr)->VerticalPosition(position_type, baseline_type); |
+ if (IsLineOverSide(position_type)) |
+ farthest = std::min(farthest, position); |
+ else |
+ farthest = std::max(farthest, position); |
} |
} |
- return min_logical_top; |
+ return farthest; |
} |
void InlineFlowBox::FlipLinesInBlockDirection(LayoutUnit line_top, |