1 // Copyright 2015 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/input/mouse_wheel_rails_filter_mac.h" 6 7 using blink::WebInputEvent; 8 using blink::WebMouseWheelEvent; 9 10 namespace content { 11 MouseWheelRailsFilterMac()12MouseWheelRailsFilterMac::MouseWheelRailsFilterMac() { 13 } 14 ~MouseWheelRailsFilterMac()15MouseWheelRailsFilterMac::~MouseWheelRailsFilterMac() { 16 } 17 UpdateRailsMode(const WebMouseWheelEvent & event)18WebInputEvent::RailsMode MouseWheelRailsFilterMac::UpdateRailsMode( 19 const WebMouseWheelEvent& event) { 20 if (event.phase == WebMouseWheelEvent::kPhaseNone && 21 event.momentum_phase == WebMouseWheelEvent::kPhaseNone) { 22 // We should only set the rails mode for trackpad wheel events. The AppKit 23 // documentation state that legacy mouse events (legacy mouse) do not have 24 // |phase| and |momentum_phase|. 25 // https://developer.apple.com/documentation/appkit/nsevent/1533550-phase. 26 return WebInputEvent::kRailsModeFree; 27 } 28 29 // A somewhat-arbitrary decay constant for hysteresis. 30 const float kDecayConstant = 0.8f; 31 32 if (event.phase == WebMouseWheelEvent::kPhaseBegan) { 33 decayed_delta_ = gfx::Vector2dF(); 34 } 35 if (event.delta_x == 0 && event.delta_y == 0) 36 return WebInputEvent::kRailsModeFree; 37 38 decayed_delta_.Scale(kDecayConstant); 39 decayed_delta_ += 40 gfx::Vector2dF(std::abs(event.delta_x), std::abs(event.delta_y)); 41 42 if (decayed_delta_.y() >= decayed_delta_.x()) 43 return WebInputEvent::kRailsModeVertical; 44 return WebInputEvent::kRailsModeHorizontal; 45 } 46 47 } // namespace content 48