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

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

Issue 2867293002: [LayoutNG] Compute baseline from fragment tree (Closed)
Patch Set: Cleanup Created 3 years, 5 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_line_breaker.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc
index f2543da65ef54e28b6f9ee6494ab46dd7a800974..21d768c611a5703d276e51bb71dc1a69de714713 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_line_breaker.cc
@@ -164,7 +164,7 @@ void NGLineBreaker::BreakLine(NGLineInfo* line_info) {
if (item.Type() == NGInlineItem::kText) {
state = HandleText(*item_results, item, item_result);
} else if (item.Type() == NGInlineItem::kAtomicInline) {
- state = HandleAtomicInline(item, item_result);
+ state = HandleAtomicInline(item, item_result, *line_info);
} else if (item.Type() == NGInlineItem::kControl) {
state = HandleControlItem(item, item_result);
if (state == LineBreakState::kForcedBreak) {
@@ -352,15 +352,28 @@ NGLineBreaker::LineBreakState NGLineBreaker::HandleControlItem(
NGLineBreaker::LineBreakState NGLineBreaker::HandleAtomicInline(
const NGInlineItem& item,
- NGInlineItemResult* item_result) {
+ NGInlineItemResult* item_result,
+ const NGLineInfo& line_info) {
DCHECK_EQ(item.Type(), NGInlineItem::kAtomicInline);
if (!should_create_line_box_)
SetShouldCreateLineBox();
- NGBlockNode node = NGBlockNode(ToLayoutBox(item.GetLayoutObject()));
+ LayoutBox* layout_box = ToLayoutBox(item.GetLayoutObject());
+ NGBlockNode node = NGBlockNode(layout_box);
const ComputedStyle& style = node.Style();
NGConstraintSpaceBuilder constraint_space_builder(constraint_space_);
+ // Request to compute baseline during the layout, except when we know the box
+ // would synthesize box-baseline.
+ if (NGBaseline::ShouldPropagateBaselines(layout_box)) {
+ constraint_space_builder.AddBaselineRequest(
+ line_info.UseFirstLineStyle()
+ ? NGBaselineAlgorithmType::kAtomicInlineForFirstLine
+ : NGBaselineAlgorithmType::kAtomicInline,
+ IsHorizontalWritingMode(constraint_space_->WritingMode())
+ ? FontBaseline::kAlphabeticBaseline
+ : FontBaseline::kIdeographicBaseline);
+ }
RefPtr<NGConstraintSpace> constraint_space =
constraint_space_builder.SetIsNewFormattingContext(true)
.SetIsShrinkToFit(true)

Powered by Google App Engine
This is Rietveld 408576698