touch_editable_impl_aura.h revision 0529e5d033099cbfc42635f6f6183833b09dff6e
19066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Copyright (c) 2013 The Chromium Authors. All rights reserved.
29066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Use of this source code is governed by a BSD-style license that can be
39066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// found in the LICENSE file.
49066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
59066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#ifndef CONTENT_BROWSER_WEB_CONTENTS_TOUCH_EDITABLE_IMPL_AURA_H_
69066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#define CONTENT_BROWSER_WEB_CONTENTS_TOUCH_EDITABLE_IMPL_AURA_H_
79066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
89066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <deque>
99066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <map>
109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include <queue>
119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "content/browser/renderer_host/render_widget_host_view_aura.h"
139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "ui/aura/window_observer.h"
149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "ui/base/touch/touch_editing_controller.h"
159066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "ui/gfx/native_widget_types.h"
169066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "ui/gfx/point.h"
179066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#include "ui/gfx/rect.h"
189066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
199066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace ui {
209066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass Accelerator;
219066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}
229066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
239066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectnamespace content {
2446baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadlerclass TouchEditableImplAuraTest;
2546baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadler
269066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project// Aura specific implementation of ui::TouchEditable for a RenderWidgetHostView.
279066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Projectclass CONTENT_EXPORT TouchEditableImplAura
28825c5132bff21e72c1448241f4c6868563c8d624Jeff Brown    : public ui::TouchEditable,
29825c5132bff21e72c1448241f4c6868563c8d624Jeff Brown      public NON_EXPORTED_BASE(RenderWidgetHostViewAura::TouchEditingClient) {
309066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project public:
31825c5132bff21e72c1448241f4c6868563c8d624Jeff Brown  virtual ~TouchEditableImplAura();
32825c5132bff21e72c1448241f4c6868563c8d624Jeff Brown
33825c5132bff21e72c1448241f4c6868563c8d624Jeff Brown  static TouchEditableImplAura* Create();
34825c5132bff21e72c1448241f4c6868563c8d624Jeff Brown
359066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  void AttachToView(RenderWidgetHostViewAura* view);
369066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
379066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // Updates the |touch_selection_controller_| or ends touch editing session
389066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // depending on the current selection and cursor state.
3946baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadler  void UpdateEditingController();
407ce745248d4de0e6543a559c93423df899832100Jeff Brown
417ce745248d4de0e6543a559c93423df899832100Jeff Brown  void OverscrollStarted();
427ce745248d4de0e6543a559c93423df899832100Jeff Brown  void OverscrollCompleted();
4346baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadler
4446baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadler  // Overridden from RenderWidgetHostViewAura::TouchEditingClient.
4546baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadler  virtual void StartTouchEditing() OVERRIDE;
4646baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadler  virtual void EndTouchEditing(bool quick) OVERRIDE;
4746baf533f5f66e1c5ebc8ca45c2ed5211c790cdfAndrew Stadler  virtual void OnSelectionOrCursorChanged(const gfx::Rect& anchor,
489066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                                          const gfx::Rect& focus) OVERRIDE;
499066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void OnTextInputTypeChanged(ui::TextInputType type) OVERRIDE;
509066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual bool HandleInputEvent(const ui::Event* event) OVERRIDE;
519066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void GestureEventAck(int gesture_event_type) OVERRIDE;
529066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void OnViewDestroyed() OVERRIDE;
539066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
549066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // Overridden from ui::TouchEditable:
559066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void SelectRect(const gfx::Point& start,
569066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project                          const gfx::Point& end) OVERRIDE;
579066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void MoveCaretTo(const gfx::Point& point) OVERRIDE;
589066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void GetSelectionEndPoints(gfx::Rect* p1, gfx::Rect* p2) OVERRIDE;
599066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual gfx::Rect GetBounds() OVERRIDE;
609066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual gfx::NativeView GetNativeView() const OVERRIDE;
619066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void ConvertPointToScreen(gfx::Point* point) OVERRIDE;
629066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void ConvertPointFromScreen(gfx::Point* point) OVERRIDE;
639066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual bool DrawsHandles() OVERRIDE;
649066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void OpenContextMenu(const gfx::Point& anchor) OVERRIDE;
659066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual bool IsCommandIdChecked(int command_id) const OVERRIDE;
669066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual bool IsCommandIdEnabled(int command_id) const OVERRIDE;
679066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual bool GetAcceleratorForCommandId(
689066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      int command_id,
699066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project      ui::Accelerator* accelerator) OVERRIDE;
709066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  virtual void ExecuteCommand(int command_id, int event_flags) OVERRIDE;
719066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
729066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project protected:
739066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  TouchEditableImplAura();
749066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
759066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project private:
769066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  friend class TouchEditableImplAuraTest;
779066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
789066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  void Cleanup();
799066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
809066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // Rectangles for the selection anchor and focus.
819066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  gfx::Rect selection_anchor_rect_;
829066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  gfx::Rect selection_focus_rect_;
839066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
849066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // The current text input type.
859066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  ui::TextInputType text_input_type_;
869066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
879066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  RenderWidgetHostViewAura* rwhva_;
889066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  scoped_ptr<ui::TouchSelectionController> touch_selection_controller_;
899066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
909066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // True if |rwhva_| is currently handling a gesture that could result in a
919066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // change in selection (long press, double tap or triple tap).
929066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  bool selection_gesture_in_process_;
939066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
949066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // Set to true if handles are hidden when user is scrolling. Used to determine
959066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // whether to re-show handles after a scrolling session.
969066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  bool handles_hidden_due_to_scroll_;
979066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
989066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // Keeps track of when the user is scrolling.
999066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  bool scroll_in_progress_;
1009066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1019066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // Set to true when the page starts an overscroll.
1029066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  bool overscroll_in_progress_;
1039066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1049066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // Used to track if a textfield was focused when the current tap gesture
1059066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  // happened.
1069066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  bool textfield_was_focused_on_tap_;
1079066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1089066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project  DISALLOW_COPY_AND_ASSIGN(TouchEditableImplAura);
1099066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project};
1109066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1119066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project}  // namespace content
1129066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project
1139066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project#endif  // CONTENT_BROWSER_WEB_CONTENTS_TOUCH_EDITABLE_IMPL_AURA_H_
1149066cfe9886ac131c34d59ed0e2d287b0e3c0087The Android Open Source Project