Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 #pragma once | 7 #pragma once |
| 8 | 8 |
| 9 #include <algorithm> | 9 #include <algorithm> |
| 10 #include <vector> | 10 #include <vector> |
| (...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 114 CaretPlacement caret_placement() const { return caret_placement_; } | 114 CaretPlacement caret_placement() const { return caret_placement_; } |
| 115 void set_caret_placement(CaretPlacement placement) { | 115 void set_caret_placement(CaretPlacement placement) { |
| 116 caret_placement_ = placement; | 116 caret_placement_ = placement; |
| 117 } | 117 } |
| 118 | 118 |
| 119 bool Equals(const SelectionModel& sel) const; | 119 bool Equals(const SelectionModel& sel) const; |
| 120 | 120 |
| 121 private: | 121 private: |
| 122 void Init(size_t start, size_t end, size_t pos, CaretPlacement status); | 122 void Init(size_t start, size_t end, size_t pos, CaretPlacement status); |
| 123 | 123 |
| 124 // Logical selection start. If there is non-empty selection, the selection | 124 // Logical selection start. If there is non-empty selection, if |
| 125 // always starts visually at the leading edge of the selection_start. So, we | 125 // selection_start_ is less than selection_end_, the selection starts visually |
| 126 // do not need extra information for visual selection bounding. | 126 // at the leading edge of the selection_start_. If selection_start_ is greater |
| 127 // than selection_end_, the selection starts visually at the trailing edge of | |
| 128 // selection_start_'s previous grapheme. So, we do not need extra information | |
| 129 // for visual bounding. | |
| 127 size_t selection_start_; | 130 size_t selection_start_; |
| 128 | 131 |
| 129 // The logical cursor position that next character will be inserted into. | 132 // The logical cursor position that next character will be inserted into. |
| 130 // It is also the end of the selection. | 133 // It is also the end of the selection. |
| 131 size_t selection_end_; | 134 size_t selection_end_; |
| 132 | 135 |
| 133 // The following two fields are used to guide cursor visual position. | 136 // The following two fields are used to guide cursor visual position. |
| 134 // The index of the character that cursor is visually attached to. | 137 // The index of the character that cursor is visually attached to. |
| 135 size_t caret_pos_; | 138 size_t caret_pos_; |
| 136 // The visual placement of the cursor, relative to its associated character. | 139 // The visual placement of the cursor, relative to its associated character. |
| (...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 169 void set_default_style(StyleRange style) { default_style_ = style; } | 172 void set_default_style(StyleRange style) { default_style_ = style; } |
| 170 | 173 |
| 171 const Rect& display_rect() const { return display_rect_; } | 174 const Rect& display_rect() const { return display_rect_; } |
| 172 virtual void SetDisplayRect(const Rect& r); | 175 virtual void SetDisplayRect(const Rect& r); |
| 173 | 176 |
| 174 // This cursor position corresponds to SelectionModel::selection_end. In | 177 // This cursor position corresponds to SelectionModel::selection_end. In |
| 175 // addition to representing the selection end, it's also where logical text | 178 // addition to representing the selection end, it's also where logical text |
| 176 // edits take place, and doesn't necessarily correspond to | 179 // edits take place, and doesn't necessarily correspond to |
| 177 // SelectionModel::caret_pos. | 180 // SelectionModel::caret_pos. |
| 178 size_t GetCursorPosition() const; | 181 size_t GetCursorPosition() const; |
| 179 void SetCursorPosition(const size_t position); | 182 void SetCursorPosition(size_t position); |
| 180 | 183 |
| 181 void SetCaretPlacement(SelectionModel::CaretPlacement placement) { | 184 void SetCaretPlacement(SelectionModel::CaretPlacement placement) { |
| 182 selection_model_.set_caret_placement(placement); | 185 selection_model_.set_caret_placement(placement); |
| 183 } | 186 } |
| 184 | 187 |
| 185 // Moves the cursor left or right. Cursor movement is visual, meaning that | 188 // Moves the cursor left or right. Cursor movement is visual, meaning that |
| 186 // left and right are relative to screen, not the directionality of the text. | 189 // left and right are relative to screen, not the directionality of the text. |
| 187 // If |select| is false, the selection range is emptied at the new position. | 190 // If |select| is false, the selection range is emptied at the new position. |
| 188 void MoveCursorLeft(BreakType break_type, bool select); | 191 void MoveCursorLeft(BreakType break_type, bool select); |
| 189 void MoveCursorRight(BreakType break_type, bool select); | 192 void MoveCursorRight(BreakType break_type, bool select); |
| (...skipping 29 matching lines...) Expand all Loading... | |
| 219 | 222 |
| 220 const ui::Range& GetCompositionRange() const; | 223 const ui::Range& GetCompositionRange() const; |
| 221 void SetCompositionRange(const ui::Range& composition_range); | 224 void SetCompositionRange(const ui::Range& composition_range); |
| 222 | 225 |
| 223 // Apply |style_range| to the internal style model. | 226 // Apply |style_range| to the internal style model. |
| 224 virtual void ApplyStyleRange(StyleRange style_range); | 227 virtual void ApplyStyleRange(StyleRange style_range); |
| 225 | 228 |
| 226 // Apply |default_style_| over the entire text range. | 229 // Apply |default_style_| over the entire text range. |
| 227 virtual void ApplyDefaultStyle(); | 230 virtual void ApplyDefaultStyle(); |
| 228 | 231 |
| 229 base::i18n::TextDirection GetTextDirection() const; | 232 virtual base::i18n::TextDirection GetTextDirection(); |
| 230 | 233 |
| 231 // Get the width of the entire string. | 234 // Get the width of the entire string. |
| 232 virtual int GetStringWidth(); | 235 virtual int GetStringWidth(); |
| 233 | 236 |
| 234 virtual void Draw(Canvas* canvas); | 237 virtual void Draw(Canvas* canvas); |
| 235 | 238 |
| 236 // Gets the SelectionModel from a visual point in local coordinates. | 239 // Gets the SelectionModel from a visual point in local coordinates. |
| 237 virtual SelectionModel FindCursorPosition(const Point& point); | 240 virtual SelectionModel FindCursorPosition(const Point& point); |
| 238 | 241 |
| 239 // Get the visual bounds containing the logical substring within |from| to | 242 // Get the visual bounds containing the logical substring within |from| to |
| (...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 274 virtual SelectionModel GetRightSelectionModel(const SelectionModel& current, | 277 virtual SelectionModel GetRightSelectionModel(const SelectionModel& current, |
| 275 BreakType break_type); | 278 BreakType break_type); |
| 276 | 279 |
| 277 // Get the logical index of the grapheme preceeding the argument |position|. | 280 // Get the logical index of the grapheme preceeding the argument |position|. |
| 278 virtual size_t GetIndexOfPreviousGrapheme(size_t position); | 281 virtual size_t GetIndexOfPreviousGrapheme(size_t position); |
| 279 | 282 |
| 280 // Apply composition style (underline) to composition range and selection | 283 // Apply composition style (underline) to composition range and selection |
| 281 // style (foreground) to selection range. | 284 // style (foreground) to selection range. |
| 282 void ApplyCompositionAndSelectionStyles(StyleRanges* style_ranges) const; | 285 void ApplyCompositionAndSelectionStyles(StyleRanges* style_ranges) const; |
| 283 | 286 |
| 287 // Convert points from the text space to the view space and back. | |
| 288 // Handles the display area, display offset, and the application LTR/RTL mode. | |
| 289 // TODO(xji): Remove the functions from RenderTextWin. | |
|
msw
2011/08/23 08:01:01
You don't need this TODO, I'll take care of mergin
xji
2011/08/23 23:52:52
removed.
| |
| 290 Point ToTextPoint(const Point& point); | |
| 291 Point ToViewPoint(const Point& point); | |
| 292 | |
| 284 private: | 293 private: |
| 285 friend class RenderTextTest; | 294 friend class RenderTextTest; |
| 286 | 295 |
| 287 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, DefaultStyle); | 296 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, DefaultStyle); |
| 288 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, CustomDefaultStyle); | 297 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, CustomDefaultStyle); |
| 289 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, ApplyStyleRange); | 298 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, ApplyStyleRange); |
| 290 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, StyleRangesAdjust); | 299 FRIEND_TEST_ALL_PREFIXES(RenderTextTest, StyleRangesAdjust); |
| 291 | 300 |
| 292 // Clear out |style_ranges_|. | 301 // Clear out |style_ranges_|. |
| 293 void ClearStyleRanges(); | 302 void ClearStyleRanges(); |
| 294 | 303 |
| 304 // Set the cursor to |position|, with the caret trailing the previous | |
| 305 // grapheme, or if there is no previous grapheme, leading the cursor position. | |
| 306 // If |select| is false, the selection start is moved to the same position. | |
| 307 void MoveCursorTo(size_t position, bool select); | |
| 308 | |
| 295 bool IsPositionAtWordSelectionBoundary(size_t pos); | 309 bool IsPositionAtWordSelectionBoundary(size_t pos); |
| 296 | 310 |
| 297 // Update the cached bounds and display offset to ensure that the current | 311 // Update the cached bounds and display offset to ensure that the current |
| 298 // cursor is within the visible display area. | 312 // cursor is within the visible display area. |
| 299 void UpdateCachedBoundsAndOffset(); | 313 void UpdateCachedBoundsAndOffset(); |
| 300 | 314 |
| 315 // Returns the selection model of selection_start_. | |
| 316 // The returned value represents a cursor/caret position without a selection. | |
| 317 SelectionModel GetSelectionModelForSelectionStart(); | |
| 318 | |
| 301 // Logical UTF-16 string data to be drawn. | 319 // Logical UTF-16 string data to be drawn. |
| 302 string16 text_; | 320 string16 text_; |
| 303 | 321 |
| 304 // Logical selection range and visual cursor position. | 322 // Logical selection range and visual cursor position. |
| 305 SelectionModel selection_model_; | 323 SelectionModel selection_model_; |
| 306 | 324 |
| 307 // The cached cursor bounds; get these bounds with GetUpdatedCursorBounds. | 325 // The cached cursor bounds; get these bounds with GetUpdatedCursorBounds. |
| 308 Rect cursor_bounds_; | 326 Rect cursor_bounds_; |
| 309 | 327 |
| 310 // The cursor visibility and insert mode. | 328 // The cursor visibility and insert mode. |
| (...skipping 21 matching lines...) Expand all Loading... | |
| 332 // SetCursorPosition, SetSelectionModel, Font related style change, and other | 350 // SetCursorPosition, SetSelectionModel, Font related style change, and other |
| 333 // operations that adjust the visible text bounds. | 351 // operations that adjust the visible text bounds. |
| 334 bool cached_bounds_and_offset_valid_; | 352 bool cached_bounds_and_offset_valid_; |
| 335 | 353 |
| 336 DISALLOW_COPY_AND_ASSIGN(RenderText); | 354 DISALLOW_COPY_AND_ASSIGN(RenderText); |
| 337 }; | 355 }; |
| 338 | 356 |
| 339 } // namespace gfx | 357 } // namespace gfx |
| 340 | 358 |
| 341 #endif // UI_GFX_RENDER_TEXT_H_ | 359 #endif // UI_GFX_RENDER_TEXT_H_ |
| OLD | NEW |