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

Unified Diff: ui/aura/window_tree_host_x11.cc

Issue 191223007: Move touch CTM from X into Chrome (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: add file ui/aura/touch_ctm.h(cc) 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
Index: ui/aura/window_tree_host_x11.cc
diff --git a/ui/aura/window_tree_host_x11.cc b/ui/aura/window_tree_host_x11.cc
index 1421542a9d12eedafa7fd561d097273d720fbc5f..7d64fc472aa5185528237ac7bb25abcd2dc6ac26 100644
--- a/ui/aura/window_tree_host_x11.cc
+++ b/ui/aura/window_tree_host_x11.cc
@@ -808,18 +808,26 @@ void WindowTreeHostX11::DispatchXI2Event(const base::NativeEvent& event) {
case ui::ET_TOUCH_CANCELLED:
case ui::ET_TOUCH_RELEASED: {
#if defined(OS_CHROMEOS)
- // Bail out early before generating a ui::TouchEvent if this event
- // is not within the range of this RootWindow. Converting an xevent
- // to ui::TouchEvent might change the state of the global touch tracking
- // state, e.g. touch release event can remove the touch id from the
- // record, and doing this multiple time when there are multiple
- // RootWindow will cause problem. So only generate the ui::TouchEvent
- // when we are sure it belongs to this RootWindow.
- if (base::SysInfo::IsRunningOnChromeOS() &&
- !bounds_.Contains(ui::EventLocationFromNative(xev)))
+ // Bail out early before generating a ui::TouchEvent if this event is
+ // not targeting this RootWindow. Converting an xevent to ui::TouchEvent
+ // might change the global touch tracking state, e.g. touch release event
+ // can remove the touch id from the record, and doing this multiple time
+ // when there are multiple RootWindow will cause problem.
+ // If the root window does not have a TouchCTM for the touch device where
+ // the touch event is from, then the touch event is not intended for this
+ // root window.
+ XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev->xcookie.data);
+ if (touch_ctm_map_.find(xiev->deviceid) == touch_ctm_map_.end())
sadrul 2014/03/10 20:20:12 It looks like the display-controller in ash is the
Yufeng Shen (Slow to review) 2014/03/13 20:55:46 As discussed, in the new patch I am firstly using
break;
#endif // defined(OS_CHROMEOS)
ui::TouchEvent touchev(xev);
+#if defined(OS_CHROMEOS)
+ TouchCTM ctm = touch_ctm_map_[xiev->deviceid];
+ float transformed_x = touchev.x() * ctm.x_scale + ctm.x_offset;
+ float transformed_y = touchev.y() * ctm.y_scale + ctm.y_offset;
+ touchev.set_location(gfx::PointF(transformed_x, transformed_y));
+ touchev.set_root_location(gfx::PointF(transformed_x, transformed_y));
+#endif // defined(OS_CHROMEOS)
#if defined(USE_XI2_MT)
// Ignore touch events with touch press happening on the side bezel.
if (!IsSideBezelsEnabled()) {

Powered by Google App Engine
This is Rietveld 408576698