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

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

Issue 2772503004: [LayoutNG] Add NGInlineBreakToken and back of NGInlineLayoutAlgorithm (Closed)
Patch Set: Resolved merge conflicts Created 3 years, 9 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/ng_line_breaker.cc
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.cc b/third_party/WebKit/Source/core/layout/ng/ng_line_breaker.cc
similarity index 63%
rename from third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.cc
rename to third_party/WebKit/Source/core/layout/ng/ng_line_breaker.cc
index 37a961d258ba46e2e556fb46972c5120f1c18110..ea02c74f6a1ccbde4187562b1fee82826ad72ec6 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_text_layout_algorithm.cc
+++ b/third_party/WebKit/Source/core/layout/ng/ng_line_breaker.cc
@@ -2,49 +2,31 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#include "core/layout/ng/ng_text_layout_algorithm.h"
+#include "core/layout/ng/ng_line_breaker.h"
#include "core/layout/ng/ng_box_fragment.h"
#include "core/layout/ng/ng_break_token.h"
#include "core/layout/ng/ng_constraint_space.h"
#include "core/layout/ng/ng_fragment_builder.h"
+#include "core/layout/ng/ng_inline_layout_algorithm.h"
#include "core/layout/ng/ng_inline_node.h"
#include "core/layout/ng/ng_layout_opportunity_iterator.h"
-#include "core/layout/ng/ng_line_builder.h"
#include "core/layout/ng/ng_text_fragment.h"
#include "core/style/ComputedStyle.h"
#include "platform/text/TextBreakIterator.h"
namespace blink {
-NGTextLayoutAlgorithm::NGTextLayoutAlgorithm(
- NGInlineNode* inline_box,
- NGBreakToken* break_token)
- : inline_box_(inline_box),
- break_token_(break_token) {
- DCHECK(inline_box_);
-}
-
-RefPtr<NGLayoutResult> NGTextLayoutAlgorithm::Layout() {
- NOTREACHED();
- return nullptr;
-}
-
static bool IsHangable(UChar ch) {
return ch == ' ';
}
-void NGTextLayoutAlgorithm::LayoutInline(NGLineBuilder* line_builder) {
- // TODO(kojii): Make this tickable. Each line is easy. Needs more thoughts
- // for each fragment in a line. Bidi reordering is probably atomic.
- // TODO(kojii): oof is not well-thought yet. The bottom static position may be
- // in the next line, https://github.com/w3c/csswg-drafts/issues/609
- const String& text_content = inline_box_->Text();
+void NGLineBreaker::BreakLines(NGInlineLayoutAlgorithm* algorithm,
+ const String& text_content,
+ unsigned current_offset) {
DCHECK(!text_content.isEmpty());
// TODO(kojii): Give the locale to LazyLineBreakIterator.
LazyLineBreakIterator line_break_iterator(text_content);
- unsigned current_offset = 0;
- line_builder->SetStart(0, current_offset);
const unsigned end_offset = text_content.length();
while (current_offset < end_offset) {
// Find the next break opportunity.
@@ -67,48 +49,50 @@ void NGTextLayoutAlgorithm::LayoutInline(NGLineBuilder* line_builder) {
current_offset++;
// Set the end to the next break opportunity.
- line_builder->SetEnd(current_offset);
+ algorithm->SetEnd(current_offset);
// If there are more available spaces, mark the break opportunity and fetch
// more text.
// TODO(layout-ng): check if the height of the linebox can fit within
// the current opportunity.
- if (line_builder->CanFitOnLine()) {
- line_builder->SetBreakOpportunity();
+ if (algorithm->CanFitOnLine()) {
+ algorithm->SetBreakOpportunity();
continue;
}
// Compute hangable characters if exists.
if (current_offset != start_of_hangables) {
- line_builder->SetStartOfHangables(start_of_hangables);
+ algorithm->SetStartOfHangables(start_of_hangables);
// If text before hangables can fit, include it in the current line.
- if (line_builder->CanFitOnLine())
- line_builder->SetBreakOpportunity();
+ if (algorithm->CanFitOnLine())
+ algorithm->SetBreakOpportunity();
}
- if (!line_builder->HasBreakOpportunity()) {
+ if (!algorithm->HasBreakOpportunity()) {
// The first word (break opportunity) did not fit on the line.
// Create a line including items that don't fit, allowing them to
// overflow.
- line_builder->CreateLine();
+ if (!algorithm->CreateLine())
+ return;
} else {
- line_builder->CreateLineUpToLastBreakOpportunity();
+ if (!algorithm->CreateLineUpToLastBreakOpportunity())
+ return;
// Items after the last break opportunity were sent to the next line.
// Set the break opportunity, or create a line if the word doesn't fit.
- if (line_builder->HasItems()) {
- if (!line_builder->CanFitOnLine())
- line_builder->CreateLine();
- else
- line_builder->SetBreakOpportunity();
+ if (algorithm->HasItems()) {
+ if (algorithm->CanFitOnLine())
+ algorithm->SetBreakOpportunity();
+ else if (!algorithm->CreateLine())
+ return;
}
}
}
// If inline children ended with items left in the line builder, create a line
// for them.
- if (line_builder->HasItems())
- line_builder->CreateLine();
+ if (algorithm->HasItems())
+ algorithm->CreateLine();
}
} // namespace blink
« no previous file with comments | « third_party/WebKit/Source/core/layout/ng/ng_line_breaker.h ('k') | third_party/WebKit/Source/core/layout/ng/ng_line_builder.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698