| 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_
|
|
|