| 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 "content/browser/renderer_host/render_widget_host_view_base.h" | 5 #include "content/browser/renderer_host/render_widget_host_view_base.h" |
| 6 | 6 |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "content/browser/accessibility/browser_accessibility_manager.h" | 8 #include "content/browser/accessibility/browser_accessibility_manager.h" |
| 9 #include "content/browser/renderer_host/render_widget_host_impl.h" | 9 #include "content/browser/renderer_host/render_widget_host_impl.h" |
| 10 #include "content/port/browser/smooth_scroll_gesture.h" | 10 #include "content/port/browser/smooth_scroll_gesture.h" |
| (...skipping 24 matching lines...) Expand all Loading... |
| 35 #endif | 35 #endif |
| 36 | 36 |
| 37 namespace content { | 37 namespace content { |
| 38 | 38 |
| 39 // How long a smooth scroll gesture should run when it is a near scroll. | 39 // How long a smooth scroll gesture should run when it is a near scroll. |
| 40 static const int64 kDurationOfNearScrollGestureMs = 150; | 40 static const int64 kDurationOfNearScrollGestureMs = 150; |
| 41 | 41 |
| 42 // How long a smooth scroll gesture should run when it is a far scroll. | 42 // How long a smooth scroll gesture should run when it is a far scroll. |
| 43 static const int64 kDurationOfFarScrollGestureMs = 500; | 43 static const int64 kDurationOfFarScrollGestureMs = 500; |
| 44 | 44 |
| 45 static const int64 kWheelTicksPerSecond = 1500; |
| 46 |
| 45 // static | 47 // static |
| 46 RenderWidgetHostViewPort* RenderWidgetHostViewPort::FromRWHV( | 48 RenderWidgetHostViewPort* RenderWidgetHostViewPort::FromRWHV( |
| 47 RenderWidgetHostView* rwhv) { | 49 RenderWidgetHostView* rwhv) { |
| 48 return static_cast<RenderWidgetHostViewPort*>(rwhv); | 50 return static_cast<RenderWidgetHostViewPort*>(rwhv); |
| 49 } | 51 } |
| 50 | 52 |
| 51 // static | 53 // static |
| 52 RenderWidgetHostViewPort* RenderWidgetHostViewPort::CreateViewForWidget( | 54 RenderWidgetHostViewPort* RenderWidgetHostViewPort::CreateViewForWidget( |
| 53 content::RenderWidgetHost* widget) { | 55 content::RenderWidgetHost* widget) { |
| 54 return FromRWHV(RenderWidgetHostView::CreateViewForWidget(widget)); | 56 return FromRWHV(RenderWidgetHostView::CreateViewForWidget(widget)); |
| (...skipping 355 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 410 RenderWidgetHostImpl::From(GetRenderWidgetHost()); | 412 RenderWidgetHostImpl::From(GetRenderWidgetHost()); |
| 411 impl->NotifyScreenInfoChanged(); | 413 impl->NotifyScreenInfoChanged(); |
| 412 } | 414 } |
| 413 } | 415 } |
| 414 | 416 |
| 415 class BasicMouseWheelSmoothScrollGesture | 417 class BasicMouseWheelSmoothScrollGesture |
| 416 : public SmoothScrollGesture { | 418 : public SmoothScrollGesture { |
| 417 public: | 419 public: |
| 418 BasicMouseWheelSmoothScrollGesture(bool scroll_down, bool scroll_far) | 420 BasicMouseWheelSmoothScrollGesture(bool scroll_down, bool scroll_far) |
| 419 : start_time_(base::TimeTicks::HighResNow()), | 421 : start_time_(base::TimeTicks::HighResNow()), |
| 422 last_forward_time_(start_time_), |
| 420 scroll_down_(scroll_down), | 423 scroll_down_(scroll_down), |
| 421 scroll_far_(scroll_far) { } | 424 scroll_far_(scroll_far) { } |
| 422 | 425 |
| 423 virtual bool ForwardInputEvents(base::TimeTicks now, | 426 virtual bool ForwardInputEvents(base::TimeTicks now, |
| 424 RenderWidgetHost* host) OVERRIDE { | 427 RenderWidgetHost* host) OVERRIDE { |
| 425 int64 duration_in_ms; | 428 int64 duration_in_ms; |
| 426 if (scroll_far_) | 429 if (scroll_far_) |
| 427 duration_in_ms = kDurationOfFarScrollGestureMs; | 430 duration_in_ms = kDurationOfFarScrollGestureMs; |
| 428 else | 431 else |
| 429 duration_in_ms = kDurationOfNearScrollGestureMs; | 432 duration_in_ms = kDurationOfNearScrollGestureMs; |
| 430 | 433 |
| 431 if (now - start_time_ > base::TimeDelta::FromMilliseconds(duration_in_ms)) | 434 if (now - start_time_ > base::TimeDelta::FromMilliseconds(duration_in_ms)) |
| 432 return false; | 435 return false; |
| 433 | 436 |
| 437 // Figure out how many wheel ticks to send. |
| 438 double seconds_since_last_tick = (now - last_forward_time_).InSecondsF(); |
| 439 int num_wheel_ticks = static_cast<int>( |
| 440 seconds_since_last_tick * kWheelTicksPerSecond); |
| 441 if (!num_wheel_ticks) { |
| 442 TRACE_EVENT_INSTANT1("input", "NoMovement", |
| 443 "seconds_since_last_tick", seconds_since_last_tick); |
| 444 return true; |
| 445 } |
| 446 |
| 447 last_forward_time_ = now; |
| 448 |
| 434 WebKit::WebMouseWheelEvent event; | 449 WebKit::WebMouseWheelEvent event; |
| 435 event.type = WebKit::WebInputEvent::MouseWheel; | 450 event.type = WebKit::WebInputEvent::MouseWheel; |
| 436 // TODO(nduca): Figure out plausible value. | 451 // TODO(nduca): Figure out plausible value. |
| 437 event.deltaY = scroll_down_ ? -10 : 10; | 452 event.deltaY = scroll_down_ ? -10 : 10; |
| 438 event.wheelTicksY = scroll_down_ ? 1 : -1; | 453 event.wheelTicksY = (scroll_down_ ? 1 : -1) * num_wheel_ticks; |
| 439 event.modifiers = 0; | 454 event.modifiers = 0; |
| 440 | 455 |
| 441 // TODO(nduca): Figure out plausible x and y values. | 456 // TODO(nduca): Figure out plausible x and y values. |
| 442 event.globalX = 0; | 457 event.globalX = 0; |
| 443 event.globalY = 0; | 458 event.globalY = 0; |
| 444 event.x = 0; | 459 event.x = 0; |
| 445 event.y = 0; | 460 event.y = 0; |
| 446 event.windowX = event.x; | 461 event.windowX = event.x; |
| 447 event.windowY = event.y; | 462 event.windowY = event.y; |
| 448 host->ForwardWheelEvent(event); | 463 host->ForwardWheelEvent(event); |
| 449 return true; | 464 return true; |
| 450 } | 465 } |
| 451 | 466 |
| 452 private: | 467 private: |
| 453 virtual ~BasicMouseWheelSmoothScrollGesture() { } | 468 virtual ~BasicMouseWheelSmoothScrollGesture() { } |
| 454 base::TimeTicks start_time_; | 469 base::TimeTicks start_time_; |
| 470 base::TimeTicks last_forward_time_; |
| 455 bool scroll_down_; | 471 bool scroll_down_; |
| 456 bool scroll_far_; | 472 bool scroll_far_; |
| 457 }; | 473 }; |
| 458 | 474 |
| 459 SmoothScrollGesture* RenderWidgetHostViewBase::CreateSmoothScrollGesture( | 475 SmoothScrollGesture* RenderWidgetHostViewBase::CreateSmoothScrollGesture( |
| 460 bool scroll_down, bool scroll_far) { | 476 bool scroll_down, bool scroll_far) { |
| 461 return new BasicMouseWheelSmoothScrollGesture(scroll_down, scroll_far); | 477 return new BasicMouseWheelSmoothScrollGesture(scroll_down, scroll_far); |
| 462 } | 478 } |
| 463 | 479 |
| 464 } // namespace content | 480 } // namespace content |
| OLD | NEW |