| 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..cfb47be3dee691a57046797d4ac4831c4518f872
|
| --- /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,
|
| + 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_
|
|
|