Index: ash/display/event_transformation_handler.cc |
diff --git a/ash/display/event_transformation_handler.cc b/ash/display/event_transformation_handler.cc |
index cb33891edf6bbd8261898723976780e840903dce..8f91da3dda08212ae8920634c0ccf83bf2759a95 100644 |
--- a/ash/display/event_transformation_handler.cc |
+++ b/ash/display/event_transformation_handler.cc |
@@ -40,11 +40,28 @@ void EventTransformationHandler::OnScrollEvent(ui::ScrollEvent* event) { |
if (transformation_mode_ == TRANSFORM_NONE) |
return; |
- // Get the device scale factor and stack it on the final scale factor. |
+ // The original purpose of this function is to scale scroll events |
+ // w.r.t. the screen resolution and physical size as what we do for |
+ // pointer motions in the CrOS X server patch (i.e. linear scaling |
+ // w.r.t. the device scale factor and 20% more for non-integrated |
+ // display). However, Aura scroll events differs from X's pointer |
+ // motions in an important way where the consumers of scroll events |
+ // assume the use of DIP instead of real pixels. Scaling them by the |
+ // device scale factor would result in over-scaling and make high |
+ // resolution device (e.g. Pixel) to have faster scrolling speed than |
+ // normal ones. |
+ // |
+ // Our solution here is to NOT scale events by the device scale factor |
+ // and instead let the scroll event to enjoy the "implicit" scaling |
+ // due to the use of DIP (e.g. treating the scroll values as DIPs |
+ // implies an implicit scaling factor of 2 in terms of physical |
+ // distance on the Pixel screen). All the Views that consume these |
+ // events would also behave identically both on Pixel and non-Pixel |
+ // devices as they take the values as DIPs (e.g. 2f back/forward |
+ // gesture and 3f tab switching would have equal sensitivity). |
sadrul
2013/09/18 15:36:41
Does 'It is not necessary to scale the event for t
oshima
2013/09/18 16:26:10
Agreed.
Shecky Lin
2013/09/20 04:44:10
Done.
|
gfx::Point point_in_screen(event->location()); |
aura::Window* target = static_cast<aura::Window*>(event->target()); |
- const float scale_at_target = ui::GetDeviceScaleFactor(target->layer()); |
- float scale = scale_at_target; |
+ float scale = 1.0; |
// Apply some additional scaling if the display is non-integrated. |
wm::ConvertPointToScreen(target, &point_in_screen); |