Commit 3f1eef6c authored by Kent Tamura's avatar Kent Tamura Committed by Commit Bot

De-duplicate empty line handling in InlineBlockBaseline() of LayoutBlock and LayoutBlockFlow

This CL merges duplicated code into LayoutBlock::EmptyLineBaseline().
This CL has no behavior changes.

Bug: 1040828
Change-Id: Ibef264899797f5e443b2485a098d555fe93a949b
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2015870Reviewed-by: default avatarYoshifumi Inoue <yosin@chromium.org>
Commit-Queue: Kent Tamura <tkent@chromium.org>
Cr-Commit-Position: refs/heads/master@{#734356}
parent 3c63ef2f
...@@ -1682,6 +1682,24 @@ bool LayoutBlock::HasLineIfEmpty() const { ...@@ -1682,6 +1682,24 @@ bool LayoutBlock::HasLineIfEmpty() const {
return false; return false;
} }
LayoutUnit LayoutBlock::EmptyLineBaseline(
LineDirectionMode line_direction) const {
if (!HasLineIfEmpty())
return LayoutUnit(-1);
const SimpleFontData* font_data = FirstLineStyle()->GetFont().PrimaryFont();
if (!font_data)
return LayoutUnit(-1);
const auto& font_metrics = font_data->GetFontMetrics();
const LayoutUnit line_height =
LineHeight(true, line_direction, kPositionOfInteriorLineBoxes);
const LayoutUnit border_padding = line_direction == kHorizontalLine
? BorderTop() + PaddingTop()
: BorderRight() + PaddingRight();
return LayoutUnit((font_metrics.Ascent() +
(line_height - font_metrics.Height()) / 2 + border_padding)
.ToInt());
}
LayoutUnit LayoutBlock::LineHeight(bool first_line, LayoutUnit LayoutBlock::LineHeight(bool first_line,
LineDirectionMode direction, LineDirectionMode direction,
LinePositionMode line_position_mode) const { LinePositionMode line_position_mode) const {
...@@ -1849,18 +1867,8 @@ LayoutUnit LayoutBlock::InlineBlockBaseline( ...@@ -1849,18 +1867,8 @@ LayoutUnit LayoutBlock::InlineBlockBaseline(
} }
} }
} }
const SimpleFontData* font_data = FirstLineStyle()->GetFont().PrimaryFont(); if (!have_normal_flow_child)
if (font_data && !have_normal_flow_child && HasLineIfEmpty()) { return EmptyLineBaseline(line_direction);
const FontMetrics& font_metrics = font_data->GetFontMetrics();
return LayoutUnit(
(font_metrics.Ascent() +
(LineHeight(true, line_direction, kPositionOfInteriorLineBoxes) -
font_metrics.Height()) /
2 +
(line_direction == kHorizontalLine ? BorderTop() + PaddingTop()
: BorderRight() + PaddingRight()))
.ToInt());
}
return LayoutUnit(-1); return LayoutUnit(-1);
} }
......
...@@ -486,6 +486,8 @@ class CORE_EXPORT LayoutBlock : public LayoutBox { ...@@ -486,6 +486,8 @@ class CORE_EXPORT LayoutBlock : public LayoutBox {
hit_test_action == kHitTestChildBlockBackground; hit_test_action == kHitTestChildBlockBackground;
} }
LayoutUnit EmptyLineBaseline(LineDirectionMode line_direction) const;
private: private:
LayoutObjectChildList* VirtualChildren() final { return Children(); } LayoutObjectChildList* VirtualChildren() final { return Children(); }
const LayoutObjectChildList* VirtualChildren() const final { const LayoutObjectChildList* VirtualChildren() const final {
......
...@@ -2541,23 +2541,7 @@ LayoutUnit LayoutBlockFlow::InlineBlockBaseline( ...@@ -2541,23 +2541,7 @@ LayoutUnit LayoutBlockFlow::InlineBlockBaseline(
return LastLineBox()->LogicalTop() + return LastLineBox()->LogicalTop() +
font_data->GetFontMetrics().Ascent(LastRootBox()->BaselineType()); font_data->GetFontMetrics().Ascent(LastRootBox()->BaselineType());
} }
if (!HasLineIfEmpty()) return EmptyLineBaseline(line_direction);
return LayoutUnit(-1);
const SimpleFontData* font_data = FirstLineStyle()->GetFont().PrimaryFont();
DCHECK(font_data);
if (!font_data)
return LayoutUnit(-1);
const FontMetrics& font_metrics = font_data->GetFontMetrics();
return LayoutUnit(
(font_metrics.Ascent() +
(LineHeight(true, line_direction, kPositionOfInteriorLineBoxes) -
font_metrics.Height()) /
2 +
(line_direction == kHorizontalLine ? BorderTop() + PaddingTop()
: BorderRight() + PaddingRight()))
.ToInt());
} }
void LayoutBlockFlow::RemoveFloatingObjectsFromDescendants() { void LayoutBlockFlow::RemoveFloatingObjectsFromDescendants() {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment