Index: views/controls/textfield/textfield_views_model.h |
diff --git a/views/controls/textfield/textfield_views_model.h b/views/controls/textfield/textfield_views_model.h |
index 297c8aeddd44af6949baeb82506f8293cb8fc56e..35f2f59d6f6ff221f44dbc3120398adb32471df6 100644 |
--- a/views/controls/textfield/textfield_views_model.h |
+++ b/views/controls/textfield/textfield_views_model.h |
@@ -14,9 +14,13 @@ |
#include "third_party/skia/include/core/SkColor.h" |
#include "ui/base/ime/composition_text.h" |
#include "ui/gfx/rect.h" |
+#include "ui/gfx/render_text.h" |
namespace gfx { |
+class Canvas; |
class Font; |
+class RenderText; |
+struct StyleRange; |
} // namespace gfx |
namespace ui { |
@@ -25,15 +29,10 @@ class Range; |
namespace views { |
-class TextStyle; |
-typedef std::vector<TextStyle*> TextStyles; |
- |
namespace internal { |
// Internal Edit class that keeps track of edits for undo/redo. |
class Edit; |
-struct TextStyleRange; |
- |
// C++ doesn't allow forward decl enum, so let's define here. |
enum MergeType { |
// The edit should not be merged with next edit. It still may |
@@ -49,8 +48,6 @@ enum MergeType { |
} // namespace internal |
-typedef std::vector<internal::TextStyleRange*> TextStyleRanges; |
- |
// A model that represents a text content for TextfieldViews. |
// It supports editing, selection and cursor manipulation. |
class TextfieldViewsModel { |
@@ -70,31 +67,14 @@ class TextfieldViewsModel { |
explicit TextfieldViewsModel(Delegate* delegate); |
virtual ~TextfieldViewsModel(); |
- // Text fragment info. Used to draw selected text. |
- // We may replace this with TextAttribute class |
- // in the future to support multi-color text |
- // for omnibox. |
- struct TextFragment { |
- TextFragment(size_t start, size_t end, const views::TextStyle* s) |
- : range(start, end), style(s) { |
- } |
- // The start and end position of text fragment. |
- ui::Range range; |
- const TextStyle* style; |
- }; |
- typedef std::vector<TextFragment> TextFragments; |
- |
- // Gets the text element info. |
- void GetFragments(TextFragments* elements); |
- |
void set_is_password(bool is_password) { |
is_password_ = is_password; |
} |
- const string16& text() const { return text_; } |
// Edit related methods. |
- // Sest the text. Returns true if the text has been modified. The |
+ const string16& GetText() const; |
+ // Sets the text. Returns true if the text has been modified. The |
// current composition text will be confirmed first. Setting |
// the same text will not add edit history because it's not user |
// visible change nor user-initiated change. This allow a client |
@@ -102,6 +82,8 @@ class TextfieldViewsModel { |
// messing edit history. |
bool SetText(const string16& text); |
+ gfx::RenderText* get_render_text() { return render_text_; } |
oshima
2011/07/23 09:51:12
ditto
msw
2011/07/25 05:09:54
Done.
|
+ |
// Inserts given |text| at the current cursor position. |
// The current composition text will be cleared. |
void InsertText(const string16& text) { |
@@ -143,46 +125,23 @@ class TextfieldViewsModel { |
// Cursor related methods. |
// Returns the current cursor position. |
- size_t cursor_pos() const { return cursor_pos_; } |
- |
- // Moves the cursor left by one position (as if, the user has pressed the left |
- // arrow key). If |select| is true, it updates the selection accordingly. |
- // The current composition text will be confirmed. |
- void MoveCursorLeft(bool select); |
+ size_t GetCursorPosition() const; |
- // Moves the cursor right by one position (as if, the user has pressed the |
- // right arrow key). If |select| is true, it updates the selection |
- // accordingly. |
- // The current composition text will be confirmed. |
- void MoveCursorRight(bool select); |
- |
- // Moves the cursor left by one word (word boundry is defined by space). |
- // If |select| is true, it updates the selection accordingly. |
- // The current composition text will be confirmed. |
- void MoveCursorToPreviousWord(bool select); |
- |
- // Moves the cursor right by one word (word boundry is defined by space). |
- // If |select| is true, it updates the selection accordingly. |
- // The current composition text will be confirmed. |
- void MoveCursorToNextWord(bool select); |
- |
- // Moves the cursor to start of the textfield contents. |
- // If |select| is true, it updates the selection accordingly. |
+ // Moves the cursor, see RenderText for additional details. |
// The current composition text will be confirmed. |
- void MoveCursorToHome(bool select); |
- |
- // Moves the cursor to end of the textfield contents. |
- // If |select| is true, it updates the selection accordingly. |
- // The current composition text will be confirmed. |
- void MoveCursorToEnd(bool select); |
+ void MoveCursorLeft(gfx::BreakType break_type, bool select); |
+ void MoveCursorRight(gfx::BreakType break_type, bool select); |
// Moves the cursor to the specified |position|. |
// If |select| is true, it updates the selection accordingly. |
// The current composition text will be confirmed. |
bool MoveCursorTo(size_t position, bool select); |
+ // Helper function to call MoveCursorTo on the TextfieldViewsModel. |
+ bool MoveCursorTo(const gfx::Point& point, bool select); |
+ |
// Returns the bounds of selected text. |
- gfx::Rect GetSelectionBounds(const gfx::Font& font) const; |
+ std::vector<gfx::Rect> GetSelectionBounds() const; |
// Selection related method |
@@ -223,9 +182,7 @@ class TextfieldViewsModel { |
// Returns visible text. If the field is password, it returns the |
// sequence of "*". |
- string16 GetVisibleText() const { |
- return GetVisibleText(0U, text_.length()); |
- } |
+ string16 GetVisibleText() const; |
// Cuts the currently selected text and puts it to clipboard. Returns true |
// if text has changed after cutting. |
@@ -277,15 +234,10 @@ class TextfieldViewsModel { |
// Returns true if there is composition text. |
bool HasCompositionText() const; |
- TextStyle* CreateTextStyle(); |
- |
- void ClearAllTextStyles(); |
- |
private: |
friend class NativeTextfieldViews; |
friend class NativeTextfieldViewsTest; |
friend class TextfieldViewsModelTest; |
- friend class TextStyle; |
friend class UndoRedo_BasicTest; |
friend class UndoRedo_CutCopyPasteTest; |
friend class UndoRedo_ReplaceTest; |
@@ -294,18 +246,10 @@ class TextfieldViewsModel { |
FRIEND_TEST_ALL_PREFIXES(TextfieldViewsModelTest, UndoRedo_BasicTest); |
FRIEND_TEST_ALL_PREFIXES(TextfieldViewsModelTest, UndoRedo_CutCopyPasteTest); |
FRIEND_TEST_ALL_PREFIXES(TextfieldViewsModelTest, UndoRedo_ReplaceTest); |
- FRIEND_TEST_ALL_PREFIXES(TextfieldViewsModelTest, TextStyleTest); |
// Returns the visible text given |start| and |end|. |
string16 GetVisibleText(size_t start, size_t end) const; |
- // Utility for SelectWord(). Checks whether position pos is at word boundary. |
- bool IsPositionAtWordSelectionBoundary(size_t pos); |
- |
- // Returns the normalized cursor position that does not exceed the |
- // text length. |
- size_t GetSafePosition(size_t position) const; |
- |
// Insert the given |text|. |mergeable| indicates if this insert |
// operation can be merged to previous edit in the edit history. |
void InsertTextInternal(const string16& text, bool mergeable); |
@@ -349,26 +293,12 @@ class TextfieldViewsModel { |
void ClearComposition(); |
- void ApplyTextStyle(const TextStyle* style, const ui::Range& range); |
- |
- static TextStyle* CreateUnderlineStyle(); |
- |
// Pointer to a TextfieldViewsModel::Delegate instance, should be provided by |
// the View object. |
Delegate* delegate_; |
- // The text in utf16 format. |
- string16 text_; |
- |
- // Current cursor position. |
- size_t cursor_pos_; |
- |
- // Selection range. |
- size_t selection_start_; |
- |
- // Composition text range. |
- size_t composition_start_; |
- size_t composition_end_; |
+ // The stylized text, cursor, selection, and the visual layout model. |
+ gfx::RenderText* render_text_; |
// True if the text is the password. |
bool is_password_; |
@@ -389,19 +319,6 @@ class TextfieldViewsModel { |
// 3) redone all undone edits. |
EditHistory::iterator current_edit_; |
- // This manages all styles objects. |
- TextStyles text_styles_; |
- |
- // List of style ranges. Elements in the list never overlap each other. |
- // Elements are not sorted at the time of insertion, and gets sorted |
- // when it's painted (if necessary). |
- TextStyleRanges style_ranges_; |
- // True if the style_ranges_ needs to be sorted. |
- bool sort_style_ranges_; |
- |
- // List of style ranges for composition text. |
- TextStyleRanges composition_style_ranges_; |
- |
DISALLOW_COPY_AND_ASSIGN(TextfieldViewsModel); |
}; |