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

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

Issue 2772503004: [LayoutNG] Add NGInlineBreakToken and back of NGInlineLayoutAlgorithm (Closed)
Patch Set: 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_inline_layout_algorithm.h
diff --git a/third_party/WebKit/Source/core/layout/ng/ng_line_builder.h b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.h
similarity index 71%
rename from third_party/WebKit/Source/core/layout/ng/ng_line_builder.h
rename to third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.h
index 02a466cd16a5da339802d5856232ca612d58598f..dc05d3e231b22bd522798456c45ec2d685a9588b 100644
--- a/third_party/WebKit/Source/core/layout/ng/ng_line_builder.h
+++ b/third_party/WebKit/Source/core/layout/ng/ng_inline_layout_algorithm.h
@@ -2,13 +2,14 @@
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
-#ifndef NGLineBuilder_h
-#define NGLineBuilder_h
+#ifndef NGInlineLayoutAlgorithm_h
+#define NGInlineLayoutAlgorithm_h
#include "core/CoreExport.h"
#include "core/layout/ng/geometry/ng_logical_offset.h"
#include "core/layout/ng/ng_constraint_space_builder.h"
#include "core/layout/ng/ng_fragment_builder.h"
+#include "core/layout/ng/ng_layout_algorithm.h"
#include "core/layout/ng/ng_line_height_metrics.h"
#include "platform/fonts/FontBaseline.h"
#include "platform/heap/Handle.h"
@@ -17,21 +18,26 @@
namespace blink {
class NGConstraintSpace;
+class NGInlineBreakToken;
class NGInlineNode;
class NGLayoutInlineItem;
class NGLineBoxFragmentBuilder;
class NGTextFragmentBuilder;
-// NGLineBuilder creates the fragment tree for a line.
-// NGLineBuilder manages the current line as a range, |start| and |end|.
-// |end| can be extended multiple times before creating a line, usually until
-// |!CanFitOnLine()|.
-// |SetBreakOpportunity| can mark the last confirmed offset that can fit.
-class CORE_EXPORT NGLineBuilder final {
- STACK_ALLOCATED();
-
+// A class for inline layout (e.g. a <span> with no special style).
+//
+// Uses NGLineBreaker to find break opportunities, and let it call back to
+// construct linebox fragments and its wrapper box fragment.
+//
+// From a line breaker, this class manages the current line as a range, |start|
+// and |end|. |end| can be extended multiple times before creating a line,
+// usually until |!CanFitOnLine()|. |SetBreakOpportunity| can mark the last
+// confirmed offset that can fit.
+class CORE_EXPORT NGInlineLayoutAlgorithm final : public NGLayoutAlgorithm {
public:
- NGLineBuilder(NGInlineNode*, NGConstraintSpace*);
+ NGInlineLayoutAlgorithm(NGInlineNode*,
+ NGConstraintSpace*,
+ NGInlineBreakToken* = nullptr);
const NGConstraintSpace& ConstraintSpace() const {
return *constraint_space_;
@@ -45,10 +51,6 @@ class CORE_EXPORT NGLineBuilder final {
// Returns if there were any items.
bool HasItems() const;
- // Set the start offset.
- // Set the end as well, and therefore empties the current line.
- void SetStart(unsigned index, unsigned offset);
-
// Set the end offset.
void SetEnd(unsigned end_offset);
@@ -59,7 +61,9 @@ class CORE_EXPORT NGLineBuilder final {
// Create a line up to the end offset.
// Then set the start to the end offset, and thus empty the current line.
- void CreateLine();
+ // @return false if the line does not fit in the constraint space in block
+ // direction.
ikilpatrick 2017/03/27 09:19:59 +indent.
+ bool CreateLine();
// Returns if a break opportunity was set on the current line.
bool HasBreakOpportunity() const;
@@ -72,21 +76,25 @@ class CORE_EXPORT NGLineBuilder final {
// Create a line up to the last break opportunity.
// Items after that are sent to the next line.
- void CreateLineUpToLastBreakOpportunity();
+ // @return false if the line does not fit in the constraint space in block
+ // direction.
+ bool CreateLineUpToLastBreakOpportunity();
// Set the start offset of hangables; e.g., spaces or hanging punctuations.
// Hangable characters can go beyond the right margin, and are ignored for
// center/right alignment.
void SetStartOfHangables(unsigned offset);
- // Create fragments for all lines created so far.
- RefPtr<NGLayoutResult> CreateFragments();
+ RefPtr<NGLayoutResult> Layout() override;
- // Copy fragment data of all lines created by this NGLineBuilder to
- // LayoutBlockFlow.
- // This must run after |CreateFragments()|, and after the fragments it created
- // are placed.
- void CopyFragmentDataToLayoutBlockFlow();
+ // Compute MinMaxContentSize by performing layout.
+ // Unlike NGLayoutAlgorithm::ComputeMinMaxContentSize(), this function runs
+ // part of layout operations and modifies the state of |this|.
+ MinMaxContentSize ComputeMinMaxContentSizeByLayout();
+
+ // Copy fragment data of all lines to LayoutBlockFlow.
+ // TODO(kojii): Move to NGInlineNode (or remove when paint is implemented.)
+ void CopyFragmentDataToLayoutBlockFlow(NGLayoutResult*);
// Compute inline size of an NGLayoutInlineItem.
// Same as NGLayoutInlineItem::InlineSize(), except that this function can
@@ -96,6 +104,10 @@ class CORE_EXPORT NGLineBuilder final {
private:
bool IsHorizontalWritingMode() const { return is_horizontal_writing_mode_; }
+ // Set the start and the end to the specified offset.
+ // This empties the current line.
+ void Initialize(unsigned index, unsigned offset);
+
LayoutUnit InlineSize(const NGLayoutInlineItem&,
unsigned start_offset,
unsigned end_offset);
@@ -119,7 +131,7 @@ class CORE_EXPORT NGLineBuilder final {
// be positioned after we're done with the current line.
void LayoutAndPositionFloat(LayoutUnit end_position, LayoutObject*);
- void PlaceItems(const Vector<LineItemChunk, 32>&);
+ bool PlaceItems(const Vector<LineItemChunk, 32>&);
void AccumulateUsedFonts(const NGLayoutInlineItem&,
const LineItemChunk&,
NGLineBoxFragmentBuilder*);
@@ -145,7 +157,6 @@ class CORE_EXPORT NGLineBuilder final {
LayoutUnit content_size_;
LayoutUnit max_inline_size_;
NGFragmentBuilder container_builder_;
- RefPtr<NGLayoutResult> container_layout_result_;
FontBaseline baseline_type_ = FontBaseline::AlphabeticBaseline;
NGLogicalOffset bfc_offset_;
@@ -161,4 +172,4 @@ class CORE_EXPORT NGLineBuilder final {
} // namespace blink
-#endif // NGLineBuilder_h
+#endif // NGInlineLayoutAlgorithm_h

Powered by Google App Engine
This is Rietveld 408576698