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

Side by Side Diff: ui/events/gesture_detection/gesture_provider.cc

Issue 567783002: Add modifier flags to MotionEvent (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove MotionEvent modifiers Created 6 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 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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 "ui/events/gesture_detection/gesture_provider.h" 5 #include "ui/events/gesture_detection/gesture_provider.h"
6 6
7 #include <cmath> 7 #include <cmath>
8 8
9 #include "base/auto_reset.h" 9 #include "base/auto_reset.h"
10 #include "base/debug/trace_event.h" 10 #include "base/debug/trace_event.h"
(...skipping 203 matching lines...) Expand 10 before | Expand all | Expand 10 after
214 if (!pinch_event_sent_) { 214 if (!pinch_event_sent_) {
215 Send(CreateGesture(ET_GESTURE_PINCH_BEGIN, 215 Send(CreateGesture(ET_GESTURE_PINCH_BEGIN,
216 e.GetId(), 216 e.GetId(),
217 e.GetToolType(), 217 e.GetToolType(),
218 detector.GetEventTime(), 218 detector.GetEventTime(),
219 detector.GetFocusX(), 219 detector.GetFocusX(),
220 detector.GetFocusY(), 220 detector.GetFocusY(),
221 detector.GetFocusX() + e.GetRawOffsetX(), 221 detector.GetFocusX() + e.GetRawOffsetX(),
222 detector.GetFocusY() + e.GetRawOffsetY(), 222 detector.GetFocusY() + e.GetRawOffsetY(),
223 e.GetPointerCount(), 223 e.GetPointerCount(),
224 GetBoundingBox(e, ET_GESTURE_PINCH_BEGIN))); 224 GetBoundingBox(e, ET_GESTURE_PINCH_BEGIN),
225 e.GetFlags()));
225 } 226 }
226 227
227 if (std::abs(detector.GetCurrentSpan() - detector.GetPreviousSpan()) < 228 if (std::abs(detector.GetCurrentSpan() - detector.GetPreviousSpan()) <
228 config_.scale_gesture_detector_config.min_pinch_update_span_delta) { 229 config_.scale_gesture_detector_config.min_pinch_update_span_delta) {
229 return false; 230 return false;
230 } 231 }
231 232
232 float scale = detector.GetScaleFactor(); 233 float scale = detector.GetScaleFactor();
233 if (scale == 1) 234 if (scale == 1)
234 return true; 235 return true;
(...skipping 13 matching lines...) Expand all
248 GestureEventDetails pinch_details(ET_GESTURE_PINCH_UPDATE, scale, 0); 249 GestureEventDetails pinch_details(ET_GESTURE_PINCH_UPDATE, scale, 0);
249 Send(CreateGesture(pinch_details, 250 Send(CreateGesture(pinch_details,
250 e.GetId(), 251 e.GetId(),
251 e.GetToolType(), 252 e.GetToolType(),
252 detector.GetEventTime(), 253 detector.GetEventTime(),
253 detector.GetFocusX(), 254 detector.GetFocusX(),
254 detector.GetFocusY(), 255 detector.GetFocusY(),
255 detector.GetFocusX() + e.GetRawOffsetX(), 256 detector.GetFocusX() + e.GetRawOffsetX(),
256 detector.GetFocusY() + e.GetRawOffsetY(), 257 detector.GetFocusY() + e.GetRawOffsetY(),
257 e.GetPointerCount(), 258 e.GetPointerCount(),
258 GetBoundingBox(e, pinch_details.type()))); 259 GetBoundingBox(e, pinch_details.type()),
260 e.GetFlags()));
259 return true; 261 return true;
260 } 262 }
261 263
262 // GestureDetector::GestureListener implementation. 264 // GestureDetector::GestureListener implementation.
263 virtual bool OnDown(const MotionEvent& e) OVERRIDE { 265 virtual bool OnDown(const MotionEvent& e) OVERRIDE {
264 GestureEventDetails tap_details(ET_GESTURE_TAP_DOWN, 0, 0); 266 GestureEventDetails tap_details(ET_GESTURE_TAP_DOWN, 0, 0);
265 Send(CreateGesture(tap_details, e)); 267 Send(CreateGesture(tap_details, e));
266 268
267 // Return true to indicate that we want to handle touch. 269 // Return true to indicate that we want to handle touch.
268 return true; 270 return true;
(...skipping 29 matching lines...) Expand all
298 // used to determine which layer the scroll should affect. 300 // used to determine which layer the scroll should affect.
299 Send(CreateGesture(scroll_details, 301 Send(CreateGesture(scroll_details,
300 e2.GetId(), 302 e2.GetId(),
301 e2.GetToolType(), 303 e2.GetToolType(),
302 e2.GetEventTime(), 304 e2.GetEventTime(),
303 e1.GetX(), 305 e1.GetX(),
304 e1.GetY(), 306 e1.GetY(),
305 e1.GetRawX(), 307 e1.GetRawX(),
306 e1.GetRawY(), 308 e1.GetRawY(),
307 e2.GetPointerCount(), 309 e2.GetPointerCount(),
308 GetBoundingBox(e2, scroll_details.type()))); 310 GetBoundingBox(e2, scroll_details.type()),
311 e2.GetFlags()));
309 DCHECK(scroll_event_sent_); 312 DCHECK(scroll_event_sent_);
310 } 313 }
311 314
312 snap_scroll_controller_.UpdateSnapScrollMode(distance_x, distance_y); 315 snap_scroll_controller_.UpdateSnapScrollMode(distance_x, distance_y);
313 if (snap_scroll_controller_.IsSnappingScrolls()) { 316 if (snap_scroll_controller_.IsSnappingScrolls()) {
314 if (snap_scroll_controller_.IsSnapHorizontal()) 317 if (snap_scroll_controller_.IsSnapHorizontal())
315 distance_y = 0; 318 distance_y = 0;
316 else 319 else
317 distance_x = 0; 320 distance_x = 0;
318 } 321 }
319 322
320 if (distance_x || distance_y) { 323 if (distance_x || distance_y) {
321 GestureEventDetails scroll_details( 324 GestureEventDetails scroll_details(
322 ET_GESTURE_SCROLL_UPDATE, -distance_x, -distance_y); 325 ET_GESTURE_SCROLL_UPDATE, -distance_x, -distance_y);
323 const gfx::RectF bounding_box = GetBoundingBox(e2, scroll_details.type()); 326 const gfx::RectF bounding_box = GetBoundingBox(e2, scroll_details.type());
324 const gfx::PointF center = bounding_box.CenterPoint(); 327 const gfx::PointF center = bounding_box.CenterPoint();
325 const gfx::PointF raw_center = 328 const gfx::PointF raw_center =
326 center + gfx::Vector2dF(e2.GetRawOffsetX(), e2.GetRawOffsetY()); 329 center + gfx::Vector2dF(e2.GetRawOffsetX(), e2.GetRawOffsetY());
327 Send(CreateGesture(scroll_details, 330 Send(CreateGesture(scroll_details,
328 e2.GetId(), 331 e2.GetId(),
329 e2.GetToolType(), 332 e2.GetToolType(),
330 e2.GetEventTime(), 333 e2.GetEventTime(),
331 center.x(), 334 center.x(),
332 center.y(), 335 center.y(),
333 raw_center.x(), 336 raw_center.x(),
334 raw_center.y(), 337 raw_center.y(),
335 e2.GetPointerCount(), 338 e2.GetPointerCount(),
336 bounding_box)); 339 bounding_box,
340 e2.GetFlags()));
337 } 341 }
338 342
339 return true; 343 return true;
340 } 344 }
341 345
342 virtual bool OnFling(const MotionEvent& e1, 346 virtual bool OnFling(const MotionEvent& e1,
343 const MotionEvent& e2, 347 const MotionEvent& e2,
344 float velocity_x, 348 float velocity_x,
345 float velocity_y) OVERRIDE { 349 float velocity_y) OVERRIDE {
346 if (snap_scroll_controller_.IsSnappingScrolls()) { 350 if (snap_scroll_controller_.IsSnappingScrolls()) {
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 ET_GESTURE_TWO_FINGER_TAP, e1.GetTouchMajor(), e1.GetTouchMajor()); 390 ET_GESTURE_TWO_FINGER_TAP, e1.GetTouchMajor(), e1.GetTouchMajor());
387 Send(CreateGesture(two_finger_tap_details, 391 Send(CreateGesture(two_finger_tap_details,
388 e2.GetId(), 392 e2.GetId(),
389 e2.GetToolType(), 393 e2.GetToolType(),
390 e2.GetEventTime(), 394 e2.GetEventTime(),
391 e1.GetX(), 395 e1.GetX(),
392 e1.GetY(), 396 e1.GetY(),
393 e1.GetRawX(), 397 e1.GetRawX(),
394 e1.GetRawY(), 398 e1.GetRawY(),
395 e2.GetPointerCount(), 399 e2.GetPointerCount(),
396 GetBoundingBox(e2, two_finger_tap_details.type()))); 400 GetBoundingBox(e2, two_finger_tap_details.type()),
401 e2.GetFlags()));
397 return true; 402 return true;
398 } 403 }
399 404
400 virtual void OnShowPress(const MotionEvent& e) OVERRIDE { 405 virtual void OnShowPress(const MotionEvent& e) OVERRIDE {
401 GestureEventDetails show_press_details(ET_GESTURE_SHOW_PRESS, 0, 0); 406 GestureEventDetails show_press_details(ET_GESTURE_SHOW_PRESS, 0, 0);
402 show_press_event_sent_ = true; 407 show_press_event_sent_ = true;
403 Send(CreateGesture(show_press_details, e)); 408 Send(CreateGesture(show_press_details, e));
404 } 409 }
405 410
406 virtual bool OnSingleTapUp(const MotionEvent& e) OVERRIDE { 411 virtual bool OnSingleTapUp(const MotionEvent& e) OVERRIDE {
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after
483 488
484 GestureEventData CreateGesture(const GestureEventDetails& details, 489 GestureEventData CreateGesture(const GestureEventDetails& details,
485 int motion_event_id, 490 int motion_event_id,
486 MotionEvent::ToolType primary_tool_type, 491 MotionEvent::ToolType primary_tool_type,
487 base::TimeTicks time, 492 base::TimeTicks time,
488 float x, 493 float x,
489 float y, 494 float y,
490 float raw_x, 495 float raw_x,
491 float raw_y, 496 float raw_y,
492 size_t touch_point_count, 497 size_t touch_point_count,
493 const gfx::RectF& bounding_box) { 498 const gfx::RectF& bounding_box,
499 int flags) {
494 return GestureEventData(details, 500 return GestureEventData(details,
495 motion_event_id, 501 motion_event_id,
496 primary_tool_type, 502 primary_tool_type,
497 time, 503 time,
498 x, 504 x,
499 y, 505 y,
500 raw_x, 506 raw_x,
501 raw_y, 507 raw_y,
502 touch_point_count, 508 touch_point_count,
503 bounding_box); 509 bounding_box,
510 flags);
504 } 511 }
505 512
506 GestureEventData CreateGesture(EventType type, 513 GestureEventData CreateGesture(EventType type,
507 int motion_event_id, 514 int motion_event_id,
508 MotionEvent::ToolType primary_tool_type, 515 MotionEvent::ToolType primary_tool_type,
509 base::TimeTicks time, 516 base::TimeTicks time,
510 float x, 517 float x,
511 float y, 518 float y,
512 float raw_x, 519 float raw_x,
513 float raw_y, 520 float raw_y,
514 size_t touch_point_count, 521 size_t touch_point_count,
515 const gfx::RectF& bounding_box) { 522 const gfx::RectF& bounding_box,
523 int flags) {
516 return GestureEventData(GestureEventDetails(type, 0, 0), 524 return GestureEventData(GestureEventDetails(type, 0, 0),
517 motion_event_id, 525 motion_event_id,
518 primary_tool_type, 526 primary_tool_type,
519 time, 527 time,
520 x, 528 x,
521 y, 529 y,
522 raw_x, 530 raw_x,
523 raw_y, 531 raw_y,
524 touch_point_count, 532 touch_point_count,
525 bounding_box); 533 bounding_box,
534 flags);
526 } 535 }
527 536
528 GestureEventData CreateGesture(const GestureEventDetails& details, 537 GestureEventData CreateGesture(const GestureEventDetails& details,
529 const MotionEvent& event) { 538 const MotionEvent& event) {
530 return GestureEventData(details, 539 return GestureEventData(details,
531 event.GetId(), 540 event.GetId(),
532 event.GetToolType(), 541 event.GetToolType(),
533 event.GetEventTime(), 542 event.GetEventTime(),
534 event.GetX(), 543 event.GetX(),
535 event.GetY(), 544 event.GetY(),
536 event.GetRawX(), 545 event.GetRawX(),
537 event.GetRawY(), 546 event.GetRawY(),
538 event.GetPointerCount(), 547 event.GetPointerCount(),
539 GetBoundingBox(event, details.type())); 548 GetBoundingBox(event, details.type()),
549 event.GetFlags());
540 } 550 }
541 551
542 GestureEventData CreateGesture(EventType type, const MotionEvent& event) { 552 GestureEventData CreateGesture(EventType type, const MotionEvent& event) {
543 return CreateGesture(GestureEventDetails(type, 0, 0), event); 553 return CreateGesture(GestureEventDetails(type, 0, 0), event);
544 } 554 }
545 555
546 GestureEventData CreateTapGesture(EventType type, const MotionEvent& event) { 556 GestureEventData CreateTapGesture(EventType type, const MotionEvent& event) {
547 // Set the tap count to 1 even for ET_GESTURE_DOUBLE_TAP, in order to be 557 // Set the tap count to 1 even for ET_GESTURE_DOUBLE_TAP, in order to be
548 // consistent with double tap behavior on a mobile viewport. See 558 // consistent with double tap behavior on a mobile viewport. See
549 // crbug.com/234986 for context. 559 // crbug.com/234986 for context.
(...skipping 199 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 gesture_listener_->Send(gesture_listener_->CreateGesture( 759 gesture_listener_->Send(gesture_listener_->CreateGesture(
750 ET_GESTURE_BEGIN, 760 ET_GESTURE_BEGIN,
751 event.GetId(), 761 event.GetId(),
752 event.GetToolType(), 762 event.GetToolType(),
753 event.GetEventTime(), 763 event.GetEventTime(),
754 event.GetX(action_index), 764 event.GetX(action_index),
755 event.GetY(action_index), 765 event.GetY(action_index),
756 event.GetRawX(action_index), 766 event.GetRawX(action_index),
757 event.GetRawY(action_index), 767 event.GetRawY(action_index),
758 event.GetPointerCount(), 768 event.GetPointerCount(),
759 gesture_listener_->GetBoundingBox(event, ET_GESTURE_BEGIN))); 769 gesture_listener_->GetBoundingBox(event, ET_GESTURE_BEGIN),
770 event.GetFlags()));
760 } 771 }
761 break; 772 break;
762 case MotionEvent::ACTION_POINTER_UP: 773 case MotionEvent::ACTION_POINTER_UP:
763 case MotionEvent::ACTION_UP: 774 case MotionEvent::ACTION_UP:
764 case MotionEvent::ACTION_CANCEL: 775 case MotionEvent::ACTION_CANCEL:
765 case MotionEvent::ACTION_MOVE: 776 case MotionEvent::ACTION_MOVE:
766 break; 777 break;
767 } 778 }
768 } 779 }
769 780
(...skipping 28 matching lines...) Expand all
798 // null'ing of the listener until the sequence has ended. 809 // null'ing of the listener until the sequence has ended.
799 if (current_down_event_) 810 if (current_down_event_)
800 return; 811 return;
801 812
802 const bool double_tap_enabled = 813 const bool double_tap_enabled =
803 double_tap_support_for_page_ && double_tap_support_for_platform_; 814 double_tap_support_for_page_ && double_tap_support_for_platform_;
804 gesture_listener_->SetDoubleTapEnabled(double_tap_enabled); 815 gesture_listener_->SetDoubleTapEnabled(double_tap_enabled);
805 } 816 }
806 817
807 } // namespace ui 818 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698