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

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

Issue 2910133002: [LayoutNG] Handle empty inlines and border edges (Closed)
Patch Set: Rebase 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_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 cf7d1dc14619c4d2adc35b358beed9e307556003..ecd4e770fe2e55245c88f9011aca15e9ba703a19 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
@@ -292,20 +292,26 @@ void NGLineBreaker::HandleFloat(const NGInlineItem& item,
void NGLineBreaker::HandleOpenTag(const NGInlineItem& item,
NGInlineItemResult* item_result) {
- if (item.HasStartEdge()) {
- DCHECK(item.Style());
- // TODO(kojii): We compute 16 values and discard 12 out of that, and do it 3
- // times per element. We may want to cache this. crrev.com/2865903002/#msg14
- NGBoxStrut margins = ComputeMargins(*constraint_space_, *item.Style(),
- constraint_space_->WritingMode(),
- constraint_space_->Direction());
- NGBoxStrut borders = ComputeBorders(*constraint_space_, *item.Style());
- NGBoxStrut paddings = ComputePadding(*constraint_space_, *item.Style());
- item_result->inline_size =
- margins.inline_start + borders.inline_start + paddings.inline_start;
- position_ += item_result->inline_size;
+ DCHECK(item.Style());
+ const ComputedStyle& style = *item.Style();
+ if (style.HasBorder() || style.HasPadding() ||
+ (style.HasMargin() && item.HasStartEdge())) {
+ NGBoxStrut borders = ComputeBorders(*constraint_space_, style);
+ NGBoxStrut paddings = ComputePadding(*constraint_space_, style);
+ item_result->borders_paddings_block_start =
+ borders.block_start + paddings.block_start;
+ item_result->borders_paddings_block_end =
+ borders.block_end + paddings.block_end;
+ if (item.HasStartEdge()) {
+ item_result->margins = ComputeMargins(*constraint_space_, style,
+ constraint_space_->WritingMode(),
+ constraint_space_->Direction());
+ item_result->inline_size = item_result->margins.inline_start +
+ borders.inline_start + paddings.inline_start;
+ position_ += item_result->inline_size;
+ }
}
- UpdateBreakIterator(*item.Style());
+ UpdateBreakIterator(style);
MoveToNextOf(item);
}
@@ -313,13 +319,13 @@ void NGLineBreaker::HandleCloseTag(const NGInlineItem& item,
NGInlineItemResult* item_result) {
if (item.HasEndEdge()) {
DCHECK(item.Style());
- NGBoxStrut margins = ComputeMargins(*constraint_space_, *item.Style(),
- constraint_space_->WritingMode(),
- constraint_space_->Direction());
+ item_result->margins = ComputeMargins(*constraint_space_, *item.Style(),
+ constraint_space_->WritingMode(),
+ constraint_space_->Direction());
NGBoxStrut borders = ComputeBorders(*constraint_space_, *item.Style());
NGBoxStrut paddings = ComputePadding(*constraint_space_, *item.Style());
- item_result->inline_size =
- margins.inline_end + borders.inline_end + paddings.inline_end;
+ item_result->inline_size = item_result->margins.inline_end +
+ borders.inline_end + paddings.inline_end;
position_ += item_result->inline_size;
}
DCHECK(item.GetLayoutObject() && item.GetLayoutObject()->Parent());

Powered by Google App Engine
This is Rietveld 408576698