Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(766)

Unified Diff: ui/events/x/device_data_manager.cc

Issue 221363002: Revert of Don't handle NaturalScroll in Chrome but pass it to CMT instead (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « ui/events/x/device_data_manager.h ('k') | ui/events/x/events_x.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: ui/events/x/device_data_manager.cc
diff --git a/ui/events/x/device_data_manager.cc b/ui/events/x/device_data_manager.cc
index cac9dfda0bdbb6f93a7adf451f54070c25041984..a2e02928c4bb9288353d465c4e52f619682f06b4 100644
--- a/ui/events/x/device_data_manager.cc
+++ b/ui/events/x/device_data_manager.cc
@@ -110,7 +110,8 @@
}
DeviceDataManager::DeviceDataManager()
- : xi_opcode_(-1),
+ : natural_scroll_enabled_(false),
+ xi_opcode_(-1),
atom_cache_(gfx::GetXDisplay(), kCachedAtoms),
button_map_count_(0) {
CHECK(gfx::GetXDisplay());
@@ -174,6 +175,14 @@
bool DeviceDataManager::IsXInput2Available() const {
return xi_opcode_ != -1;
+}
+
+float DeviceDataManager::GetNaturalScrollFactor(int sourceid) const {
+ // Natural scroll is touchpad-only.
+ if (sourceid >= kMaxDeviceNum || !touchpads_[sourceid])
+ return -1.0f;
+
+ return natural_scroll_enabled_ ? 1.0f : -1.0f;
}
void DeviceDataManager::UpdateDeviceList(Display* display) {
@@ -451,17 +460,20 @@
*y_offset_ordinal = 0;
*finger_count = 2;
+ XIDeviceEvent* xiev =
+ static_cast<XIDeviceEvent*>(native_event->xcookie.data);
+ const float natural_scroll_factor = GetNaturalScrollFactor(xiev->sourceid);
EventData data;
GetEventRawData(*native_event, &data);
if (data.find(DT_CMT_SCROLL_X) != data.end())
- *x_offset = data[DT_CMT_SCROLL_X];
+ *x_offset = data[DT_CMT_SCROLL_X] * natural_scroll_factor;
if (data.find(DT_CMT_SCROLL_Y) != data.end())
- *y_offset = data[DT_CMT_SCROLL_Y];
+ *y_offset = data[DT_CMT_SCROLL_Y] * natural_scroll_factor;
if (data.find(DT_CMT_ORDINAL_X) != data.end())
- *x_offset_ordinal = data[DT_CMT_ORDINAL_X];
+ *x_offset_ordinal = data[DT_CMT_ORDINAL_X] * natural_scroll_factor;
if (data.find(DT_CMT_ORDINAL_Y) != data.end())
- *y_offset_ordinal = data[DT_CMT_ORDINAL_Y];
+ *y_offset_ordinal = data[DT_CMT_ORDINAL_Y] * natural_scroll_factor;
if (data.find(DT_CMT_FINGER_COUNT) != data.end())
*finger_count = static_cast<int>(data[DT_CMT_FINGER_COUNT]);
}
@@ -476,19 +488,22 @@
*vy_ordinal = 0;
*is_cancel = false;
+ XIDeviceEvent* xiev =
+ static_cast<XIDeviceEvent*>(native_event->xcookie.data);
+ const float natural_scroll_factor = GetNaturalScrollFactor(xiev->sourceid);
EventData data;
GetEventRawData(*native_event, &data);
if (data.find(DT_CMT_FLING_X) != data.end())
- *vx = data[DT_CMT_FLING_X];
+ *vx = data[DT_CMT_FLING_X] * natural_scroll_factor;
if (data.find(DT_CMT_FLING_Y) != data.end())
- *vy = data[DT_CMT_FLING_Y];
+ *vy = data[DT_CMT_FLING_Y] * natural_scroll_factor;
if (data.find(DT_CMT_FLING_STATE) != data.end())
*is_cancel = !!static_cast<unsigned int>(data[DT_CMT_FLING_STATE]);
if (data.find(DT_CMT_ORDINAL_X) != data.end())
- *vx_ordinal = data[DT_CMT_ORDINAL_X];
+ *vx_ordinal = data[DT_CMT_ORDINAL_X] * natural_scroll_factor;
if (data.find(DT_CMT_ORDINAL_Y) != data.end())
- *vy_ordinal = data[DT_CMT_ORDINAL_Y];
+ *vy_ordinal = data[DT_CMT_ORDINAL_Y] * natural_scroll_factor;
}
void DeviceDataManager::GetMetricsData(const base::NativeEvent& native_event,
« no previous file with comments | « ui/events/x/device_data_manager.h ('k') | ui/events/x/events_x.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698