diff options
author | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-02 18:36:40 +0000 |
---|---|---|
committer | msw@chromium.org <msw@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-08-02 18:36:40 +0000 |
commit | 7b3cb4b2b70c3b03e9a2ad2e7215894f0c8d8b36 (patch) | |
tree | 7fdd22c13aac31c789a8d496ca87f09f3119d31c /ui | |
parent | 69bddafc2b2d88c282f92ee69d747f247ed9b347 (diff) | |
download | chromium_src-7b3cb4b2b70c3b03e9a2ad2e7215894f0c8d8b36.zip chromium_src-7b3cb4b2b70c3b03e9a2ad2e7215894f0c8d8b36.tar.gz chromium_src-7b3cb4b2b70c3b03e9a2ad2e7215894f0c8d8b36.tar.bz2 |
Fix font and selection issues for RenderText temporary code.
Remove unnecessary gfx namespace specifiers.
This should restore the large font size, and render the cursor and selection in their correct positions.
BUG=90426
TEST=touchui omnibox text interaction.
Review URL: http://codereview.chromium.org/7540036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@95118 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'ui')
-rw-r--r-- | ui/gfx/render_text.cc | 40 | ||||
-rw-r--r-- | ui/gfx/render_text.h | 22 |
2 files changed, 32 insertions, 30 deletions
diff --git a/ui/gfx/render_text.cc b/ui/gfx/render_text.cc index c656792..1664b22 100644 --- a/ui/gfx/render_text.cc +++ b/ui/gfx/render_text.cc @@ -174,7 +174,7 @@ bool RenderText::MoveCursorTo(size_t position, bool select) { return changed; } -bool RenderText::MoveCursorTo(const gfx::Point& point, bool select) { +bool RenderText::MoveCursorTo(const Point& point, bool select) { // TODO(msw): Make this function support cursor placement via mouse near BiDi // level changes. The visual cursor appearance will depend on the location // clicked, not solely the resulting logical cursor position. See the TODO @@ -191,7 +191,7 @@ void RenderText::SetSelection(const ui::Range& range) { selection_range_.set_start(std::min(range.start(), text().length())); // Update |display_offset_| to ensure the current cursor is visible. - gfx::Rect cursor_bounds(GetCursorBounds(GetCursorPosition(), insert_mode())); + Rect cursor_bounds(GetCursorBounds(GetCursorPosition(), insert_mode())); int display_width = display_rect_.width(); int string_width = GetStringWidth(); if (string_width < display_width) { @@ -206,7 +206,7 @@ void RenderText::SetSelection(const ui::Range& range) { } } -bool RenderText::IsPointInSelection(const gfx::Point& point) const { +bool RenderText::IsPointInSelection(const Point& point) const { size_t pos = FindCursorPosition(point); return (pos >= GetSelection().GetMin() && pos < GetSelection().GetMax()); } @@ -298,19 +298,22 @@ int RenderText::GetStringWidth() const { return GetSubstringBounds(ui::Range(0, text_.length()))[0].width(); } -void RenderText::Draw(gfx::Canvas* canvas) { +void RenderText::Draw(Canvas* canvas) { // Clip the canvas to the text display area. canvas->ClipRectInt(display_rect_.x(), display_rect_.y(), display_rect_.width(), display_rect_.height()); // Draw the selection. - std::vector<gfx::Rect> selection(GetSubstringBounds(GetSelection())); + std::vector<Rect> selection(GetSubstringBounds(GetSelection())); SkColor selection_color = focused() ? kFocusedSelectionColor : kUnfocusedSelectionColor; - for (std::vector<gfx::Rect>::const_iterator i = selection.begin(); + for (std::vector<Rect>::const_iterator i = selection.begin(); i < selection.end(); ++i) { - gfx::Rect r(*i); + Rect r(*i); + r.Offset(display_rect_.origin()); r.Offset(display_offset_); + // Center the rect vertically in |display_rect_|. + r.Offset(Point(0, (display_rect_.height() - r.height()) / 2)); canvas->FillRectInt(selection_color, r.x(), r.y(), r.width(), r.height()); } @@ -336,11 +339,11 @@ void RenderText::Draw(gfx::Canvas* canvas) { } // Draw the text. - gfx::Rect bounds(display_rect_); + Rect bounds(display_rect_); bounds.Offset(display_offset_); for (StyleRanges::const_iterator i = style_ranges.begin(); i < style_ranges.end(); ++i) { - Font font = !i->underline ? i->font : + const Font& font = !i->underline ? i->font : i->font.DeriveFont(0, i->font.GetStyle() | Font::UNDERLINED); string16 text = text_.substr(i->range.start(), i->range.length()); bounds.set_width(font.GetStringWidth(text)); @@ -376,8 +379,8 @@ void RenderText::Draw(gfx::Canvas* canvas) { } } -size_t RenderText::FindCursorPosition(const gfx::Point& point) const { - const gfx::Font& font = Font(); +size_t RenderText::FindCursorPosition(const Point& point) const { + const Font& font = default_style_.font; int left = 0; int left_pos = 0; int right = font.GetStringWidth(text()); @@ -405,25 +408,24 @@ size_t RenderText::FindCursorPosition(const gfx::Point& point) const { return left_pos; } -std::vector<gfx::Rect> RenderText::GetSubstringBounds( +std::vector<Rect> RenderText::GetSubstringBounds( const ui::Range& range) const { size_t start = range.GetMin(); size_t end = range.GetMax(); - gfx::Font font; + const Font& font = default_style_.font; int start_x = font.GetStringWidth(text().substr(0, start)); int end_x = font.GetStringWidth(text().substr(0, end)); - std::vector<gfx::Rect> bounds; - bounds.push_back(gfx::Rect(start_x, 0, end_x - start_x, font.GetHeight())); + std::vector<Rect> bounds; + bounds.push_back(Rect(start_x, 0, end_x - start_x, font.GetHeight())); return bounds; } -gfx::Rect RenderText::GetCursorBounds(size_t cursor_pos, - bool insert_mode) const { - gfx::Font font; +Rect RenderText::GetCursorBounds(size_t cursor_pos, bool insert_mode) const { + const Font& font = default_style_.font; int x = font.GetStringWidth(text_.substr(0U, cursor_pos)); DCHECK_GE(x, 0); int h = std::min(display_rect_.height(), font.GetHeight()); - gfx::Rect bounds(x, (display_rect_.height() - h) / 2, 1, h); + Rect bounds(x, (display_rect_.height() - h) / 2, 1, h); if (!insert_mode && text_.length() != cursor_pos) bounds.set_width(font.GetStringWidth(text_.substr(0, cursor_pos + 1)) - x); return bounds; diff --git a/ui/gfx/render_text.h b/ui/gfx/render_text.h index e0cdc0b..ec3c455 100644 --- a/ui/gfx/render_text.h +++ b/ui/gfx/render_text.h @@ -88,8 +88,8 @@ class UI_API RenderText { const StyleRange& default_style() const { return default_style_; } void set_default_style(StyleRange style) { default_style_ = style; } - const gfx::Rect& display_rect() const { return display_rect_; } - void set_display_rect(const gfx::Rect& r) { display_rect_ = r; } + const Rect& display_rect() const { return display_rect_; } + void set_display_rect(const Rect& r) { display_rect_ = r; } size_t GetCursorPosition() const; void SetCursorPosition(const size_t position); @@ -110,13 +110,13 @@ class UI_API RenderText { // Move the cursor to the position associated with the clicked point. // If |select| is false, the selection range is emptied at the new position. - bool MoveCursorTo(const gfx::Point& point, bool select); + bool MoveCursorTo(const Point& point, bool select); const ui::Range& GetSelection() const; void SetSelection(const ui::Range& range); // Returns true if the local point is over selected text. - bool IsPointInSelection(const gfx::Point& point) const; + bool IsPointInSelection(const Point& point) const; // Selects no text, all text, or the word at the current cursor position. void ClearSelection(); @@ -137,30 +137,30 @@ class UI_API RenderText { // Get the width of the entire string. int GetStringWidth() const; - virtual void Draw(gfx::Canvas* canvas); + virtual void Draw(Canvas* canvas); // TODO(msw): Deprecate this function. Logical and visual cursors are not // mapped one-to-one. See the selection_range_ TODO for more information. // Get the logical cursor position from a visual point in local coordinates. - virtual size_t FindCursorPosition(const gfx::Point& point) const; + virtual size_t FindCursorPosition(const Point& point) const; // Get the visual bounds containing the logical substring within |range|. // These bounds could be visually discontiguous if the logical selection range // is split by an odd number of LTR/RTL level change. - virtual std::vector<gfx::Rect> GetSubstringBounds( + virtual std::vector<Rect> GetSubstringBounds( const ui::Range& range) const; // Get the visual bounds describing the cursor at |position|. These bounds // typically represent a vertical line, but if |insert_mode| is true they // contain the bounds of the associated glyph. - virtual gfx::Rect GetCursorBounds(size_t position, bool insert_mode) const; + virtual Rect GetCursorBounds(size_t position, bool insert_mode) const; protected: RenderText(); const StyleRanges& style_ranges() const { return style_ranges_; } - const gfx::Point& display_offset() const { return display_offset_; } + const Point& display_offset() const { return display_offset_; } // Get the cursor position that visually neighbors |position|. // If |move_by_word| is true, return the neighboring word delimiter position. @@ -212,9 +212,9 @@ class UI_API RenderText { StyleRange default_style_; // The local display area for rendering the text. - gfx::Rect display_rect_; + Rect display_rect_; // The offset for the text to be drawn, relative to the display area. - gfx::Point display_offset_; + Point display_offset_; DISALLOW_COPY_AND_ASSIGN(RenderText); }; |