OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 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 "base/basictypes.h" | 5 #include "base/basictypes.h" |
6 #include "base/memory/scoped_ptr.h" | 6 #include "base/memory/scoped_ptr.h" |
7 #include "base/message_loop.h" | 7 #include "base/message_loop.h" |
8 #include "base/utf_string_conversions.h" | 8 #include "base/utf_string_conversions.h" |
9 #include "testing/gtest/include/gtest/gtest.h" | 9 #include "testing/gtest/include/gtest/gtest.h" |
10 #include "ui/gfx/native_widget_types.h" | 10 #include "ui/gfx/native_widget_types.h" |
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
129 virtual ~EventCountView() {} | 129 virtual ~EventCountView() {} |
130 | 130 |
131 int GetEventCount(ui::EventType type) { | 131 int GetEventCount(ui::EventType type) { |
132 return event_count_[type]; | 132 return event_count_[type]; |
133 } | 133 } |
134 | 134 |
135 void ResetCounts() { | 135 void ResetCounts() { |
136 event_count_.clear(); | 136 event_count_.clear(); |
137 } | 137 } |
138 | 138 |
139 private: | 139 protected: |
140 void RecordEvent(const ui::Event& event) { | |
141 ++event_count_[event.type()]; | |
142 } | |
143 | |
144 // Overridden from View: | 140 // Overridden from View: |
145 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { | 141 virtual bool OnMousePressed(const ui::MouseEvent& event) OVERRIDE { |
146 RecordEvent(event); | 142 RecordEvent(event); |
147 return false; | 143 return false; |
148 } | 144 } |
149 virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE { | 145 virtual bool OnMouseDragged(const ui::MouseEvent& event) OVERRIDE { |
150 RecordEvent(event); | 146 RecordEvent(event); |
151 return false; | 147 return false; |
152 } | 148 } |
153 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE { | 149 virtual void OnMouseReleased(const ui::MouseEvent& event) OVERRIDE { |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
185 virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE { | 181 virtual void OnScrollEvent(ui::ScrollEvent* event) OVERRIDE { |
186 RecordEvent(*event); | 182 RecordEvent(*event); |
187 } | 183 } |
188 virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE { | 184 virtual void OnTouchEvent(ui::TouchEvent* event) OVERRIDE { |
189 RecordEvent(*event); | 185 RecordEvent(*event); |
190 } | 186 } |
191 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { | 187 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { |
192 RecordEvent(*event); | 188 RecordEvent(*event); |
193 } | 189 } |
194 | 190 |
| 191 private: |
| 192 void RecordEvent(const ui::Event& event) { |
| 193 ++event_count_[event.type()]; |
| 194 } |
| 195 |
195 std::map<ui::EventType, int> event_count_; | 196 std::map<ui::EventType, int> event_count_; |
196 | 197 |
197 DISALLOW_COPY_AND_ASSIGN(EventCountView); | 198 DISALLOW_COPY_AND_ASSIGN(EventCountView); |
198 }; | 199 }; |
199 | 200 |
| 201 // A view that keeps track of the events it receives, and consumes all scroll |
| 202 // gesture events. |
| 203 class ScrollableEventCountView : public EventCountView { |
| 204 public: |
| 205 ScrollableEventCountView() {} |
| 206 virtual ~ScrollableEventCountView() {} |
| 207 |
| 208 private: |
| 209 // Overridden from ui::EventHandler: |
| 210 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { |
| 211 EventCountView::OnGestureEvent(event); |
| 212 switch (event->type()) { |
| 213 case ui::ET_GESTURE_SCROLL_BEGIN: |
| 214 case ui::ET_GESTURE_SCROLL_UPDATE: |
| 215 case ui::ET_GESTURE_SCROLL_END: |
| 216 case ui::ET_SCROLL_FLING_START: |
| 217 event->SetHandled(); |
| 218 break; |
| 219 default: |
| 220 break; |
| 221 } |
| 222 } |
| 223 |
| 224 DISALLOW_COPY_AND_ASSIGN(ScrollableEventCountView); |
| 225 }; |
| 226 |
200 // A view that does a capture on gesture-begin events. | 227 // A view that does a capture on gesture-begin events. |
201 class GestureCaptureView : public View { | 228 class GestureCaptureView : public View { |
202 public: | 229 public: |
203 GestureCaptureView() {} | 230 GestureCaptureView() {} |
204 virtual ~GestureCaptureView() {} | 231 virtual ~GestureCaptureView() {} |
205 | 232 |
206 private: | 233 private: |
207 // Overridden from View: | 234 // Overridden from View: |
208 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { | 235 virtual void OnGestureEvent(ui::GestureEvent* event) OVERRIDE { |
209 if (event->type() == ui::ET_GESTURE_BEGIN) { | 236 if (event->type() == ui::ET_GESTURE_BEGIN) { |
(...skipping 1065 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 focused_view->ResetCounts(); | 1302 focused_view->ResetCounts(); |
1276 cursor_view->ResetCounts(); | 1303 cursor_view->ResetCounts(); |
1277 | 1304 |
1278 ui::ScrollEvent scroll2(ui::ET_SCROLL, gfx::Point(5, 5), 0, 0, 20); | 1305 ui::ScrollEvent scroll2(ui::ET_SCROLL, gfx::Point(5, 5), 0, 0, 20); |
1279 widget->OnScrollEvent(&scroll2); | 1306 widget->OnScrollEvent(&scroll2); |
1280 EXPECT_EQ(1, focused_view->GetEventCount(ui::ET_SCROLL)); | 1307 EXPECT_EQ(1, focused_view->GetEventCount(ui::ET_SCROLL)); |
1281 EXPECT_EQ(1, focused_view->GetEventCount(ui::ET_MOUSEWHEEL)); | 1308 EXPECT_EQ(1, focused_view->GetEventCount(ui::ET_MOUSEWHEEL)); |
1282 | 1309 |
1283 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_SCROLL)); | 1310 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_SCROLL)); |
1284 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_MOUSEWHEEL)); | 1311 EXPECT_EQ(0, cursor_view->GetEventCount(ui::ET_MOUSEWHEEL)); |
| 1312 |
| 1313 widget->CloseNow(); |
1285 } | 1314 } |
1286 | 1315 |
1287 #endif // defined(USE_AURA) | 1316 #endif // defined(USE_AURA) |
1288 | 1317 |
| 1318 // Tests that if a scroll-begin gesture is not handled, then subsequent scroll |
| 1319 // events are not dispatched to any view. |
| 1320 TEST_F(WidgetTest, GestureScrollEventDispatching) { |
| 1321 EventCountView* noscroll_view = new EventCountView; |
| 1322 EventCountView* scroll_view = new ScrollableEventCountView; |
| 1323 |
| 1324 noscroll_view->SetBounds(0, 0, 50, 40); |
| 1325 scroll_view->SetBounds(60, 0, 40, 40); |
| 1326 |
| 1327 Widget* widget = CreateTopLevelPlatformWidget(); |
| 1328 widget->GetRootView()->AddChildView(noscroll_view); |
| 1329 widget->GetRootView()->AddChildView(scroll_view); |
| 1330 |
| 1331 { |
| 1332 ui::GestureEvent begin(ui::ET_GESTURE_SCROLL_BEGIN, |
| 1333 5, 5, 0, base::TimeDelta(), |
| 1334 ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN, 0, 0), |
| 1335 1); |
| 1336 widget->OnGestureEvent(&begin); |
| 1337 ui::GestureEvent update(ui::ET_GESTURE_SCROLL_UPDATE, |
| 1338 25, 15, 0, base::TimeDelta(), |
| 1339 ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_UPDATE, 20, 10), |
| 1340 1); |
| 1341 widget->OnGestureEvent(&update); |
| 1342 ui::GestureEvent end(ui::ET_GESTURE_SCROLL_END, |
| 1343 25, 15, 0, base::TimeDelta(), |
| 1344 ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0), |
| 1345 1); |
| 1346 widget->OnGestureEvent(&end); |
| 1347 |
| 1348 EXPECT_EQ(1, noscroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_BEGIN)); |
| 1349 EXPECT_EQ(0, noscroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_UPDATE)); |
| 1350 EXPECT_EQ(0, noscroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_END)); |
| 1351 } |
| 1352 |
| 1353 { |
| 1354 ui::GestureEvent begin(ui::ET_GESTURE_SCROLL_BEGIN, |
| 1355 65, 5, 0, base::TimeDelta(), |
| 1356 ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_BEGIN, 0, 0), |
| 1357 1); |
| 1358 widget->OnGestureEvent(&begin); |
| 1359 ui::GestureEvent update(ui::ET_GESTURE_SCROLL_UPDATE, |
| 1360 85, 15, 0, base::TimeDelta(), |
| 1361 ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_UPDATE, 20, 10), |
| 1362 1); |
| 1363 widget->OnGestureEvent(&update); |
| 1364 ui::GestureEvent end(ui::ET_GESTURE_SCROLL_END, |
| 1365 85, 15, 0, base::TimeDelta(), |
| 1366 ui::GestureEventDetails(ui::ET_GESTURE_SCROLL_END, 0, 0), |
| 1367 1); |
| 1368 widget->OnGestureEvent(&end); |
| 1369 |
| 1370 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_BEGIN)); |
| 1371 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_UPDATE)); |
| 1372 EXPECT_EQ(1, scroll_view->GetEventCount(ui::ET_GESTURE_SCROLL_END)); |
| 1373 } |
| 1374 |
| 1375 widget->CloseNow(); |
| 1376 } |
| 1377 |
1289 } // namespace | 1378 } // namespace |
1290 } // namespace views | 1379 } // namespace views |
OLD | NEW |