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

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

Issue 2871733003: [LayoutNG] Refactor NGLineBreaker for ShapingLineBreaker (Closed)
Patch Set: Cleanup 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 side-by-side diff with in-line comments
Download patch
Index: third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h
diff --git a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h
index 2f9b4f2b75811fd8052498cb5f450776a0638583..de2f9d58e4f942427ad952e793ce728bebd0762c 100644
--- a/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h
+++ b/third_party/WebKit/Source/core/layout/ng/inline/ng_inline_layout_algorithm.h
@@ -9,6 +9,7 @@
#include "core/layout/ng/geometry/ng_logical_offset.h"
#include "core/layout/ng/inline/ng_inline_box_state.h"
#include "core/layout/ng/inline/ng_inline_break_token.h"
+#include "core/layout/ng/inline/ng_inline_item_result.h"
#include "core/layout/ng/inline/ng_line_height_metrics.h"
#include "core/layout/ng/ng_constraint_space_builder.h"
#include "core/layout/ng/ng_fragment_builder.h"
@@ -28,13 +29,9 @@ class NGTextFragmentBuilder;
// 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.
+// This class determines the position of NGInlineItem and build line boxes.
//
-// 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.
+// Uses NGLineBreaker to find NGInlineItems to form a line.
class CORE_EXPORT NGInlineLayoutAlgorithm final
: public NGLayoutAlgorithm<NGInlineNode, NGInlineBreakToken> {
public:
@@ -42,59 +39,23 @@ class CORE_EXPORT NGInlineLayoutAlgorithm final
NGConstraintSpace*,
NGInlineBreakToken* = nullptr);
- LayoutUnit MaxInlineSize() const { return max_inline_size_; }
+ // The available width for the current line.
+ LayoutUnit AvailableWidth() const;
- // Returns if the current items fit on a line.
- bool CanFitOnLine() const;
-
- // Returns if there were any items.
- bool HasItems() const;
-
- // Set the end offset.
- void SetEnd(unsigned end_offset);
-
- // Set the end offset if caller knows the inline size since the current end.
- void SetEnd(unsigned index,
- unsigned end_offset,
- LayoutUnit inline_size_since_current_end);
-
- // Create a line up to the end offset.
- // Then set the start to the end offset, and thus empty the current line.
+ // Create a line.
// @return false if the line does not fit in the constraint space in block
// direction.
- bool CreateLine();
-
- // Returns if a break opportunity was set on the current line.
- bool HasBreakOpportunity() const;
-
- // Returns if there were items after the last break opportunity.
- bool HasItemsAfterLastBreakOpportunity() const;
-
- // Set the break opportunity at the current end offset.
- void SetBreakOpportunity();
-
- // Create a line up to the last break opportunity.
- // Items after that are sent to the next line.
- // @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);
+ bool CreateLine(NGInlineItemResults*, RefPtr<NGInlineBreakToken> = nullptr);
RefPtr<NGLayoutResult> Layout() override;
- // Compute MinMaxContentSize by performing layout.
- // Unlike NGLayoutAlgorithm::ComputeMinMaxContentSize(), this function runs
- // part of layout operations and modifies the state of |this|.
- MinMaxContentSize ComputeMinMaxContentSizeByLayout();
-
- // Compute inline size of an NGInlineItem.
- // Same as NGInlineItem::InlineSize(), except that this function can compute
- // atomic inlines by performing layout.
- LayoutUnit InlineSize(const NGInlineItem&);
+ // Lays out the inline float.
+ // List of actions:
+ // - tries to position the float right away if we have enough space.
+ // - updates the current_opportunity if we actually place the float.
+ // - if it's too wide then we add the float to the unpositioned list so it can
+ // be positioned after we're done with the current line.
+ void LayoutAndPositionFloat(LayoutUnit end_position, LayoutObject*);
private:
bool IsHorizontalWritingMode() const { return is_horizontal_writing_mode_; }
@@ -103,38 +64,11 @@ class CORE_EXPORT NGInlineLayoutAlgorithm final
const ComputedStyle& FirstLineStyle() const;
const ComputedStyle& LineStyle() const;
- // Set the start and the end to the specified offset.
- // This empties the current line.
- void Initialize(unsigned index, unsigned offset);
-
- LayoutUnit InlineSize(const NGInlineItem&,
- unsigned start_offset,
- unsigned end_offset);
- LayoutUnit InlineSizeFromLayout(const NGInlineItem&);
- const NGLayoutResult* LayoutItem(const NGInlineItem&);
-
- struct LineItemChunk {
- unsigned index;
- unsigned start_offset;
- unsigned end_offset;
- LayoutUnit inline_size;
- };
-
- void BidiReorder(Vector<LineItemChunk, 32>*);
-
- // Lays out the inline float.
- // List of actions:
- // - tries to position the float right away if we have enough space.
- // - updates the current_opportunity if we actually place the float.
- // - if it's too wide then we add the float to the unpositioned list so it can
- // be positioned after we're done with the current line.
- void LayoutAndPositionFloat(LayoutUnit end_position, LayoutObject*);
+ void BidiReorder(NGInlineItemResults*);
- bool PlaceItems(const Vector<LineItemChunk, 32>&);
- void AccumulateUsedFonts(const NGInlineItem&,
- const LineItemChunk&,
- NGLineBoxFragmentBuilder*);
+ bool PlaceItems(NGInlineItemResults*, RefPtr<NGInlineBreakToken>);
LayoutUnit PlaceAtomicInline(const NGInlineItem&,
+ NGInlineItemResult*,
NGLineBoxFragmentBuilder*,
NGInlineBoxState*,
NGTextFragmentBuilder*);
@@ -142,16 +76,7 @@ class CORE_EXPORT NGInlineLayoutAlgorithm final
// Finds the next layout opportunity for the next text fragment.
void FindNextLayoutOpportunity();
- Vector<RefPtr<NGLayoutResult>, 32> layout_results_;
NGInlineLayoutStateStack box_states_;
- unsigned start_index_ = 0;
- unsigned start_offset_ = 0;
- unsigned last_index_ = 0;
- unsigned end_offset_ = 0;
- unsigned last_break_opportunity_index_ = 0;
- unsigned last_break_opportunity_offset_ = 0;
- LayoutUnit end_position_;
- LayoutUnit last_break_opportunity_position_;
LayoutUnit content_size_;
LayoutUnit max_inline_size_;
FontBaseline baseline_type_ = FontBaseline::kAlphabeticBaseline;
@@ -163,9 +88,6 @@ class CORE_EXPORT NGInlineLayoutAlgorithm final
unsigned disallow_first_line_rules_ : 1;
NGConstraintSpaceBuilder space_builder_;
-#if DCHECK_IS_ON()
- unsigned is_bidi_reordered_ : 1;
-#endif
};
} // namespace blink

Powered by Google App Engine
This is Rietveld 408576698