Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Unified Diff: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc

Issue 2943983002: [LayoutNG] Implement CSS 'text-indent' property (Closed)
Patch Set: Cleanup Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
index fedf9350b2f8b939f4faadddf2ca9234f2298f7d..7c6213226c1891fda56372ce1c2bd9b2de66ef62 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.cc
@@ -192,8 +192,8 @@ bool NGInlineLayoutAlgorithm::PlaceItems(
box = box_states_.OnCloseTag(item, &line_box, box, baseline_type_);
continue;
} else if (item.Type() == NGInlineItem::kAtomicInline) {
- box = PlaceAtomicInline(item, &item_result, line_info->IsFirstLine(),
- position, &line_box, &text_builder);
+ box = PlaceAtomicInline(item, &item_result, *line_info, position,
+ &line_box, &text_builder);
} else if (item.Type() == NGInlineItem::kOutOfFlowPositioned) {
// TODO(layout-dev): Report the correct static position for the out of
// flow descendant. We can't do this here yet as it doesn't know the
@@ -247,12 +247,20 @@ bool NGInlineLayoutAlgorithm::PlaceItems(
// the line box to the line top.
line_box.MoveChildrenInBlockDirection(baseline);
+ // Compute the offset of the line box.
LayoutUnit inline_size = position;
NGLogicalOffset offset(line_info->LineLeft(),
baseline - box_states_.LineBoxState().metrics.ascent);
+ LayoutUnit available_width = line_info->AvailableWidth();
+ if (LayoutUnit text_indent = line_info->TextIndent()) {
+ // Move the line box by indent. Negative indents are ink overflow, let the
+ // line box overflow from the container box.
+ if (IsLtr(Node().BaseDirection()))
+ offset.inline_offset += text_indent;
+ available_width -= text_indent;
+ }
ApplyTextAlign(line_style.GetTextAlign(line_info->IsLastLine()),
- &offset.inline_offset, inline_size,
- line_info->AvailableWidth());
+ &offset.inline_offset, inline_size, available_width);
line_box.SetInlineSize(inline_size);
container_builder_.AddChild(line_box.ToLineBoxFragment(), offset);
@@ -268,7 +276,7 @@ bool NGInlineLayoutAlgorithm::PlaceItems(
NGInlineBoxState* NGInlineLayoutAlgorithm::PlaceAtomicInline(
const NGInlineItem& item,
NGInlineItemResult* item_result,
- bool is_first_line,
+ const NGLineInfo& line_info,
LayoutUnit position,
NGLineBoxFragmentBuilder* line_box,
NGTextFragmentBuilder* text_builder) {
@@ -293,7 +301,7 @@ NGInlineBoxState* NGInlineLayoutAlgorithm::PlaceAtomicInline(
IsHorizontalWritingMode() ? LineDirectionMode::kHorizontalLine
: LineDirectionMode::kVerticalLine;
LayoutUnit baseline_offset(layout_box->BaselinePosition(
- baseline_type_, is_first_line, line_direction_mode));
+ baseline_type_, line_info.UseFirstLineStyle(), line_direction_mode));
NGLineHeightMetrics metrics(baseline_offset, block_size - baseline_offset);
box->metrics.Unite(metrics);

Powered by Google App Engine
This is Rietveld 408576698