| Index: ui/gfx/render_text.h
|
| diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h
|
| index 34277400b7369e28c41e120950e357555c8c9415..6fd9b8e8e5d645092f2210359ee4ca6b14e0c9f4 100644
|
| --- a/ui/gfx/render_text.h
|
| +++ b/ui/gfx/render_text.h
|
| @@ -111,6 +111,40 @@ class StyleIterator {
|
| DISALLOW_COPY_AND_ASSIGN(StyleIterator);
|
| };
|
|
|
| +// Line segments are slices of the layout text to be rendered on a single line.
|
| +// This structure holds the logical and visual position information for a line
|
| +// segment.
|
| +struct LineSegment {
|
| + LineSegment();
|
| +
|
| + // X coordinates of this line segment in text coordinate space.
|
| + ui::Range x_range;
|
| +
|
| + // The character range this segment corresponds to.
|
| + ui::Range char_range;
|
| +
|
| + // Index of the text run that generated this segment.
|
| + size_t run;
|
| +};
|
| +
|
| +// Holds a list of line segments and metrics for a line.
|
| +struct Line {
|
| + Line();
|
| +
|
| + // Segments that make up this line in visual order.
|
| + std::vector<LineSegment> segments;
|
| +
|
| + // Total size of this line. Width is the sum of |segment| widths, height is
|
| + // the maximum height among |segments|.
|
| + Size size;
|
| +
|
| + // Sum of the |height| fields of preceding lines.
|
| + int preceding_heights;
|
| +
|
| + // Maximum baseline of all runs on this line.
|
| + int baseline;
|
| +};
|
| +
|
| } // namespace internal
|
|
|
| // RenderText represents an abstract model of styled text and its corresponding
|
| @@ -186,6 +220,11 @@ class UI_EXPORT RenderText {
|
| // cleared when SetText or SetObscured is called.
|
| void SetObscuredRevealIndex(int index);
|
|
|
| + // TODO(ckocagil): Multiline text rendering is currently only supported on
|
| + // Windows. Support other platforms.
|
| + bool multiline() const { return multiline_; }
|
| + void SetMultiline(bool multiline);
|
| +
|
| // Set the maximum length of the displayed layout text, not the actual text.
|
| // A |length| of 0 forgoes a hard limit, but does not guarantee proper
|
| // functionality of very long strings. Applies to subsequent SetText calls.
|
| @@ -287,6 +326,11 @@ class UI_EXPORT RenderText {
|
| // the margin area of text shadows.
|
| virtual Size GetStringSize() = 0;
|
|
|
| + // Returns the size required to display the current multiline text, which is
|
| + // horizontally capped by the width of |display_rect()|.
|
| + // TODO(ckocagil): Merge with GetContentWidth.
|
| + virtual Size GetMultilineTextSize() = 0;
|
| +
|
| // Returns the width of content, which reserves room for the cursor if
|
| // |cursor_enabled_| is true.
|
| int GetContentWidth();
|
| @@ -348,6 +392,9 @@ class UI_EXPORT RenderText {
|
| const BreakList<SkColor>& colors() const { return colors_; }
|
| const std::vector<BreakList<bool> >& styles() const { return styles_; }
|
|
|
| + const std::vector<internal::Line>& lines() const { return lines_; }
|
| + void set_lines(std::vector<internal::Line>* lines) { lines_.swap(*lines); }
|
| +
|
| const Vector2d& GetUpdatedDisplayOffset();
|
|
|
| void set_cached_bounds_and_offset_valid(bool valid) {
|
| @@ -406,7 +453,7 @@ class UI_EXPORT RenderText {
|
| // Reset the layout to be invalid.
|
| virtual void ResetLayout() = 0;
|
|
|
| - // Ensure the text is laid out.
|
| + // Ensure the text is laid out, lines are computed, and |lines_| is valid.
|
| virtual void EnsureLayout() = 0;
|
|
|
| // Draw the text.
|
| @@ -415,22 +462,29 @@ class UI_EXPORT RenderText {
|
| // Returns the text used for layout, which may be obscured or truncated.
|
| const base::string16& GetLayoutText() const;
|
|
|
| + // Returns layout text positions that are suitable for breaking lines at.
|
| + const BreakList<size_t>& GetLineBreaks();
|
| +
|
| // Apply (and undo) temporary composition underlines and selection colors.
|
| void ApplyCompositionAndSelectionStyles();
|
| void UndoCompositionAndSelectionStyles();
|
|
|
| - // Returns the text offset from the origin after applying text alignment and
|
| + // Returns the line offset from the origin after applying text alignment and
|
| // display offset.
|
| - Vector2d GetTextOffset();
|
| + Vector2d GetLineOffset(size_t line_number);
|
|
|
| - // Convert points from the text space to the view space and back.
|
| - // Handles the display area, display offset, and the application LTR/RTL mode.
|
| + // Convert points from the text space to the view space and back. Handles the
|
| + // display area, display offset, application LTR/RTL mode and multi-line.
|
| Point ToTextPoint(const Point& point);
|
| Point ToViewPoint(const Point& point);
|
|
|
| - // Returns the text offset from the origin, taking into account text alignment
|
| + // Convert the range in text coordinates to rects in view coordinates that
|
| + // cover the given range.
|
| + std::vector<Rect> TextBoundsToViewBounds(const ui::Range& x);
|
| +
|
| + // Returns the line offset from the origin, taking into account text alignment
|
| // only.
|
| - Vector2d GetAlignmentOffset();
|
| + Vector2d GetAlignmentOffset(size_t line_number);
|
|
|
| // Applies fade effects to |renderer|.
|
| void ApplyFadeEffects(internal::SkiaTextRenderer* renderer);
|
| @@ -457,6 +511,8 @@ class UI_EXPORT RenderText {
|
| FRIEND_TEST_ALL_PREFIXES(RenderTextTest, EdgeSelectionModels);
|
| FRIEND_TEST_ALL_PREFIXES(RenderTextTest, GetTextOffset);
|
| FRIEND_TEST_ALL_PREFIXES(RenderTextTest, GetTextOffsetHorizontalDefaultInRTL);
|
| + FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_MinWidth);
|
| + FRIEND_TEST_ALL_PREFIXES(RenderTextTest, Multiline_NormalWidth);
|
|
|
| // Set the cursor to |position|, with the caret trailing the previous
|
| // grapheme, or if there is no previous grapheme, leading the cursor position.
|
| @@ -547,6 +603,10 @@ class UI_EXPORT RenderText {
|
| // The obscured and/or truncated text that will be displayed.
|
| base::string16 layout_text_;
|
|
|
| + // Whether the text should be broken into multiple lines. Uses the width of
|
| + // |display_rect_| as the width cap.
|
| + bool multiline_;
|
| +
|
| // Fade text head and/or tail, if text doesn't fit into |display_rect_|.
|
| bool fade_head_;
|
| bool fade_tail_;
|
| @@ -574,6 +634,13 @@ class UI_EXPORT RenderText {
|
| // Text shadows to be drawn.
|
| ShadowValues text_shadows_;
|
|
|
| + // BreakList to find valid positions to break the line at.
|
| + BreakList<size_t> line_breaks_;
|
| +
|
| + // Lines computed by EnsureLayout. These should be invalidated with
|
| + // ResetLayout and on |display_rect_| changes.
|
| + std::vector<internal::Line> lines_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(RenderText);
|
| };
|
|
|
|
|