Index: views/widget/root_view.h |
diff --git a/views/widget/root_view.h b/views/widget/root_view.h |
new file mode 100644 |
index 0000000000000000000000000000000000000000..1a17d3887706442eca12dc1c51b434644b1f4b1f |
--- /dev/null |
+++ b/views/widget/root_view.h |
@@ -0,0 +1,207 @@ |
+// Copyright (c) 2011 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_WIDGET_ROOT_VIEW_H_ |
+#define VIEWS_WIDGET_ROOT_VIEW_H_ |
+#pragma once |
+ |
+#include <string> |
+ |
+#include "base/memory/ref_counted.h" |
+#include "ui/views/focus/focus_manager.h" |
+#include "ui/views/focus/focus_search.h" |
+#include "views/view.h" |
+ |
+namespace ui { |
+enum TouchStatus; |
+} |
+ |
+namespace views { |
+ |
+class Widget; |
+class GestureManager; |
+ |
+// This is a views-internal API and should not be used externally. |
+// Widget exposes this object as a View*. |
+namespace internal { |
+ |
+//////////////////////////////////////////////////////////////////////////////// |
+// RootView class |
+// |
+// The RootView is the root of a View hierarchy. A RootView is attached to a |
+// Widget. The Widget is responsible for receiving events from the host |
+// environment, converting them to views-compatible events and then forwarding |
+// them to the RootView for propagation into the View hierarchy. |
+// |
+// A RootView can have only one child, called its "Contents View" which is |
+// sized to fill the bounds of the RootView (and hence the client area of the |
+// Widget). Call SetContentsView() after the associated Widget has been |
+// initialized to attach the contents view to the RootView. |
+// TODO(beng): Enforce no other callers to AddChildView/tree functions by |
+// overriding those methods as private here. |
+// TODO(beng): Clean up API further, make Widget a friend. |
+// TODO(sky): We don't really want to export this class. |
+// |
+class VIEWS_EXPORT RootView : public View, public FocusTraversable { |
+ public: |
+ static const char kViewClassName[]; |
+ |
+ // Creation and lifetime ----------------------------------------------------- |
+ explicit RootView(Widget* widget); |
+ virtual ~RootView(); |
+ |
+ // Tree operations ----------------------------------------------------------- |
+ |
+ // Sets the "contents view" of the RootView. This is the single child view |
+ // that is responsible for laying out the contents of the widget. |
+ void SetContentsView(View* contents_view); |
+ View* GetContentsView(); |
+ |
+ // Called when parent of the host changed. |
+ void NotifyNativeViewHierarchyChanged(bool attached, |
+ gfx::NativeView native_view); |
+ |
+ // Input --------------------------------------------------------------------- |
+ |
+ // Process a key event. Send the event to the focused view and up the focus |
+ // path, and finally to the default keyboard handler, until someone consumes |
+ // it. Returns whether anyone consumed the event. |
+ bool OnKeyEvent(const KeyEvent& event); |
+ |
+ // Provided only for testing: |
+ void SetGestureManagerForTesting(GestureManager* g) { gesture_manager_ = g; } |
+ |
+ // Focus --------------------------------------------------------------------- |
+ |
+ // Used to set the FocusTraversable parent after the view has been created |
+ // (typically when the hierarchy changes and this RootView is added/removed). |
+ virtual void SetFocusTraversableParent(FocusTraversable* focus_traversable); |
+ |
+ // Used to set the View parent after the view has been created. |
+ virtual void SetFocusTraversableParentView(View* view); |
+ |
+ // System events ------------------------------------------------------------- |
+ |
+ // Public API for broadcasting theme change notifications to this View |
+ // hierarchy. |
+ void ThemeChanged(); |
+ |
+ // Public API for broadcasting locale change notifications to this View |
+ // hierarchy. |
+ void LocaleChanged(); |
+ |
+ // Overridden from FocusTraversable: |
+ virtual FocusSearch* GetFocusSearch() OVERRIDE; |
+ virtual FocusTraversable* GetFocusTraversableParent() OVERRIDE; |
+ virtual View* GetFocusTraversableParentView() OVERRIDE; |
+ |
+ // Overridden from View: |
+ virtual const Widget* GetWidget() const OVERRIDE; |
+ virtual Widget* GetWidget() OVERRIDE; |
+ virtual bool IsVisibleInRootView() const OVERRIDE; |
+ virtual std::string GetClassName() const OVERRIDE; |
+ virtual void SchedulePaintInRect(const gfx::Rect& rect) OVERRIDE; |
+ virtual bool OnMousePressed(const MouseEvent& event) OVERRIDE; |
+ virtual bool OnMouseDragged(const MouseEvent& event) OVERRIDE; |
+ virtual void OnMouseReleased(const MouseEvent& event) OVERRIDE; |
+ virtual void OnMouseCaptureLost() OVERRIDE; |
+ virtual void OnMouseMoved(const MouseEvent& event) OVERRIDE; |
+ virtual void OnMouseExited(const MouseEvent& event) OVERRIDE; |
+ virtual bool OnMouseWheel(const MouseWheelEvent& event) OVERRIDE; |
+ virtual ui::TouchStatus OnTouchEvent(const TouchEvent& event) OVERRIDE; |
+ virtual void SetMouseHandler(View* new_mouse_handler) OVERRIDE; |
+ virtual void GetAccessibleState(ui::AccessibleViewState* state) OVERRIDE; |
+ |
+ protected: |
+ // Overridden from View: |
+ virtual void ViewHierarchyChanged(bool is_add, View* parent, |
+ View* child) OVERRIDE; |
+ virtual void OnPaint(gfx::Canvas* canvas) OVERRIDE; |
+ virtual void CalculateOffsetToAncestorWithLayer( |
+ gfx::Point* offset, |
+ ui::Layer** layer_parent) OVERRIDE; |
+ |
+ private: |
+ friend class View; |
+ friend class Widget; |
+ |
+ // Required so the GestureManager can call the Process* entry points |
+ // with synthetic events as necessary. |
+ friend class GestureManager; |
+ |
+ // Input --------------------------------------------------------------------- |
+ |
+ // Update the cursor given a mouse event. This is called by non mouse_move |
+ // event handlers to honor the cursor desired by views located under the |
+ // cursor during drag operations. The location of the mouse should be in the |
+ // current coordinate system (i.e. any necessary transformation should be |
+ // applied to the point prior to calling this). |
+ void UpdateCursor(const MouseEvent& event); |
+ |
+ // Updates the last_mouse_* fields from e. The location of the mouse should be |
+ // in the current coordinate system (i.e. any necessary transformation should |
+ // be applied to the point prior to calling this). |
+ void SetMouseLocationAndFlags(const MouseEvent& event); |
+ |
+ ////////////////////////////////////////////////////////////////////////////// |
+ |
+ // Tree operations ----------------------------------------------------------- |
+ |
+ // The host Widget |
+ Widget* widget_; |
+ |
+ // Input --------------------------------------------------------------------- |
+ |
+ // The view currently handing down - drag - up |
+ View* mouse_pressed_handler_; |
+ |
+ // The view currently handling enter / exit |
+ View* mouse_move_handler_; |
+ |
+ // The last view to handle a mouse click, so that we can determine if |
+ // a double-click lands on the same view as its single-click part. |
+ View* last_click_handler_; |
+ |
+ // true if mouse_pressed_handler_ has been explicitly set |
+ bool explicit_mouse_handler_; |
+ |
+ // Last position/flag of a mouse press/drag. Used if capture stops and we need |
+ // to synthesize a release. |
+ int last_mouse_event_flags_; |
+ int last_mouse_event_x_; |
+ int last_mouse_event_y_; |
+ |
+ // The gesture_manager_ for this. |
+ GestureManager* gesture_manager_; |
+ |
+ // The view currently handling touch events. |
+ View* touch_pressed_handler_; |
+ |
+ // Focus --------------------------------------------------------------------- |
+ |
+ // The focus search algorithm. |
+ FocusSearch focus_search_; |
+ |
+ // Whether this root view belongs to the current active window. |
+ // bool activated_; |
+ |
+ // The parent FocusTraversable, used for focus traversal. |
+ FocusTraversable* focus_traversable_parent_; |
+ |
+ // The View that contains this RootView. This is used when we have RootView |
+ // wrapped inside native components, and is used for the focus traversal. |
+ View* focus_traversable_parent_view_; |
+ |
+ // Drag and drop ------------------------------------------------------------- |
+ |
+ // Tracks drag state for a view. |
+ View::DragInfo drag_info; |
+ |
+ DISALLOW_IMPLICIT_CONSTRUCTORS(RootView); |
+}; |
+ |
+} // namespace internal |
+} // namespace views |
+ |
+#endif // VIEWS_WIDGET_ROOT_VIEW_H_ |