Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(451)

Side by Side Diff: ui/views/widget/root_view.h

Issue 851853002: It is time. (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: Trying to reup because the last upload failed. Created 5 years, 11 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « ui/views/widget/native_widget_unittest.cc ('k') | ui/views/widget/root_view.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #ifndef UI_VIEWS_WIDGET_ROOT_VIEW_H_
6 #define UI_VIEWS_WIDGET_ROOT_VIEW_H_
7
8 #include <string>
9
10 #include "base/memory/ref_counted.h"
11 #include "ui/events/event_processor.h"
12 #include "ui/views/focus/focus_manager.h"
13 #include "ui/views/focus/focus_search.h"
14 #include "ui/views/view.h"
15 #include "ui/views/view_targeter_delegate.h"
16
17 namespace views {
18
19 namespace test {
20 class ViewTargeterTest;
21 class WidgetTest;
22 }
23
24 class RootViewTargeter;
25 class Widget;
26
27 // This is a views-internal API and should not be used externally.
28 // Widget exposes this object as a View*.
29 namespace internal {
30 class PreEventDispatchHandler;
31
32 ////////////////////////////////////////////////////////////////////////////////
33 // RootView class
34 //
35 // The RootView is the root of a View hierarchy. A RootView is attached to a
36 // Widget. The Widget is responsible for receiving events from the host
37 // environment, converting them to views-compatible events and then forwarding
38 // them to the RootView for propagation into the View hierarchy.
39 //
40 // A RootView can have only one child, called its "Contents View" which is
41 // sized to fill the bounds of the RootView (and hence the client area of the
42 // Widget). Call SetContentsView() after the associated Widget has been
43 // initialized to attach the contents view to the RootView.
44 // TODO(beng): Enforce no other callers to AddChildView/tree functions by
45 // overriding those methods as private here.
46 // TODO(beng): Clean up API further, make Widget a friend.
47 // TODO(sky): We don't really want to export this class.
48 //
49 class VIEWS_EXPORT RootView : public View,
50 public ViewTargeterDelegate,
51 public FocusTraversable,
52 public ui::EventProcessor {
53 public:
54 static const char kViewClassName[];
55
56 // Creation and lifetime -----------------------------------------------------
57 explicit RootView(Widget* widget);
58 virtual ~RootView();
59
60 // Tree operations -----------------------------------------------------------
61
62 // Sets the "contents view" of the RootView. This is the single child view
63 // that is responsible for laying out the contents of the widget.
64 void SetContentsView(View* contents_view);
65 View* GetContentsView();
66
67 // Called when parent of the host changed.
68 void NotifyNativeViewHierarchyChanged();
69
70 // Focus ---------------------------------------------------------------------
71
72 // Used to set the FocusTraversable parent after the view has been created
73 // (typically when the hierarchy changes and this RootView is added/removed).
74 virtual void SetFocusTraversableParent(FocusTraversable* focus_traversable);
75
76 // Used to set the View parent after the view has been created.
77 virtual void SetFocusTraversableParentView(View* view);
78
79 // System events -------------------------------------------------------------
80
81 // Public API for broadcasting theme change notifications to this View
82 // hierarchy.
83 void ThemeChanged();
84
85 // Public API for broadcasting locale change notifications to this View
86 // hierarchy.
87 void LocaleChanged();
88
89 // Overridden from FocusTraversable:
90 virtual FocusSearch* GetFocusSearch() override;
91 virtual FocusTraversable* GetFocusTraversableParent() override;
92 virtual View* GetFocusTraversableParentView() override;
93
94 // Overridden from ui::EventProcessor:
95 virtual ui::EventTarget* GetRootTarget() override;
96 virtual void OnEventProcessingStarted(ui::Event* event) override;
97 virtual void OnEventProcessingFinished(ui::Event* event) override;
98
99 // Overridden from View:
100 virtual const Widget* GetWidget() const override;
101 virtual Widget* GetWidget() override;
102 virtual bool IsDrawn() const override;
103 virtual void Layout() override;
104 virtual const char* GetClassName() const override;
105 virtual void SchedulePaintInRect(const gfx::Rect& rect) override;
106 virtual bool OnMousePressed(const ui::MouseEvent& event) override;
107 virtual bool OnMouseDragged(const ui::MouseEvent& event) override;
108 virtual void OnMouseReleased(const ui::MouseEvent& event) override;
109 virtual void OnMouseCaptureLost() override;
110 virtual void OnMouseMoved(const ui::MouseEvent& event) override;
111 virtual void OnMouseExited(const ui::MouseEvent& event) override;
112 virtual bool OnMouseWheel(const ui::MouseWheelEvent& event) override;
113 virtual void SetMouseHandler(View* new_mouse_handler) override;
114 virtual void GetAccessibleState(ui::AXViewState* state) override;
115 virtual void UpdateParentLayer() override;
116
117 protected:
118 // Overridden from View:
119 virtual void ViewHierarchyChanged(
120 const ViewHierarchyChangedDetails& details) override;
121 virtual void VisibilityChanged(View* starting_from, bool is_visible) override;
122 virtual void OnPaint(gfx::Canvas* canvas) override;
123 virtual gfx::Vector2d CalculateOffsetToAncestorWithLayer(
124 ui::Layer** layer_parent) override;
125 virtual View::DragInfo* GetDragInfo() override;
126
127 private:
128 friend class ::views::RootViewTargeter;
129 friend class ::views::View;
130 friend class ::views::Widget;
131 friend class ::views::test::ViewTargeterTest;
132 friend class ::views::test::WidgetTest;
133
134 // Input ---------------------------------------------------------------------
135
136 // Update the cursor given a mouse event. This is called by non mouse_move
137 // event handlers to honor the cursor desired by views located under the
138 // cursor during drag operations. The location of the mouse should be in the
139 // current coordinate system (i.e. any necessary transformation should be
140 // applied to the point prior to calling this).
141 void UpdateCursor(const ui::MouseEvent& event);
142
143 // Updates the last_mouse_* fields from e. The location of the mouse should be
144 // in the current coordinate system (i.e. any necessary transformation should
145 // be applied to the point prior to calling this).
146 void SetMouseLocationAndFlags(const ui::MouseEvent& event);
147
148 // |view| is the view receiving |event|. This function sends the event to all
149 // the Views up the hierarchy that has |notify_enter_exit_on_child_| flag
150 // turned on, but does not contain |sibling|.
151 void NotifyEnterExitOfDescendant(const ui::MouseEvent& event,
152 ui::EventType type,
153 View* view,
154 View* sibling);
155
156 // Overridden from ui::EventDispatcherDelegate:
157 virtual bool CanDispatchToTarget(ui::EventTarget* target) override;
158 virtual ui::EventDispatchDetails PreDispatchEvent(ui::EventTarget* target,
159 ui::Event* event) override;
160 virtual ui::EventDispatchDetails PostDispatchEvent(
161 ui::EventTarget* target, const ui::Event& event) override;
162
163 //////////////////////////////////////////////////////////////////////////////
164 // Tree operations -----------------------------------------------------------
165
166 // The host Widget
167 Widget* widget_;
168
169 // Input ---------------------------------------------------------------------
170
171 // TODO(tdanderson): Consider moving the input-related members into
172 // ViewTargeter / RootViewTargeter.
173
174 // The view currently handing down - drag - up
175 View* mouse_pressed_handler_;
176
177 // The view currently handling enter / exit
178 View* mouse_move_handler_;
179
180 // The last view to handle a mouse click, so that we can determine if
181 // a double-click lands on the same view as its single-click part.
182 View* last_click_handler_;
183
184 // true if mouse_pressed_handler_ has been explicitly set
185 bool explicit_mouse_handler_;
186
187 // Last position/flag of a mouse press/drag. Used if capture stops and we need
188 // to synthesize a release.
189 int last_mouse_event_flags_;
190 int last_mouse_event_x_;
191 int last_mouse_event_y_;
192
193 // The View currently handling gesture events.
194 View* gesture_handler_;
195
196 // Used to indicate if the |gesture_handler_| member was set prior to the
197 // processing of the current event (i.e., if |gesture_handler_| was set
198 // by the dispatch of a previous gesture event).
199 // TODO(tdanderson): It may be possible to eliminate the need for this
200 // member if |event_dispatch_target_| can be used in
201 // its place.
202 bool gesture_handler_set_before_processing_;
203
204 scoped_ptr<internal::PreEventDispatchHandler> pre_dispatch_handler_;
205 scoped_ptr<internal::PostEventDispatchHandler> post_dispatch_handler_;
206
207 // Focus ---------------------------------------------------------------------
208
209 // The focus search algorithm.
210 FocusSearch focus_search_;
211
212 // Whether this root view belongs to the current active window.
213 // bool activated_;
214
215 // The parent FocusTraversable, used for focus traversal.
216 FocusTraversable* focus_traversable_parent_;
217
218 // The View that contains this RootView. This is used when we have RootView
219 // wrapped inside native components, and is used for the focus traversal.
220 View* focus_traversable_parent_view_;
221
222 View* event_dispatch_target_;
223 View* old_dispatch_target_;
224
225 // Drag and drop -------------------------------------------------------------
226
227 // Tracks drag state for a view.
228 View::DragInfo drag_info_;
229
230 DISALLOW_IMPLICIT_CONSTRUCTORS(RootView);
231 };
232
233 } // namespace internal
234 } // namespace views
235
236 #endif // UI_VIEWS_WIDGET_ROOT_VIEW_H_
OLDNEW
« no previous file with comments | « ui/views/widget/native_widget_unittest.cc ('k') | ui/views/widget/root_view.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698