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

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

Issue 2851983002: [LayoutNG] Change anonymous LayoutBlockFlow to LayoutNGBlockFlow (Closed)
Patch Set: fix test expectations. Created 3 years, 7 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "core/layout/ng/inline/ng_inline_layout_algorithm.h" 5 #include "core/layout/ng/inline/ng_inline_layout_algorithm.h"
6 6
7 #include "core/layout/ng/inline/ng_bidi_paragraph.h" 7 #include "core/layout/ng/inline/ng_bidi_paragraph.h"
8 #include "core/layout/ng/inline/ng_inline_break_token.h" 8 #include "core/layout/ng/inline/ng_inline_break_token.h"
9 #include "core/layout/ng/inline/ng_inline_node.h" 9 #include "core/layout/ng/inline/ng_inline_node.h"
10 #include "core/layout/ng/inline/ng_line_box_fragment.h" 10 #include "core/layout/ng/inline/ng_line_box_fragment.h"
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
69 , 69 ,
70 is_bidi_reordered_(false) 70 is_bidi_reordered_(false)
71 #endif 71 #endif
72 { 72 {
73 if (!is_horizontal_writing_mode_) 73 if (!is_horizontal_writing_mode_)
74 baseline_type_ = FontBaseline::kIdeographicBaseline; 74 baseline_type_ = FontBaseline::kIdeographicBaseline;
75 if (break_token) 75 if (break_token)
76 Initialize(break_token->ItemIndex(), break_token->TextOffset()); 76 Initialize(break_token->ItemIndex(), break_token->TextOffset());
77 else 77 else
78 Initialize(0, 0); 78 Initialize(0, 0);
79
80 // BFC offset is known for inline fragments.
81 MaybeUpdateFragmentBfcOffset(ConstraintSpace(), ConstraintSpace().BfcOffset(),
82 &container_builder_);
83 } 79 }
84 80
85 bool NGInlineLayoutAlgorithm::IsFirstLine() const { 81 bool NGInlineLayoutAlgorithm::IsFirstLine() const {
86 return !disallow_first_line_rules_ && container_builder_.Children().IsEmpty(); 82 return !disallow_first_line_rules_ && container_builder_.Children().IsEmpty();
87 } 83 }
88 84
89 const ComputedStyle& NGInlineLayoutAlgorithm::FirstLineStyle() const { 85 const ComputedStyle& NGInlineLayoutAlgorithm::FirstLineStyle() const {
90 return Node()->GetLayoutObject()->FirstLineStyleRef(); 86 return Node()->GetLayoutObject()->FirstLineStyleRef();
91 } 87 }
92 88
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after
243 239
244 bool NGInlineLayoutAlgorithm::CreateLine() { 240 bool NGInlineLayoutAlgorithm::CreateLine() {
245 if (HasItemsAfterLastBreakOpportunity()) 241 if (HasItemsAfterLastBreakOpportunity())
246 SetBreakOpportunity(); 242 SetBreakOpportunity();
247 return CreateLineUpToLastBreakOpportunity(); 243 return CreateLineUpToLastBreakOpportunity();
248 } 244 }
249 245
250 bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() { 246 bool NGInlineLayoutAlgorithm::CreateLineUpToLastBreakOpportunity() {
251 const Vector<NGInlineItem>& items = Node()->Items(); 247 const Vector<NGInlineItem>& items = Node()->Items();
252 248
249 // TODO(crbug.com/716930): We may be an empty LayoutInline due to splitting.
250 // Only resolve our BFC offset if we know that we are non-empty as we may
251 // need to pass through our margin strut.
252 if (!items.IsEmpty()) {
253 NGLogicalOffset bfc_offset = ConstraintSpace().BfcOffset();
254 bfc_offset.block_offset += ConstraintSpace().MarginStrut().Sum();
255 MaybeUpdateFragmentBfcOffset(ConstraintSpace(), bfc_offset,
256 &container_builder_);
257 }
258
253 // Create a list of LineItemChunk from |start| and |last_break_opportunity|. 259 // Create a list of LineItemChunk from |start| and |last_break_opportunity|.
254 // TODO(kojii): Consider refactoring LineItemChunk once NGLineBuilder's public 260 // TODO(kojii): Consider refactoring LineItemChunk once NGLineBuilder's public
255 // API is more finalized. It does not fit well with the current API. 261 // API is more finalized. It does not fit well with the current API.
256 Vector<LineItemChunk, 32> line_item_chunks; 262 Vector<LineItemChunk, 32> line_item_chunks;
257 unsigned start_offset = start_offset_; 263 unsigned start_offset = start_offset_;
258 for (unsigned i = start_index_; i <= last_break_opportunity_index_; i++) { 264 for (unsigned i = start_index_; i <= last_break_opportunity_index_; i++) {
259 const NGInlineItem& item = items[i]; 265 const NGInlineItem& item = items[i];
260 unsigned end_offset = 266 unsigned end_offset =
261 std::min(item.EndOffset(), last_break_opportunity_offset_); 267 std::min(item.EndOffset(), last_break_opportunity_offset_);
262 line_item_chunks.push_back( 268 line_item_chunks.push_back(
(...skipping 301 matching lines...) Expand 10 before | Expand all | Expand 10 after
564 // TODO(eae): Does this need the LayoutText::LocaleForLineBreakIterator 570 // TODO(eae): Does this need the LayoutText::LocaleForLineBreakIterator
565 // logic to switch the locale based on breaking mode? 571 // logic to switch the locale based on breaking mode?
566 NGLineBreaker line_breaker(Node()->Style().Locale()); 572 NGLineBreaker line_breaker(Node()->Style().Locale());
567 line_breaker.BreakLines(this, Node()->Text(), start_offset_); 573 line_breaker.BreakLines(this, Node()->Text(), start_offset_);
568 } 574 }
569 575
570 // TODO(kojii): Check if the line box width should be content or available. 576 // TODO(kojii): Check if the line box width should be content or available.
571 NGLogicalSize size(max_inline_size_, content_size_); 577 NGLogicalSize size(max_inline_size_, content_size_);
572 container_builder_.SetSize(size).SetOverflowSize(size); 578 container_builder_.SetSize(size).SetOverflowSize(size);
573 579
580 // TODO(crbug.com/716930): We may be an empty LayoutInline due to splitting.
581 // Margin struts shouldn't need to be passed through like this once we've
582 // removed LayoutInline splitting.
583 if (!container_builder_.BfcOffset()) {
584 container_builder_.SetEndMarginStrut(ConstraintSpace().MarginStrut());
585 }
586
574 return container_builder_.ToBoxFragment(); 587 return container_builder_.ToBoxFragment();
575 } 588 }
576 589
577 MinMaxContentSize NGInlineLayoutAlgorithm::ComputeMinMaxContentSizeByLayout() { 590 MinMaxContentSize NGInlineLayoutAlgorithm::ComputeMinMaxContentSizeByLayout() {
578 DCHECK_EQ(ConstraintSpace().AvailableSize().inline_size, LayoutUnit()); 591 DCHECK_EQ(ConstraintSpace().AvailableSize().inline_size, LayoutUnit());
579 DCHECK_EQ(ConstraintSpace().AvailableSize().block_size, NGSizeIndefinite); 592 DCHECK_EQ(ConstraintSpace().AvailableSize().block_size, NGSizeIndefinite);
580 if (!Node()->Text().IsEmpty()) { 593 if (!Node()->Text().IsEmpty()) {
581 NGLineBreaker line_breaker(Node()->Style().Locale()); 594 NGLineBreaker line_breaker(Node()->Style().Locale());
582 line_breaker.BreakLines(this, Node()->Text(), start_offset_); 595 line_breaker.BreakLines(this, Node()->Text(), start_offset_);
583 } 596 }
584 MinMaxContentSize sizes; 597 MinMaxContentSize sizes;
585 sizes.min_content = MaxInlineSize(); 598 sizes.min_content = MaxInlineSize();
586 599
587 // max-content is the width without any line wrapping. 600 // max-content is the width without any line wrapping.
588 // TODO(kojii): Implement hard breaks (<br> etc.) to break. 601 // TODO(kojii): Implement hard breaks (<br> etc.) to break.
589 for (const auto& item : Node()->Items()) 602 for (const auto& item : Node()->Items())
590 sizes.max_content += InlineSize(item); 603 sizes.max_content += InlineSize(item);
591 604
592 return sizes; 605 return sizes;
593 } 606 }
594 607
595 } // namespace blink 608 } // namespace blink
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698