OLD | NEW |
---|---|
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #ifndef UI_GFX_RENDER_TEXT_H_ | 5 #ifndef UI_GFX_RENDER_TEXT_H_ |
6 #define UI_GFX_RENDER_TEXT_H_ | 6 #define UI_GFX_RENDER_TEXT_H_ |
7 | 7 |
8 #include <algorithm> | 8 #include <algorithm> |
9 #include <cstring> | 9 #include <cstring> |
10 #include <string> | 10 #include <string> |
11 #include <utility> | 11 #include <utility> |
12 #include <vector> | 12 #include <vector> |
13 | 13 |
14 #include "base/command_line.h" | |
14 #include "base/gtest_prod_util.h" | 15 #include "base/gtest_prod_util.h" |
15 #include "base/i18n/rtl.h" | 16 #include "base/i18n/rtl.h" |
16 #include "base/memory/scoped_ptr.h" | 17 #include "base/memory/scoped_ptr.h" |
17 #include "base/strings/string16.h" | 18 #include "base/strings/string16.h" |
18 #include "skia/ext/refptr.h" | 19 #include "skia/ext/refptr.h" |
19 #include "third_party/skia/include/core/SkColor.h" | 20 #include "third_party/skia/include/core/SkColor.h" |
20 #include "third_party/skia/include/core/SkPaint.h" | 21 #include "third_party/skia/include/core/SkPaint.h" |
21 #include "third_party/skia/include/core/SkRect.h" | 22 #include "third_party/skia/include/core/SkRect.h" |
22 #include "ui/gfx/break_list.h" | 23 #include "ui/gfx/break_list.h" |
23 #include "ui/gfx/font_list.h" | 24 #include "ui/gfx/font_list.h" |
(...skipping 11 matching lines...) Expand all Loading... | |
35 class SkDrawLooper; | 36 class SkDrawLooper; |
36 struct SkPoint; | 37 struct SkPoint; |
37 class SkShader; | 38 class SkShader; |
38 class SkTypeface; | 39 class SkTypeface; |
39 | 40 |
40 namespace gfx { | 41 namespace gfx { |
41 | 42 |
42 class Canvas; | 43 class Canvas; |
43 class Font; | 44 class Font; |
44 class RenderTextTest; | 45 class RenderTextTest; |
46 class RenderTextHarfBuzz; // REMOVE | |
msw
2014/04/29 06:24:45
Move this to where it's needed, if anywhere.
ckocagil
2014/05/01 22:02:01
Done.
| |
45 | 47 |
46 namespace internal { | 48 namespace internal { |
47 | 49 |
48 // Internal helper class used by derived classes to draw text through Skia. | 50 // Internal helper class used by derived classes to draw text through Skia. |
49 class SkiaTextRenderer { | 51 class SkiaTextRenderer { |
50 public: | 52 public: |
51 explicit SkiaTextRenderer(Canvas* canvas); | 53 explicit SkiaTextRenderer(Canvas* canvas); |
52 ~SkiaTextRenderer(); | 54 ~SkiaTextRenderer(); |
53 | 55 |
54 void SetDrawLooper(SkDrawLooper* draw_looper); | 56 void SetDrawLooper(SkDrawLooper* draw_looper); |
(...skipping 17 matching lines...) Expand all Loading... | |
72 // Draw underline and strike-through text decorations. | 74 // Draw underline and strike-through text decorations. |
73 // Based on |SkCanvas::DrawTextDecorations()| and constants from: | 75 // Based on |SkCanvas::DrawTextDecorations()| and constants from: |
74 // third_party/skia/src/core/SkTextFormatParams.h | 76 // third_party/skia/src/core/SkTextFormatParams.h |
75 void DrawDecorations(int x, int y, int width, bool underline, bool strike, | 77 void DrawDecorations(int x, int y, int width, bool underline, bool strike, |
76 bool diagonal_strike); | 78 bool diagonal_strike); |
77 // Finishes any ongoing diagonal strike run. | 79 // Finishes any ongoing diagonal strike run. |
78 void EndDiagonalStrike(); | 80 void EndDiagonalStrike(); |
79 void DrawUnderline(int x, int y, int width); | 81 void DrawUnderline(int x, int y, int width); |
80 void DrawStrike(int x, int y, int width) const; | 82 void DrawStrike(int x, int y, int width) const; |
81 | 83 |
84 SkPaint paint() const { return paint_; } | |
85 | |
82 private: | 86 private: |
83 // Helper class to draw a diagonal line with multiple pieces of different | 87 // Helper class to draw a diagonal line with multiple pieces of different |
84 // lengths and colors; to support text selection appearances. | 88 // lengths and colors; to support text selection appearances. |
85 class DiagonalStrike { | 89 class DiagonalStrike { |
86 public: | 90 public: |
87 DiagonalStrike(Canvas* canvas, Point start, const SkPaint& paint); | 91 DiagonalStrike(Canvas* canvas, Point start, const SkPaint& paint); |
88 ~DiagonalStrike(); | 92 ~DiagonalStrike(); |
89 | 93 |
90 void AddPiece(int length, SkColor color); | 94 void AddPiece(int length, SkColor color); |
91 void Draw(); | 95 void Draw(); |
92 | 96 |
93 private: | 97 private: |
94 typedef std::pair<int, SkColor> Piece; | 98 typedef std::pair<int, SkColor> Piece; |
95 | 99 |
96 Canvas* canvas_; | 100 Canvas* canvas_; |
101 SkMatrix matrix_; | |
97 const Point start_; | 102 const Point start_; |
98 SkPaint paint_; | 103 SkPaint paint_; |
99 int total_length_; | 104 int total_length_; |
100 std::vector<Piece> pieces_; | 105 std::vector<Piece> pieces_; |
101 | 106 |
102 DISALLOW_COPY_AND_ASSIGN(DiagonalStrike); | 107 DISALLOW_COPY_AND_ASSIGN(DiagonalStrike); |
103 }; | 108 }; |
104 | 109 |
105 Canvas* canvas_; | 110 Canvas* canvas_; |
106 SkCanvas* canvas_skia_; | 111 SkCanvas* canvas_skia_; |
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
169 // heights. | 174 // heights. |
170 Size size; | 175 Size size; |
171 | 176 |
172 // Sum of preceding lines' heights. | 177 // Sum of preceding lines' heights. |
173 int preceding_heights; | 178 int preceding_heights; |
174 | 179 |
175 // Maximum baseline of all segments on this line. | 180 // Maximum baseline of all segments on this line. |
176 int baseline; | 181 int baseline; |
177 }; | 182 }; |
178 | 183 |
184 skia::RefPtr<SkTypeface> CreateSkiaTypeface(const std::string& family, | |
185 int style); | |
msw
2014/04/29 06:24:45
nit: document that this is a gfx::Font::FontStyle
ckocagil
2014/05/01 22:02:01
Done.
| |
186 | |
179 } // namespace internal | 187 } // namespace internal |
180 | 188 |
181 // RenderText represents an abstract model of styled text and its corresponding | 189 // RenderText represents an abstract model of styled text and its corresponding |
182 // visual layout. Support is built in for a cursor, a selection, simple styling, | 190 // visual layout. Support is built in for a cursor, a selection, simple styling, |
183 // complex scripts, and bi-directional text. Implementations provide mechanisms | 191 // complex scripts, and bi-directional text. Implementations provide mechanisms |
184 // for rendering and translation between logical and visual data. | 192 // for rendering and translation between logical and visual data. |
185 class GFX_EXPORT RenderText { | 193 class GFX_EXPORT RenderText { |
186 public: | 194 public: |
187 virtual ~RenderText(); | 195 virtual ~RenderText(); |
188 | 196 |
189 // Creates a platform-specific RenderText instance. | 197 // Creates a platform-specific or cross-platform RenderText instance. |
190 static RenderText* CreateInstance(); | 198 static RenderText* CreateInstance(); |
191 | 199 |
192 const base::string16& text() const { return text_; } | 200 const base::string16& text() const { return text_; } |
193 void SetText(const base::string16& text); | 201 void SetText(const base::string16& text); |
194 | 202 |
195 HorizontalAlignment horizontal_alignment() const { | 203 HorizontalAlignment horizontal_alignment() const { |
196 return horizontal_alignment_; | 204 return horizontal_alignment_; |
197 } | 205 } |
198 void SetHorizontalAlignment(HorizontalAlignment alignment); | 206 void SetHorizontalAlignment(HorizontalAlignment alignment); |
199 | 207 |
(...skipping 222 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
422 | 430 |
423 // Gets the horizontal bounds (relative to the left of the text, not the view) | 431 // Gets the horizontal bounds (relative to the left of the text, not the view) |
424 // of the glyph starting at |index|. If the glyph is RTL then the returned | 432 // of the glyph starting at |index|. If the glyph is RTL then the returned |
425 // Range will have is_reversed() true. (This does not return a Rect because a | 433 // Range will have is_reversed() true. (This does not return a Rect because a |
426 // Rect can't have a negative width.) | 434 // Rect can't have a negative width.) |
427 virtual Range GetGlyphBounds(size_t index) = 0; | 435 virtual Range GetGlyphBounds(size_t index) = 0; |
428 | 436 |
429 protected: | 437 protected: |
430 RenderText(); | 438 RenderText(); |
431 | 439 |
440 // Creates a platform-specific RenderText instance. | |
441 static RenderText* CreateNativeInstance(); | |
msw
2014/04/29 06:24:45
Make this private.
ckocagil
2014/05/01 22:02:01
Done.
| |
442 | |
432 const BreakList<SkColor>& colors() const { return colors_; } | 443 const BreakList<SkColor>& colors() const { return colors_; } |
433 const std::vector<BreakList<bool> >& styles() const { return styles_; } | 444 const std::vector<BreakList<bool> >& styles() const { return styles_; } |
434 | 445 |
435 const std::vector<internal::Line>& lines() const { return lines_; } | 446 const std::vector<internal::Line>& lines() const { return lines_; } |
436 void set_lines(std::vector<internal::Line>* lines) { lines_.swap(*lines); } | 447 void set_lines(std::vector<internal::Line>* lines) { lines_.swap(*lines); } |
437 | 448 |
438 // Returns the baseline of the current text. The return value depends on | 449 // Returns the baseline of the current text. The return value depends on |
439 // the text and its layout while the return value of GetBaseline() doesn't. | 450 // the text and its layout while the return value of GetBaseline() doesn't. |
440 // GetAlignmentOffset() takes into account the difference between them. | 451 // GetAlignmentOffset() takes into account the difference between them. |
441 // | 452 // |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
706 // Lines computed by EnsureLayout. These should be invalidated with | 717 // Lines computed by EnsureLayout. These should be invalidated with |
707 // ResetLayout and on |display_rect_| changes. | 718 // ResetLayout and on |display_rect_| changes. |
708 std::vector<internal::Line> lines_; | 719 std::vector<internal::Line> lines_; |
709 | 720 |
710 DISALLOW_COPY_AND_ASSIGN(RenderText); | 721 DISALLOW_COPY_AND_ASSIGN(RenderText); |
711 }; | 722 }; |
712 | 723 |
713 } // namespace gfx | 724 } // namespace gfx |
714 | 725 |
715 #endif // UI_GFX_RENDER_TEXT_H_ | 726 #endif // UI_GFX_RENDER_TEXT_H_ |
OLD | NEW |