Commit d56da1b5 authored by Sahir Vellani's avatar Sahir Vellani Committed by Commit Bot

Add percent based mousewheel scrolling for linux

This change implements percent based scrolling for mousewheels on linux
as part of the scrolling roadmap. If percent based scrolling is enabled,
mousewheel scrolls will now be percent based scrolls. This is already
implemented on Windows.

Bug: 1101535
Change-Id: I91cf774a2dc3fe5e129939c64a0e5bc645b8fe9a
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2354663Reviewed-by: default avatarTimothy Dresser <tdresser@chromium.org>
Reviewed-by: default avatarRobert Flack <flackr@chromium.org>
Reviewed-by: default avatarRahul Arakeri <arakeri@microsoft.com>
Commit-Queue: Sahir Vellani <sahir.vellani@microsoft.com>
Cr-Commit-Position: refs/heads/master@{#804058}
parent 75c19228
......@@ -4,6 +4,7 @@
#include "ui/events/blink/web_input_event.h"
#include "ui/base/ui_base_features.h"
#include "ui/events/base_event_utils.h"
#include "ui/events/blink/blink_event_util.h"
#include "ui/events/blink/blink_features.h"
......@@ -24,6 +25,10 @@ namespace ui {
namespace {
// The scroll percentage per mousewheel tick. Used to determine scroll delta
// if percent based scrolling is enabled.
const float kScrollPercentPerLineOrChar = 0.05;
gfx::PointF GetScreenLocationFromEvent(const LocatedEvent& event) {
return event.target() ? event.target()->GetScreenLocationF(event)
: event.root_location_f();
......@@ -464,6 +469,19 @@ blink::WebMouseWheelEvent MakeWebMouseWheelEventFromUiEvent(
webkit_event.wheel_ticks_y =
webkit_event.delta_y / MouseWheelEvent::kWheelDelta;
// Set deltas to be percent based if percent based scrolling is enabled.
// If percent based scrolling is enabled on Windows, percent based
// mousewheel events are built in the Windows web input event builder.
// Percent based scrolling is not supported on Mac because the current
// roadmap for scroll personality work is reserved for Windows and Linux.
if (base::FeatureList::IsEnabled(features::kPercentBasedScrolling)) {
webkit_event.delta_units = ui::ScrollGranularity::kScrollByPercentage;
webkit_event.delta_y *=
(kScrollPercentPerLineOrChar / MouseWheelEvent::kWheelDelta);
webkit_event.delta_x *=
(kScrollPercentPerLineOrChar / MouseWheelEvent::kWheelDelta);
}
webkit_event.tilt_x = roundf(event.pointer_details().tilt_x);
webkit_event.tilt_y = roundf(event.pointer_details().tilt_y);
webkit_event.force = event.pointer_details().force;
......
......@@ -8,6 +8,7 @@
#include <stdint.h>
#include "base/stl_util.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "testing/gtest/include/gtest/gtest.h"
#include "ui/base/ui_base_features.h"
......@@ -476,6 +477,26 @@ TEST(WebInputEventTest, TestMakeWebMouseWheelEvent) {
}
}
#if !defined(OS_MAC)
TEST(WebInputEventTest, TestPercentMouseWheelScroll) {
base::test::ScopedFeatureList scoped_feature_list;
scoped_feature_list.InitAndEnableFeature(features::kPercentBasedScrolling);
base::TimeTicks timestamp = EventTimeForNow();
MouseWheelEvent ui_event(gfx::Vector2d(0, -MouseWheelEvent::kWheelDelta),
gfx::Point(123, 321), gfx::Point(123, 321),
timestamp, 0, 0);
blink::WebMouseWheelEvent webkit_event = MakeWebMouseWheelEvent(ui_event);
EXPECT_EQ(ui::ScrollGranularity::kScrollByPercentage,
webkit_event.delta_units);
EXPECT_FLOAT_EQ(0.f, webkit_event.delta_x);
EXPECT_FLOAT_EQ(-0.05, webkit_event.delta_y);
EXPECT_FLOAT_EQ(0.f, webkit_event.wheel_ticks_x);
EXPECT_FLOAT_EQ(-1.f, webkit_event.wheel_ticks_y);
}
#endif
TEST(WebInputEventTest, KeyEvent) {
ui::ScopedKeyboardLayout keyboard_layout(ui::KEYBOARD_LAYOUT_ENGLISH_US);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment