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> |
(...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
160 static RenderText* CreateInstance(); | 160 static RenderText* CreateInstance(); |
161 | 161 |
162 const base::string16& text() const { return text_; } | 162 const base::string16& text() const { return text_; } |
163 void SetText(const base::string16& text); | 163 void SetText(const base::string16& text); |
164 | 164 |
165 HorizontalAlignment horizontal_alignment() const { | 165 HorizontalAlignment horizontal_alignment() const { |
166 return horizontal_alignment_; | 166 return horizontal_alignment_; |
167 } | 167 } |
168 void SetHorizontalAlignment(HorizontalAlignment alignment); | 168 void SetHorizontalAlignment(HorizontalAlignment alignment); |
169 | 169 |
170 VerticalAlignment vertical_alignment() const { | |
171 return vertical_alignment_; | |
172 } | |
173 void SetVerticalAlignment(VerticalAlignment alignment); | |
174 | |
175 const FontList& font_list() const { return font_list_; } | 170 const FontList& font_list() const { return font_list_; } |
176 void SetFontList(const FontList& font_list); | 171 void SetFontList(const FontList& font_list); |
177 void SetFont(const Font& font); | 172 void SetFont(const Font& font); |
178 | 173 |
179 // Set the font size to |size| in pixels. | 174 // Set the font size to |size| in pixels. |
180 void SetFontSize(int size); | 175 void SetFontSize(int size); |
181 | 176 |
182 // Get the first font in |font_list_|. | 177 // Get the first font in |font_list_|. |
183 const Font& GetPrimaryFont() const; | 178 const Font& GetPrimaryFont() const; |
184 | 179 |
(...skipping 146 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
331 // The default implementation is same as GetStringSize. Certain platforms that | 326 // The default implementation is same as GetStringSize. Certain platforms that |
332 // compute the text size as floating-point values, like Mac, will override | 327 // compute the text size as floating-point values, like Mac, will override |
333 // this method. | 328 // this method. |
334 // See comment in Canvas::GetStringWidthF for its usage. | 329 // See comment in Canvas::GetStringWidthF for its usage. |
335 virtual SizeF GetStringSizeF(); | 330 virtual SizeF GetStringSizeF(); |
336 | 331 |
337 // Returns the width of the content (which is the wrapped width in multiline | 332 // Returns the width of the content (which is the wrapped width in multiline |
338 // mode). Reserves room for the cursor if |cursor_enabled_| is true. | 333 // mode). Reserves room for the cursor if |cursor_enabled_| is true. |
339 int GetContentWidth(); | 334 int GetContentWidth(); |
340 | 335 |
341 // Returns the common baseline of the text. The returned value is the vertical | 336 // Returns the common baseline of the text. The return value is the vertical |
342 // offset from the top of |display_rect| to the text baseline, in pixels. | 337 // offset from the top of |display_rect_| to the text baseline, in pixels. |
343 virtual int GetBaseline() = 0; | 338 // The baseline is determined from the font list and display rect, and does |
| 339 // not depend on the text. |
| 340 int GetBaseline(); |
344 | 341 |
345 void Draw(Canvas* canvas); | 342 void Draw(Canvas* canvas); |
346 | 343 |
347 // Draws a cursor at |position|. | 344 // Draws a cursor at |position|. |
348 void DrawCursor(Canvas* canvas, const SelectionModel& position); | 345 void DrawCursor(Canvas* canvas, const SelectionModel& position); |
349 | 346 |
350 // Draw the selected text without a cursor or selection highlight. Subpixel | 347 // Draw the selected text without a cursor or selection highlight. Subpixel |
351 // antialiasing is disabled and foreground color is forced to black. | 348 // antialiasing is disabled and foreground color is forced to black. |
352 void DrawSelectedTextForDrag(Canvas* canvas); | 349 void DrawSelectedTextForDrag(Canvas* canvas); |
353 | 350 |
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
391 | 388 |
392 protected: | 389 protected: |
393 RenderText(); | 390 RenderText(); |
394 | 391 |
395 const BreakList<SkColor>& colors() const { return colors_; } | 392 const BreakList<SkColor>& colors() const { return colors_; } |
396 const std::vector<BreakList<bool> >& styles() const { return styles_; } | 393 const std::vector<BreakList<bool> >& styles() const { return styles_; } |
397 | 394 |
398 const std::vector<internal::Line>& lines() const { return lines_; } | 395 const std::vector<internal::Line>& lines() const { return lines_; } |
399 void set_lines(std::vector<internal::Line>* lines) { lines_.swap(*lines); } | 396 void set_lines(std::vector<internal::Line>* lines) { lines_.swap(*lines); } |
400 | 397 |
| 398 // Returns the baseline of the current text. The return value depends on |
| 399 // the text and its layout while the return value of GetBaseline() doesn't. |
| 400 // GetAlignmentOffset() takes into account the difference between them. |
| 401 // |
| 402 // We'd like a RenderText to show the text always on the same baseline |
| 403 // regardless of the text, so the text does not jump up or down depending |
| 404 // on the text. However, underlying layout engines return different baselines |
| 405 // depending on the text. In general, layout engines determine the minimum |
| 406 // bounding box for the text and return the baseline from the top of the |
| 407 // bounding box. So the baseline changes depending on font metrics used to |
| 408 // layout the text. |
| 409 // |
| 410 // For example, suppose there are FontA and FontB and the baseline of FontA |
| 411 // is smaller than the one of FontB. If the text is laid out only with FontA, |
| 412 // then the baseline of FontA may be returned. If the text includes some |
| 413 // characters which are laid out with FontB, then the baseline of FontB may |
| 414 // be returned. |
| 415 // |
| 416 // GetBaseline() returns the fixed baseline regardless of the text. |
| 417 // GetLayoutTextBaseline() returns the baseline determined by the underlying |
| 418 // layout engine, and it changes depending on the text. GetAlignmentOffset() |
| 419 // returns the difference between them. |
| 420 virtual int GetLayoutTextBaseline() = 0; |
| 421 |
401 const Vector2d& GetUpdatedDisplayOffset(); | 422 const Vector2d& GetUpdatedDisplayOffset(); |
402 | 423 |
403 void set_cached_bounds_and_offset_valid(bool valid) { | 424 void set_cached_bounds_and_offset_valid(bool valid) { |
404 cached_bounds_and_offset_valid_ = valid; | 425 cached_bounds_and_offset_valid_ = valid; |
405 } | 426 } |
406 | 427 |
407 // Get the selection model that visually neighbors |position| by |break_type|. | 428 // Get the selection model that visually neighbors |position| by |break_type|. |
408 // The returned value represents a cursor/caret position without a selection. | 429 // The returned value represents a cursor/caret position without a selection. |
409 SelectionModel GetAdjacentSelectionModel(const SelectionModel& current, | 430 SelectionModel GetAdjacentSelectionModel(const SelectionModel& current, |
410 BreakType break_type, | 431 BreakType break_type, |
(...skipping 124 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
535 // Draw the selection. | 556 // Draw the selection. |
536 void DrawSelection(Canvas* canvas); | 557 void DrawSelection(Canvas* canvas); |
537 | 558 |
538 // Logical UTF-16 string data to be drawn. | 559 // Logical UTF-16 string data to be drawn. |
539 base::string16 text_; | 560 base::string16 text_; |
540 | 561 |
541 // Horizontal alignment of the text with respect to |display_rect_|. The | 562 // Horizontal alignment of the text with respect to |display_rect_|. The |
542 // default is to align left if the application UI is LTR and right if RTL. | 563 // default is to align left if the application UI is LTR and right if RTL. |
543 HorizontalAlignment horizontal_alignment_; | 564 HorizontalAlignment horizontal_alignment_; |
544 | 565 |
545 // Vertical alignment of the text with respect to |display_rect_|. The | |
546 // default is to align vertically centered. | |
547 VerticalAlignment vertical_alignment_; | |
548 | |
549 // The text directionality mode, defaults to DIRECTIONALITY_FROM_TEXT. | 566 // The text directionality mode, defaults to DIRECTIONALITY_FROM_TEXT. |
550 DirectionalityMode directionality_mode_; | 567 DirectionalityMode directionality_mode_; |
551 | 568 |
552 // The cached text direction, potentially computed from the text or UI locale. | 569 // The cached text direction, potentially computed from the text or UI locale. |
553 // Use GetTextDirection(), do not use this potentially invalid value directly! | 570 // Use GetTextDirection(), do not use this potentially invalid value directly! |
554 base::i18n::TextDirection text_direction_; | 571 base::i18n::TextDirection text_direction_; |
555 | 572 |
556 // A list of fonts used to render |text_|. | 573 // A list of fonts used to render |text_|. |
557 FontList font_list_; | 574 FontList font_list_; |
558 | 575 |
(...skipping 65 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
624 // Flag to work around a Skia bug with the PDF path (http://crbug.com/133548) | 641 // Flag to work around a Skia bug with the PDF path (http://crbug.com/133548) |
625 // that results in incorrect clipping when drawing to the document margins. | 642 // that results in incorrect clipping when drawing to the document margins. |
626 // This field allows disabling clipping to work around the issue. | 643 // This field allows disabling clipping to work around the issue. |
627 // TODO(asvitkine): Remove this when the underlying Skia bug is fixed. | 644 // TODO(asvitkine): Remove this when the underlying Skia bug is fixed. |
628 bool clip_to_display_rect_; | 645 bool clip_to_display_rect_; |
629 | 646 |
630 // The offset for the text to be drawn, relative to the display area. | 647 // The offset for the text to be drawn, relative to the display area. |
631 // Get this point with GetUpdatedDisplayOffset (or risk using a stale value). | 648 // Get this point with GetUpdatedDisplayOffset (or risk using a stale value). |
632 Vector2d display_offset_; | 649 Vector2d display_offset_; |
633 | 650 |
| 651 // The baseline of the text. This is determined from the height of the |
| 652 // display area and the cap height of the font list so the text is vertically |
| 653 // centered. |
| 654 int baseline_; |
| 655 |
634 // The cached bounds and offset are invalidated by changes to the cursor, | 656 // The cached bounds and offset are invalidated by changes to the cursor, |
635 // selection, font, and other operations that adjust the visible text bounds. | 657 // selection, font, and other operations that adjust the visible text bounds. |
636 bool cached_bounds_and_offset_valid_; | 658 bool cached_bounds_and_offset_valid_; |
637 | 659 |
638 // Text shadows to be drawn. | 660 // Text shadows to be drawn. |
639 ShadowValues text_shadows_; | 661 ShadowValues text_shadows_; |
640 | 662 |
641 // A list of valid layout text line break positions. | 663 // A list of valid layout text line break positions. |
642 BreakList<size_t> line_breaks_; | 664 BreakList<size_t> line_breaks_; |
643 | 665 |
644 // Lines computed by EnsureLayout. These should be invalidated with | 666 // Lines computed by EnsureLayout. These should be invalidated with |
645 // ResetLayout and on |display_rect_| changes. | 667 // ResetLayout and on |display_rect_| changes. |
646 std::vector<internal::Line> lines_; | 668 std::vector<internal::Line> lines_; |
647 | 669 |
648 DISALLOW_COPY_AND_ASSIGN(RenderText); | 670 DISALLOW_COPY_AND_ASSIGN(RenderText); |
649 }; | 671 }; |
650 | 672 |
651 } // namespace gfx | 673 } // namespace gfx |
652 | 674 |
653 #endif // UI_GFX_RENDER_TEXT_H_ | 675 #endif // UI_GFX_RENDER_TEXT_H_ |
OLD | NEW |