Chromium Code Reviews| Index: ui/gfx/render_text.h |
| diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h |
| index c10b8abf3d63c2177ee68269b73a0fc9888312a6..11ee680b6e85ecec05c561973b0c45a1fd7b82ec 100644 |
| --- a/ui/gfx/render_text.h |
| +++ b/ui/gfx/render_text.h |
| @@ -13,6 +13,7 @@ |
| #include "base/gtest_prod_util.h" |
| #include "base/i18n/rtl.h" |
| +#include "base/memory/scoped_vector.h" |
| #include "base/strings/string16.h" |
| #include "skia/ext/refptr.h" |
| #include "third_party/skia/include/core/SkColor.h" |
| @@ -111,6 +112,11 @@ class StyleIterator { |
| DISALLOW_COPY_AND_ASSIGN(StyleIterator); |
| }; |
| +struct LineSegment { |
|
Alexei Svitkine (slow)
2013/07/09 15:35:13
This should live in the class unless you're planni
msw
2013/07/10 04:01:56
Add a struct comment to describe what this is.
(a
msw
2013/07/10 04:01:56
I disagree; SkiaTextRenderer and StyleIterator are
ckocagil
2013/07/13 16:05:10
Keeping it in internal namespace for now.
|
| + ui::Range x_pos; // x coord, in text coordinates |
| + ui::Range char_pos; |
| +}; |
| + |
| } // namespace internal |
| // RenderText represents an abstract model of styled text and its corresponding |
| @@ -186,6 +192,9 @@ class UI_EXPORT RenderText { |
| bool obscured() const { return obscured_; } |
| void SetObscured(bool obscured); |
| + bool multiline() const { return multiline_; } |
| + void set_multiline(bool multiline) { multiline_ = multiline; } |
| + |
| // Makes a char in obscured text at |index| to be revealed. |index| should be |
| // a UTF16 text index. If there is a previous revealed index, the previous one |
| // is cleared and only the last set index will be revealed. If |index| is -1 |
| @@ -288,6 +297,8 @@ class UI_EXPORT RenderText { |
| // the margin area of text shadows. |
| virtual Size GetStringSize() = 0; |
| + virtual Size RenderText::GetMultilineTextSize() = 0; |
|
msw
2013/07/10 04:01:56
Remove "RenderText::" and add a comment (explain t
ckocagil
2013/07/13 16:05:10
Done.
|
| + |
| // Returns the width of content, which reserves room for the cursor if |
| // |cursor_enabled_| is true. |
| int GetContentWidth(); |
| @@ -348,6 +359,27 @@ class UI_EXPORT RenderText { |
| const BreakList<SkColor>& colors() const { return colors_; } |
| const std::vector<BreakList<bool> >& styles() const { return styles_; } |
| + const std::vector<size_t>& line_breaks() const { return line_breaks_; } |
| + |
| + const std::vector<ScopedVector<internal::LineSegment> >& lines() const { |
| + return lines_; |
| + } |
| + void set_lines(std::vector<ScopedVector<internal::LineSegment> >* lines) { |
| + lines_.swap(*lines); |
| + } |
| + |
| + bool lines_valid() const { return lines_valid_; } |
| + void set_lines_valid(bool lines_valid) { |
|
msw
2013/07/10 04:01:56
nit: rename the param to |valid| to fit this on on
ckocagil
2013/07/13 16:05:10
Actually it fits without renaming.
|
| + lines_valid_ = lines_valid; |
| + } |
| + |
| + int LineWidth(int line) { |
|
Alexei Svitkine (slow)
2013/07/09 15:35:13
This is not a trivial method so the implementation
ckocagil
2013/07/13 16:05:10
Removed since we now have a Line struct that cache
|
| + int width = 0; |
| + for (size_t i = 0; i < lines()[line].size(); ++i) |
|
Alexei Svitkine (slow)
2013/07/09 15:35:13
Add a DCHECK() that |line| is within a valid range
ckocagil
2013/07/13 16:05:10
This method no longer exists.
|
| + width += lines()[line][i]->x_pos.length(); |
| + return width; |
| + } |
| + |
| const Vector2d& GetUpdatedDisplayOffset(); |
| void set_cached_bounds_and_offset_valid(bool valid) { |
| @@ -412,6 +444,8 @@ class UI_EXPORT RenderText { |
| // Draw the text. |
| virtual void DrawVisualText(Canvas* canvas) = 0; |
| + virtual void ComputeLines() = 0; |
|
msw
2013/07/10 04:01:56
Add a comment, move this above DrawVisualText (it'
ckocagil
2013/07/13 16:05:10
I moved this to render_text_win since we now call
|
| + |
| // Returns the text used for layout, which may be |obscured_text_|. |
| const base::string16& GetLayoutText() const; |
| @@ -421,16 +455,18 @@ class UI_EXPORT RenderText { |
| // Returns the text offset from the origin after applying text alignment and |
| // display offset. |
| - Vector2d GetTextOffset(); |
| + Vector2d GetTextOffset(int line_width); |
|
msw
2013/07/10 04:01:56
Comment on what |line_width| is used for here. It'
ckocagil
2013/07/13 16:05:10
I renamed this to |GetLineOffset| and it now takes
msw
2013/07/17 06:47:18
Sounds good.
|
| // Convert points from the text space to the view space and back. |
| // Handles the display area, display offset, and the application LTR/RTL mode. |
| Point ToTextPoint(const Point& point); |
| Point ToViewPoint(const Point& point); |
| + std::vector<Rect> RangeToViewRects(const ui::Range& x, int y); |
|
msw
2013/07/10 04:01:56
nit: Comment on what this does and what the args a
ckocagil
2013/07/13 16:05:10
Comment added, |y| removed.
|
| + |
| // Returns the text offset from the origin, taking into account text alignment |
| // only. |
| - Vector2d GetAlignmentOffset(); |
| + Vector2d GetAlignmentOffset(int line_width); |
|
msw
2013/07/10 04:01:56
Ditto comment from GetTextOffset: Comment and rena
ckocagil
2013/07/13 16:05:10
This method now takes a line number.
|
| // Applies fade effects to |renderer|. |
| void ApplyFadeEffects(internal::SkiaTextRenderer* renderer); |
| @@ -545,6 +581,9 @@ class UI_EXPORT RenderText { |
| // The index at which the char should be revealed in the obscured text. |
| int obscured_reveal_index_; |
| + // Whether we should break the text to multiple lines. |
|
msw
2013/07/10 04:01:56
optional nit: I prefer avoiding "we" in comments.
ckocagil
2013/07/13 16:05:10
Done.
|
| + bool multiline_; |
| + |
| // Fade text head and/or tail, if text doesn't fit into |display_rect_|. |
| bool fade_head_; |
| bool fade_tail_; |
| @@ -572,6 +611,14 @@ class UI_EXPORT RenderText { |
| // Text shadows to be drawn. |
| ShadowValues text_shadows_; |
| + // Positions at which we can break the line. |
| + std::vector<size_t> line_breaks_; |
| + |
| + // Lines computed by ComputeLines(). |
| + std::vector<ScopedVector<internal::LineSegment> > lines_; |
|
Alexei Svitkine (slow)
2013/07/09 15:35:13
Can you use a regular vector instead of a ScopedVe
msw
2013/07/10 04:01:56
I'm wondering if it might help in the long run to
ckocagil
2013/07/13 16:05:10
I can't, we need pointers as long as we have LineS
ckocagil
2013/07/13 16:05:10
I'm not sure how this would work but I'm adding a
|
| + |
| + bool lines_valid_; |
|
Alexei Svitkine (slow)
2013/07/09 15:35:13
Add a comment.
ckocagil
2013/07/13 16:05:10
Done.
|
| + |
| DISALLOW_COPY_AND_ASSIGN(RenderText); |
| }; |