Home | History | Annotate | Download | only in renderer_host
      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
      3 // found in the LICENSE file.
      4 
      5 #include "content/browser/renderer_host/basic_mouse_wheel_smooth_scroll_gesture.h"
      6 
      7 #include "base/debug/trace_event.h"
      8 #include "content/browser/renderer_host/render_widget_host_impl.h"
      9 
     10 namespace content {
     11 
     12 BasicMouseWheelSmoothScrollGesture::BasicMouseWheelSmoothScrollGesture(
     13     bool scroll_down, int pixels_to_scroll,
     14     int mouse_event_x, int mouse_event_y)
     15     : scroll_down_(scroll_down),
     16       pixels_scrolled_(0),
     17       pixels_to_scroll_(pixels_to_scroll),
     18       mouse_event_x_(mouse_event_x),
     19       mouse_event_y_(mouse_event_y) { }
     20 
     21 BasicMouseWheelSmoothScrollGesture::~BasicMouseWheelSmoothScrollGesture() { }
     22 
     23 bool BasicMouseWheelSmoothScrollGesture::ForwardInputEvents(
     24     base::TimeTicks now, RenderWidgetHost* host) {
     25 
     26   if (pixels_scrolled_ >= pixels_to_scroll_)
     27     return false;
     28 
     29   double position_delta = smooth_scroll_calculator_.GetScrollDelta(
     30       now,
     31       RenderWidgetHostImpl::From(host)->GetSyntheticScrollMessageInterval());
     32 
     33 
     34   WebKit::WebMouseWheelEvent event;
     35   event.type = WebKit::WebInputEvent::MouseWheel;
     36   event.hasPreciseScrollingDeltas = 0;
     37   event.deltaY = scroll_down_ ? -position_delta : position_delta;
     38   // TODO(vollick): find a proper way to access
     39   // WebCore::WheelEvent::tickMultiplier.
     40   event.wheelTicksY = event.deltaY / 120;
     41   event.modifiers = 0;
     42 
     43   // TODO(nduca): Figure out plausible x and y values.
     44   event.globalX = 0;
     45   event.globalY = 0;
     46   event.x = mouse_event_x_;
     47   event.y = mouse_event_y_;
     48   event.windowX = event.x;
     49   event.windowY = event.y;
     50   host->ForwardWheelEvent(event);
     51 
     52   pixels_scrolled_ += abs(event.deltaY);
     53 
     54   TRACE_COUNTER_ID1(
     55       "gpu", "smooth_scroll_by_pixels_scrolled", this, pixels_scrolled_);
     56 
     57   return true;
     58 }
     59 
     60 }  // content
     61 
     62