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

Side by Side Diff: ash/aura/pointer_watcher_adapter.cc

Issue 2271393002: Wires up drags to pointer watcher adapter. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@lkgr
Patch Set: Rebased. Created 4 years, 3 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ash/aura/pointer_watcher_adapter.h" 5 #include "ash/aura/pointer_watcher_adapter.h"
6 6
7 #include "ash/shell.h" 7 #include "ash/shell.h"
8 #include "ui/aura/client/screen_position_client.h" 8 #include "ui/aura/client/screen_position_client.h"
9 #include "ui/aura/window.h" 9 #include "ui/aura/window.h"
10 #include "ui/display/screen.h" 10 #include "ui/display/screen.h"
11 #include "ui/events/event.h" 11 #include "ui/events/event.h"
12 #include "ui/events/event_constants.h" 12 #include "ui/events/event_constants.h"
13 #include "ui/gfx/geometry/point.h" 13 #include "ui/gfx/geometry/point.h"
14 #include "ui/views/pointer_watcher.h" 14 #include "ui/views/pointer_watcher.h"
15 #include "ui/views/widget/widget.h" 15 #include "ui/views/widget/widget.h"
16 16
17 namespace ash { 17 namespace ash {
18 18
19 PointerWatcherAdapter::PointerWatcherAdapter() { 19 PointerWatcherAdapter::PointerWatcherAdapter() {
20 Shell::GetInstance()->AddPreTargetHandler(this); 20 Shell::GetInstance()->AddPreTargetHandler(this);
21 } 21 }
22 22
23 PointerWatcherAdapter::~PointerWatcherAdapter() { 23 PointerWatcherAdapter::~PointerWatcherAdapter() {
24 Shell::GetInstance()->RemovePreTargetHandler(this); 24 Shell::GetInstance()->RemovePreTargetHandler(this);
25 } 25 }
26 26
27 void PointerWatcherAdapter::AddPointerWatcher(views::PointerWatcher* watcher, 27 void PointerWatcherAdapter::AddPointerWatcher(
28 bool wants_moves) { 28 views::PointerWatcher* watcher,
29 views::PointerWatcherEventTypes events) {
29 // We only allow a watcher to be added once. That is, we don't consider 30 // We only allow a watcher to be added once. That is, we don't consider
30 // the pair of |watcher| and |wants_move| unique, just |watcher|. 31 // the pair of |watcher| and |events| unique, just |watcher|.
31 if (wants_moves) { 32 DCHECK(!non_move_watchers_.HasObserver(watcher));
32 DCHECK(!non_move_watchers_.HasObserver(watcher)); 33 DCHECK(!move_watchers_.HasObserver(watcher));
34 DCHECK(!drag_watchers_.HasObserver(watcher));
35 if (events == views::PointerWatcherEventTypes::DRAGS)
36 drag_watchers_.AddObserver(watcher);
37 else if (events == views::PointerWatcherEventTypes::MOVES)
33 move_watchers_.AddObserver(watcher); 38 move_watchers_.AddObserver(watcher);
34 } else { 39 else
35 DCHECK(!move_watchers_.HasObserver(watcher));
36 non_move_watchers_.AddObserver(watcher); 40 non_move_watchers_.AddObserver(watcher);
37 }
38 } 41 }
39 42
40 void PointerWatcherAdapter::RemovePointerWatcher( 43 void PointerWatcherAdapter::RemovePointerWatcher(
41 views::PointerWatcher* watcher) { 44 views::PointerWatcher* watcher) {
42 non_move_watchers_.RemoveObserver(watcher); 45 non_move_watchers_.RemoveObserver(watcher);
43 move_watchers_.RemoveObserver(watcher); 46 move_watchers_.RemoveObserver(watcher);
47 drag_watchers_.RemoveObserver(watcher);
44 } 48 }
45 49
46 void PointerWatcherAdapter::OnMouseEvent(ui::MouseEvent* event) { 50 void PointerWatcherAdapter::OnMouseEvent(ui::MouseEvent* event) {
47 // For compatibility with the mus version, don't send drags.
48 if (event->type() != ui::ET_MOUSE_PRESSED && 51 if (event->type() != ui::ET_MOUSE_PRESSED &&
49 event->type() != ui::ET_MOUSE_RELEASED && 52 event->type() != ui::ET_MOUSE_RELEASED &&
50 event->type() != ui::ET_MOUSE_MOVED && 53 event->type() != ui::ET_MOUSE_MOVED &&
51 event->type() != ui::ET_MOUSEWHEEL && 54 event->type() != ui::ET_MOUSEWHEEL &&
52 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED) 55 event->type() != ui::ET_MOUSE_CAPTURE_CHANGED &&
56 event->type() != ui::ET_MOUSE_DRAGGED)
53 return; 57 return;
54 58
55 DCHECK(ui::PointerEvent::CanConvertFrom(*event)); 59 DCHECK(ui::PointerEvent::CanConvertFrom(*event));
56 NotifyWatchers(ui::PointerEvent(*event), *event); 60 NotifyWatchers(ui::PointerEvent(*event), *event);
57 } 61 }
58 62
59 void PointerWatcherAdapter::OnTouchEvent(ui::TouchEvent* event) { 63 void PointerWatcherAdapter::OnTouchEvent(ui::TouchEvent* event) {
60 // For compatibility with the mus version, don't send drags.
61 if (event->type() != ui::ET_TOUCH_PRESSED && 64 if (event->type() != ui::ET_TOUCH_PRESSED &&
62 event->type() != ui::ET_TOUCH_RELEASED) 65 event->type() != ui::ET_TOUCH_RELEASED &&
66 event->type() != ui::ET_TOUCH_MOVED)
63 return; 67 return;
64 68
65 DCHECK(ui::PointerEvent::CanConvertFrom(*event)); 69 DCHECK(ui::PointerEvent::CanConvertFrom(*event));
66 NotifyWatchers(ui::PointerEvent(*event), *event); 70 NotifyWatchers(ui::PointerEvent(*event), *event);
67 } 71 }
68 72
69 gfx::Point PointerWatcherAdapter::GetLocationInScreen( 73 gfx::Point PointerWatcherAdapter::GetLocationInScreen(
70 const ui::LocatedEvent& event) const { 74 const ui::LocatedEvent& event) const {
71 gfx::Point location_in_screen; 75 gfx::Point location_in_screen;
72 if (event.type() == ui::ET_MOUSE_CAPTURE_CHANGED) { 76 if (event.type() == ui::ET_MOUSE_CAPTURE_CHANGED) {
(...skipping 12 matching lines...) Expand all
85 aura::Window* window = static_cast<aura::Window*>(event.target()); 89 aura::Window* window = static_cast<aura::Window*>(event.target());
86 return views::Widget::GetTopLevelWidgetForNativeView(window); 90 return views::Widget::GetTopLevelWidgetForNativeView(window);
87 } 91 }
88 92
89 void PointerWatcherAdapter::NotifyWatchers( 93 void PointerWatcherAdapter::NotifyWatchers(
90 const ui::PointerEvent& event, 94 const ui::PointerEvent& event,
91 const ui::LocatedEvent& original_event) { 95 const ui::LocatedEvent& original_event) {
92 const gfx::Point screen_location(GetLocationInScreen(original_event)); 96 const gfx::Point screen_location(GetLocationInScreen(original_event));
93 views::Widget* target_widget = GetTargetWidget(original_event); 97 views::Widget* target_widget = GetTargetWidget(original_event);
94 FOR_EACH_OBSERVER( 98 FOR_EACH_OBSERVER(
95 views::PointerWatcher, move_watchers_, 99 views::PointerWatcher, drag_watchers_,
96 OnPointerEventObserved(event, screen_location, target_widget)); 100 OnPointerEventObserved(event, screen_location, target_widget));
101 if (original_event.type() != ui::ET_TOUCH_MOVED &&
102 original_event.type() != ui::ET_MOUSE_DRAGGED) {
103 FOR_EACH_OBSERVER(
104 views::PointerWatcher, move_watchers_,
105 OnPointerEventObserved(event, screen_location, target_widget));
106 }
97 if (event.type() != ui::ET_POINTER_MOVED) { 107 if (event.type() != ui::ET_POINTER_MOVED) {
98 FOR_EACH_OBSERVER( 108 FOR_EACH_OBSERVER(
99 views::PointerWatcher, non_move_watchers_, 109 views::PointerWatcher, non_move_watchers_,
100 OnPointerEventObserved(event, screen_location, target_widget)); 110 OnPointerEventObserved(event, screen_location, target_widget));
101 } 111 }
102 } 112 }
103 113
104 } // namespace ash 114 } // namespace ash
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698