Chromium Code Reviews| Index: views/controls/textfield/native_textfield_views.h |
| diff --git a/views/controls/textfield/native_textfield_views.h b/views/controls/textfield/native_textfield_views.h |
| new file mode 100644 |
| index 0000000000000000000000000000000000000000..842d9bda58494f6d9ffe28e57b1bad91d58b2309 |
| --- /dev/null |
| +++ b/views/controls/textfield/native_textfield_views.h |
| @@ -0,0 +1,172 @@ |
| +// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
| +// Use of this source code is governed by a BSD-style license that can be |
| +// found in the LICENSE file. |
| + |
| +#ifndef VIEWS_CONTROLS_TEXTFIELD_NATIVE_TEXTFIELD_VIEWS_H_ |
| +#define VIEWS_CONTROLS_TEXTFIELD_NATIVE_TEXTFIELD_VIEWS_H_ |
| +#pragma once |
| + |
| +#include "base/string16.h" |
| +#include "base/task.h" |
| +#include "gfx/font.h" |
| +#include "views/border.h" |
| +#include "views/controls/textfield/native_textfield_wrapper.h" |
| +#include "views/view.h" |
| + |
| +namespace gfx { |
| +class Canvas; |
| +} // namespace |
| + |
| +namespace views { |
| + |
| +class KeyEvent; |
| +class TextfieldViewsModel; |
| + |
| +// A views/skia only implementation of NativeTextfieldWrapper. |
| +// No platform specific code is used. |
| +// Following features are not yet supported. |
| +// * BIDI |
| +// * Clipboard (Cut & Paste). |
| +// * Context Menu. |
| +// * IME/i18n support. |
| +// * X selection (only if we want to support). |
| +// * STYLE_MULTILINE, STYLE_LOWERCASE text. (These are not used in |
| +// chromeos, so we may not need them) |
| +// * Double click to select word, and triple click to select all. |
| +class NativeTextfieldViews : public views::View, |
|
sky
2010/12/16 17:29:43
The reason I'm not too keen on this name is that t
|
| + public NativeTextfieldWrapper { |
| + public: |
| + explicit NativeTextfieldViews(Textfield* parent); |
| + ~NativeTextfieldViews(); |
| + |
| + // views::View overrides: |
| + virtual bool OnMousePressed(const views::MouseEvent& e); |
| + virtual bool OnMouseDragged(const views::MouseEvent& e); |
| + virtual void OnMouseReleased(const views::MouseEvent& e, bool canceled); |
| + virtual bool OnKeyPressed(const views::KeyEvent& e); |
| + virtual bool OnKeyReleased(const views::KeyEvent& e); |
| + virtual void Paint(gfx::Canvas* canvas); |
| + virtual void WillGainFocus(); |
| + virtual void DidGainFocus(); |
| + virtual void WillLoseFocus(); |
| + virtual void DidChangeBounds(const gfx::Rect& previous, |
| + const gfx::Rect& current); |
| + |
| + // NativeTextfieldWrapper overrides: |
| + virtual string16 GetText() const; |
| + virtual void UpdateText(); |
| + virtual void AppendText(const string16& text); |
| + virtual string16 GetSelectedText() const; |
| + virtual void SelectAll(); |
| + virtual void ClearSelection(); |
| + virtual void UpdateBorder(); |
| + virtual void UpdateTextColor(); |
| + virtual void UpdateBackgroundColor(); |
| + virtual void UpdateReadOnly(); |
| + virtual void UpdateFont(); |
| + virtual void UpdateIsPassword(); |
| + virtual void UpdateEnabled(); |
| + virtual bool IsPassword(); |
| + virtual gfx::Insets CalculateInsets(); |
| + virtual void UpdateHorizontalMargins(); |
| + virtual void UpdateVerticalMargins(); |
| + virtual void SetFocus(); |
| + virtual View* GetView(); |
| + virtual gfx::NativeView GetTestingHandle() const; |
| + virtual bool IsIMEComposing() const; |
| + |
| + // class name of internal |
| + static const char kViewClassName[]; |
| + |
| + // Returns true when |
| + // 1) built with GYP_DEFIENS="touchui=1" |
| + // 2) enabled by SetEnableTextfieldViews(true) |
| + // 3) enabled by the command line flag "--enable-textfield-view". |
| + static bool IsTextfieldViewsEnabled(); |
| + // Enable/Disable TextfieldViews implementation for Textfield. |
| + static void SetEnableTextfieldViews(bool enabled); |
| + |
| + private: |
| + friend class NativeTextfieldViewsTest; |
| + |
| + // A Border class to draw focus border for the text field. |
| + class TextfieldBorder : public Border { |
| + public: |
| + TextfieldBorder(); |
| + |
| + // Border implementation. |
| + virtual void Paint(const View& view, gfx::Canvas* canvas) const; |
| + virtual void GetInsets(gfx::Insets* insets) const; |
| + |
| + // Sets the insets of the border. |
| + void SetInsets(int top, int left, int bottom, int right); |
| + |
| + // Sets the focus state. |
| + void set_has_focus(bool has_focus) { |
| + has_focus_ = has_focus; |
| + } |
| + |
| + private: |
| + bool has_focus_; |
| + gfx::Insets insets_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(TextfieldBorder); |
| + }; |
| + |
| + // Returns the Textfield's font. |
| + const gfx::Font& GetFont() const; |
| + |
| + // Returns the Textfield's text color. |
| + SkColor GetTextColor() const; |
| + |
| + // A callback function to periodically update the cursor state. |
| + void UpdateCursor(); |
| + |
| + // Repaint the cursor. |
| + void RepaintCursor(); |
| + |
| + // Update the cursor_bounds and text_offset. |
| + void UpdateCursorBoundsAndTextOffset(); |
| + |
| + void PaintTextAndCursor(gfx::Canvas* canvas); |
| + |
| + // Handle the keyevent. |
| + bool HandleKeyEvent(const KeyEvent& key_event); |
| + |
| + // Utility function. Gets the character corresponding to a keyevent. |
| + // Returns 0 if the character is not printable. |
| + char16 GetPrintableChar(const KeyEvent& key_event); |
| + |
| + // Find a cusor position for given |point| in this views coordinates. |
| + size_t FindCursorPosition(const gfx::Point& point) const; |
| + |
| + // The parent textfield, the owner of this object. |
| + Textfield* textfield_; |
| + |
| + // The text model. |
| + scoped_ptr<TextfieldViewsModel> model_; |
| + |
| + // The reference to the border class. The object is owned by View::border_. |
| + TextfieldBorder* text_border_; |
| + |
| + // The x offset for the text to be drawn, without insets; |
| + int text_offset_; |
| + |
| + // Cursor's bounds in the textfield's coordinates. |
| + gfx::Rect cursor_bounds_; |
| + |
| + // True if the textfield is in insert mode. |
| + bool insert_; |
| + |
| + // The drawing state of cursor. True to draw. |
| + bool is_cursor_visible_; |
| + |
| + // A runnable method factory for callback to update the cursor. |
| + ScopedRunnableMethodFactory<NativeTextfieldViews> cursor_timer_; |
| + |
| + DISALLOW_COPY_AND_ASSIGN(NativeTextfieldViews); |
| +}; |
| + |
| +} // namespace views |
| + |
| +#endif // VIEWS_CONTROLS_TEXTFIELD_NATIVE_TEXTFIELD_VIEWS_H_ |