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

Side by Side Diff: content/renderer/input/input_handler_proxy.cc

Issue 304793003: use enum to specify deviceSource for fling animation. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebased for parallel breaking changes Created 6 years, 6 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 | Annotate | Revision Log
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "content/renderer/input/input_handler_proxy.h" 5 #include "content/renderer/input/input_handler_proxy.h"
6 6
7 #include "base/auto_reset.h" 7 #include "base/auto_reset.h"
8 #include "base/debug/trace_event.h" 8 #include "base/debug/trace_event.h"
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "base/metrics/histogram.h" 10 #include "base/metrics/histogram.h"
(...skipping 341 matching lines...) Expand 10 before | Expand all | Expand 10 after
352 } 352 }
353 353
354 return DID_NOT_HANDLE; 354 return DID_NOT_HANDLE;
355 } 355 }
356 356
357 InputHandlerProxy::EventDisposition 357 InputHandlerProxy::EventDisposition
358 InputHandlerProxy::HandleGestureFling( 358 InputHandlerProxy::HandleGestureFling(
359 const WebGestureEvent& gesture_event) { 359 const WebGestureEvent& gesture_event) {
360 cc::InputHandler::ScrollStatus scroll_status; 360 cc::InputHandler::ScrollStatus scroll_status;
361 361
362 if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) { 362 if (gesture_event.sourceDevice == blink::WebGestureDeviceTouchpad) {
363 scroll_status = input_handler_->ScrollBegin( 363 scroll_status = input_handler_->ScrollBegin(
364 gfx::Point(gesture_event.x, gesture_event.y), 364 gfx::Point(gesture_event.x, gesture_event.y),
365 cc::InputHandler::NonBubblingGesture); 365 cc::InputHandler::NonBubblingGesture);
366 } else { 366 } else {
367 if (!gesture_scroll_on_impl_thread_) 367 if (!gesture_scroll_on_impl_thread_)
368 scroll_status = cc::InputHandler::ScrollOnMainThread; 368 scroll_status = cc::InputHandler::ScrollOnMainThread;
369 else 369 else
370 scroll_status = input_handler_->FlingScrollBegin(); 370 scroll_status = input_handler_->FlingScrollBegin();
371 } 371 }
372 372
373 #ifndef NDEBUG 373 #ifndef NDEBUG
374 expect_scroll_update_end_ = false; 374 expect_scroll_update_end_ = false;
375 #endif 375 #endif
376 376
377 switch (scroll_status) { 377 switch (scroll_status) {
378 case cc::InputHandler::ScrollStarted: { 378 case cc::InputHandler::ScrollStarted: {
379 if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) 379 if (gesture_event.sourceDevice == blink::WebGestureDeviceTouchpad)
380 input_handler_->ScrollEnd(); 380 input_handler_->ScrollEnd();
381 381
382 const float vx = gesture_event.data.flingStart.velocityX; 382 const float vx = gesture_event.data.flingStart.velocityX;
383 const float vy = gesture_event.data.flingStart.velocityY; 383 const float vy = gesture_event.data.flingStart.velocityY;
384 current_fling_velocity_ = gfx::Vector2dF(vx, vy); 384 current_fling_velocity_ = gfx::Vector2dF(vx, vy);
385 // TODO(rjkroege): Remove cast after landing 3rd patch for
386 // http://crbug.com/343327
385 fling_curve_.reset(client_->CreateFlingAnimationCurve( 387 fling_curve_.reset(client_->CreateFlingAnimationCurve(
386 gesture_event.sourceDevice, WebFloatPoint(vx, vy), blink::WebSize())); 388 (blink::WebGestureDevice)gesture_event.sourceDevice,
389 WebFloatPoint(vx, vy),
390 blink::WebSize()));
387 disallow_horizontal_fling_scroll_ = !vx; 391 disallow_horizontal_fling_scroll_ = !vx;
388 disallow_vertical_fling_scroll_ = !vy; 392 disallow_vertical_fling_scroll_ = !vy;
389 TRACE_EVENT_ASYNC_BEGIN2("input", 393 TRACE_EVENT_ASYNC_BEGIN2("input",
390 "InputHandlerProxy::HandleGestureFling::started", 394 "InputHandlerProxy::HandleGestureFling::started",
391 this, 395 this,
392 "vx", 396 "vx",
393 vx, 397 vx,
394 "vy", 398 "vy",
395 vy); 399 vy);
396 // Note that the timestamp will only be used to kickstart the animation if 400 // Note that the timestamp will only be used to kickstart the animation if
(...skipping 16 matching lines...) Expand all
413 "scroll_on_main_thread", 417 "scroll_on_main_thread",
414 TRACE_EVENT_SCOPE_THREAD); 418 TRACE_EVENT_SCOPE_THREAD);
415 fling_may_be_active_on_main_thread_ = true; 419 fling_may_be_active_on_main_thread_ = true;
416 return DID_NOT_HANDLE; 420 return DID_NOT_HANDLE;
417 } 421 }
418 case cc::InputHandler::ScrollIgnored: { 422 case cc::InputHandler::ScrollIgnored: {
419 TRACE_EVENT_INSTANT0( 423 TRACE_EVENT_INSTANT0(
420 "input", 424 "input",
421 "InputHandlerProxy::HandleGestureFling::ignored", 425 "InputHandlerProxy::HandleGestureFling::ignored",
422 TRACE_EVENT_SCOPE_THREAD); 426 TRACE_EVENT_SCOPE_THREAD);
423 if (gesture_event.sourceDevice == WebGestureEvent::Touchpad) { 427 if (gesture_event.sourceDevice == blink::WebGestureDeviceTouchpad) {
424 // We still pass the curve to the main thread if there's nothing 428 // We still pass the curve to the main thread if there's nothing
425 // scrollable, in case something 429 // scrollable, in case something
426 // registers a handler before the curve is over. 430 // registers a handler before the curve is over.
427 return DID_NOT_HANDLE; 431 return DID_NOT_HANDLE;
428 } 432 }
429 return DROP_EVENT; 433 return DROP_EVENT;
430 } 434 }
431 case cc::InputHandler::ScrollStatusCount: 435 case cc::InputHandler::ScrollStatusCount:
432 NOTREACHED(); 436 NOTREACHED();
433 break; 437 break;
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
471 } 475 }
472 476
473 switch (gesture_event.type) { 477 switch (gesture_event.type) {
474 case WebInputEvent::GestureTapCancel: 478 case WebInputEvent::GestureTapCancel:
475 case WebInputEvent::GestureTapDown: 479 case WebInputEvent::GestureTapDown:
476 return false; 480 return false;
477 481
478 case WebInputEvent::GestureScrollBegin: 482 case WebInputEvent::GestureScrollBegin:
479 if (!input_handler_->IsCurrentlyScrollingLayerAt( 483 if (!input_handler_->IsCurrentlyScrollingLayerAt(
480 gfx::Point(gesture_event.x, gesture_event.y), 484 gfx::Point(gesture_event.x, gesture_event.y),
481 fling_parameters_.sourceDevice == WebGestureEvent::Touchpad 485 fling_parameters_.sourceDevice == blink::WebGestureDeviceTouchpad
482 ? cc::InputHandler::NonBubblingGesture 486 ? cc::InputHandler::NonBubblingGesture
483 : cc::InputHandler::Gesture)) { 487 : cc::InputHandler::Gesture)) {
484 CancelCurrentFling(true); 488 CancelCurrentFling(true);
485 return false; 489 return false;
486 } 490 }
487 491
488 // TODO(jdduke): Use |gesture_event.data.scrollBegin.delta{X,Y}Hint| to 492 // TODO(jdduke): Use |gesture_event.data.scrollBegin.delta{X,Y}Hint| to
489 // determine if the ScrollBegin should immediately cancel the fling. 493 // determine if the ScrollBegin should immediately cancel the fling.
490 FlingBoostExtend(gesture_event); 494 FlingBoostExtend(gesture_event);
491 return true; 495 return true;
(...skipping 29 matching lines...) Expand all
521 525
522 if (fling_boosted) 526 if (fling_boosted)
523 current_fling_velocity_ += new_fling_velocity; 527 current_fling_velocity_ += new_fling_velocity;
524 else 528 else
525 current_fling_velocity_ = new_fling_velocity; 529 current_fling_velocity_ = new_fling_velocity;
526 530
527 WebFloatPoint velocity(current_fling_velocity_.x(), 531 WebFloatPoint velocity(current_fling_velocity_.x(),
528 current_fling_velocity_.y()); 532 current_fling_velocity_.y());
529 deferred_fling_cancel_time_seconds_ = 0; 533 deferred_fling_cancel_time_seconds_ = 0;
530 last_fling_boost_event_ = WebGestureEvent(); 534 last_fling_boost_event_ = WebGestureEvent();
535 // TODO(rjkroege): Remove cast after 3rd patch of http://crbug.com/343327
531 fling_curve_.reset(client_->CreateFlingAnimationCurve( 536 fling_curve_.reset(client_->CreateFlingAnimationCurve(
532 gesture_event.sourceDevice, velocity, blink::WebSize())); 537 (blink::WebGestureDevice)gesture_event.sourceDevice,
538 velocity,
539 blink::WebSize()));
533 fling_parameters_.startTime = gesture_event.timeStampSeconds; 540 fling_parameters_.startTime = gesture_event.timeStampSeconds;
534 fling_parameters_.delta = velocity; 541 fling_parameters_.delta = velocity;
535 fling_parameters_.point = WebPoint(gesture_event.x, gesture_event.y); 542 fling_parameters_.point = WebPoint(gesture_event.x, gesture_event.y);
536 fling_parameters_.globalPoint = 543 fling_parameters_.globalPoint =
537 WebPoint(gesture_event.globalX, gesture_event.globalY); 544 WebPoint(gesture_event.globalX, gesture_event.globalY);
538 545
539 TRACE_EVENT_INSTANT2("input", 546 TRACE_EVENT_INSTANT2("input",
540 fling_boosted ? "InputHandlerProxy::FlingBoosted" 547 fling_boosted ? "InputHandlerProxy::FlingBoosted"
541 : "InputHandlerProxy::FlingReplaced", 548 : "InputHandlerProxy::FlingReplaced",
542 TRACE_EVENT_SCOPE_THREAD, 549 TRACE_EVENT_SCOPE_THREAD,
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
661 kFlingOverscrollThreshold; 668 kFlingOverscrollThreshold;
662 } 669 }
663 670
664 client_->DidOverscroll(params); 671 client_->DidOverscroll(params);
665 } 672 }
666 673
667 bool InputHandlerProxy::CancelCurrentFling( 674 bool InputHandlerProxy::CancelCurrentFling(
668 bool send_fling_stopped_notification) { 675 bool send_fling_stopped_notification) {
669 bool had_fling_animation = fling_curve_; 676 bool had_fling_animation = fling_curve_;
670 if (had_fling_animation && 677 if (had_fling_animation &&
671 fling_parameters_.sourceDevice == WebGestureEvent::Touchscreen) { 678 fling_parameters_.sourceDevice == blink::WebGestureDeviceTouchscreen) {
672 input_handler_->ScrollEnd(); 679 input_handler_->ScrollEnd();
673 TRACE_EVENT_ASYNC_END0( 680 TRACE_EVENT_ASYNC_END0(
674 "input", 681 "input",
675 "InputHandlerProxy::HandleGestureFling::started", 682 "InputHandlerProxy::HandleGestureFling::started",
676 this); 683 this);
677 } 684 }
678 685
679 TRACE_EVENT_INSTANT1("input", 686 TRACE_EVENT_INSTANT1("input",
680 "InputHandlerProxy::CancelCurrentFling", 687 "InputHandlerProxy::CancelCurrentFling",
681 TRACE_EVENT_SCOPE_THREAD, 688 TRACE_EVENT_SCOPE_THREAD,
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
755 TRACE_EVENT2("input", 762 TRACE_EVENT2("input",
756 "InputHandlerProxy::scrollBy", 763 "InputHandlerProxy::scrollBy",
757 "x", 764 "x",
758 clipped_increment.width, 765 clipped_increment.width,
759 "y", 766 "y",
760 clipped_increment.height); 767 clipped_increment.height);
761 768
762 bool did_scroll = false; 769 bool did_scroll = false;
763 770
764 switch (fling_parameters_.sourceDevice) { 771 switch (fling_parameters_.sourceDevice) {
765 case WebGestureEvent::Touchpad: 772 case blink::WebGestureDeviceTouchpad:
766 did_scroll = TouchpadFlingScroll(clipped_increment); 773 did_scroll = TouchpadFlingScroll(clipped_increment);
767 break; 774 break;
768 case WebGestureEvent::Touchscreen: 775 case blink::WebGestureDeviceTouchscreen:
769 clipped_increment = ToClientScrollIncrement(clipped_increment); 776 clipped_increment = ToClientScrollIncrement(clipped_increment);
770 did_scroll = input_handler_->ScrollBy(fling_parameters_.point, 777 did_scroll = input_handler_->ScrollBy(fling_parameters_.point,
771 clipped_increment); 778 clipped_increment);
772 break; 779 break;
773 } 780 }
774 781
775 if (did_scroll) { 782 if (did_scroll) {
776 fling_parameters_.cumulativeScroll.width += clipped_increment.width; 783 fling_parameters_.cumulativeScroll.width += clipped_increment.width;
777 fling_parameters_.cumulativeScroll.height += clipped_increment.height; 784 fling_parameters_.cumulativeScroll.height += clipped_increment.height;
778 } 785 }
779 786
780 // It's possible the provided |increment| is sufficiently small as to not 787 // It's possible the provided |increment| is sufficiently small as to not
781 // trigger a scroll, e.g., with a trivial time delta between fling updates. 788 // trigger a scroll, e.g., with a trivial time delta between fling updates.
782 // Return true in this case to prevent early fling termination. 789 // Return true in this case to prevent early fling termination.
783 if (std::abs(clipped_increment.width) < kScrollEpsilon && 790 if (std::abs(clipped_increment.width) < kScrollEpsilon &&
784 std::abs(clipped_increment.height) < kScrollEpsilon) 791 std::abs(clipped_increment.height) < kScrollEpsilon)
785 return true; 792 return true;
786 793
787 return did_scroll; 794 return did_scroll;
788 } 795 }
789 796
790 } // namespace content 797 } // namespace content
OLDNEW
« no previous file with comments | « content/common/input/synthetic_web_input_event_builders.cc ('k') | content/renderer/input/input_handler_proxy_client.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698