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

Side by Side Diff: ui/base/x/events_x.cc

Issue 12208118: Add support for ordinal scroll amounts (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix interactive_ui_tests failure Created 7 years, 10 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « ui/base/win/events_win.cc ('k') | ui/base/x/x11_util.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "ui/base/events/event_constants.h" 5 #include "ui/base/events/event_constants.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 #include <X11/extensions/XInput.h> 8 #include <X11/extensions/XInput.h>
9 #include <X11/extensions/XInput2.h> 9 #include <X11/extensions/XInput2.h>
10 #include <X11/Xlib.h> 10 #include <X11/Xlib.h>
(...skipping 18 matching lines...) Expand all
29 #include "ui/gfx/screen.h" 29 #include "ui/gfx/screen.h"
30 30
31 // Copied from xserver-properties.h 31 // Copied from xserver-properties.h
32 #define AXIS_LABEL_PROP_REL_HWHEEL "Rel Horiz Wheel" 32 #define AXIS_LABEL_PROP_REL_HWHEEL "Rel Horiz Wheel"
33 #define AXIS_LABEL_PROP_REL_WHEEL "Rel Vert Wheel" 33 #define AXIS_LABEL_PROP_REL_WHEEL "Rel Vert Wheel"
34 34
35 // CMT specific timings 35 // CMT specific timings
36 #define AXIS_LABEL_PROP_ABS_START_TIME "Abs Start Timestamp" 36 #define AXIS_LABEL_PROP_ABS_START_TIME "Abs Start Timestamp"
37 #define AXIS_LABEL_PROP_ABS_END_TIME "Abs End Timestamp" 37 #define AXIS_LABEL_PROP_ABS_END_TIME "Abs End Timestamp"
38 38
39 // Ordinal values
40 #define AXIS_LABEL_PROP_ABS_DBL_ORDINAL_X "Abs Dbl Ordinal X"
41 #define AXIS_LABEL_PROP_ABS_DBL_ORDINAL_Y "Abs Dbl Ordinal Y"
42
39 // Fling properties 43 // Fling properties
40 #define AXIS_LABEL_PROP_ABS_FLING_X "Abs Fling X Velocity" 44 #define AXIS_LABEL_PROP_ABS_FLING_X "Abs Fling X Velocity"
41 #define AXIS_LABEL_PROP_ABS_FLING_Y "Abs Fling Y Velocity" 45 #define AXIS_LABEL_PROP_ABS_FLING_Y "Abs Fling Y Velocity"
42 #define AXIS_LABEL_PROP_ABS_FLING_STATE "Abs Fling State" 46 #define AXIS_LABEL_PROP_ABS_FLING_STATE "Abs Fling State"
43 47
44 #define AXIS_LABEL_PROP_ABS_FINGER_COUNT "Abs Finger Count" 48 #define AXIS_LABEL_PROP_ABS_FINGER_COUNT "Abs Finger Count"
45 49
46 // New versions of the valuators, with double values instead of fixed point. 50 // New versions of the valuators, with double values instead of fixed point.
47 #define AXIS_LABEL_PROP_ABS_DBL_START_TIME "Abs Dbl Start Timestamp" 51 #define AXIS_LABEL_PROP_ABS_DBL_START_TIME "Abs Dbl Start Timestamp"
48 #define AXIS_LABEL_PROP_ABS_DBL_END_TIME "Abs Dbl End Timestamp" 52 #define AXIS_LABEL_PROP_ABS_DBL_END_TIME "Abs Dbl End Timestamp"
49 #define AXIS_LABEL_PROP_ABS_DBL_FLING_VX "Abs Dbl Fling X Velocity" 53 #define AXIS_LABEL_PROP_ABS_DBL_FLING_VX "Abs Dbl Fling X Velocity"
50 #define AXIS_LABEL_PROP_ABS_DBL_FLING_VY "Abs Dbl Fling Y Velocity" 54 #define AXIS_LABEL_PROP_ABS_DBL_FLING_VY "Abs Dbl Fling Y Velocity"
51 55
52 namespace { 56 namespace {
53 57
54 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+. 58 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+.
55 const int kWheelScrollAmount = 53; 59 const int kWheelScrollAmount = 53;
56 60
57 const int kMinWheelButton = 4; 61 const int kMinWheelButton = 4;
58 const int kMaxWheelButton = 7; 62 const int kMaxWheelButton = 7;
59 63
60 const char* kCMTCachedAtoms[] = { 64 const char* kCMTCachedAtoms[] = {
65 AXIS_LABEL_PROP_ABS_DBL_ORDINAL_X,
66 AXIS_LABEL_PROP_ABS_DBL_ORDINAL_Y,
61 AXIS_LABEL_PROP_REL_HWHEEL, 67 AXIS_LABEL_PROP_REL_HWHEEL,
62 AXIS_LABEL_PROP_REL_WHEEL, 68 AXIS_LABEL_PROP_REL_WHEEL,
63 AXIS_LABEL_PROP_ABS_START_TIME, 69 AXIS_LABEL_PROP_ABS_START_TIME,
64 AXIS_LABEL_PROP_ABS_DBL_START_TIME, 70 AXIS_LABEL_PROP_ABS_DBL_START_TIME,
65 AXIS_LABEL_PROP_ABS_END_TIME, 71 AXIS_LABEL_PROP_ABS_END_TIME,
66 AXIS_LABEL_PROP_ABS_DBL_END_TIME, 72 AXIS_LABEL_PROP_ABS_DBL_END_TIME,
67 AXIS_LABEL_PROP_ABS_FLING_X, 73 AXIS_LABEL_PROP_ABS_FLING_X,
68 AXIS_LABEL_PROP_ABS_FLING_Y, 74 AXIS_LABEL_PROP_ABS_FLING_Y,
69 AXIS_LABEL_PROP_ABS_DBL_FLING_VX, 75 AXIS_LABEL_PROP_ABS_DBL_FLING_VX,
70 AXIS_LABEL_PROP_ABS_DBL_FLING_VY, 76 AXIS_LABEL_PROP_ABS_DBL_FLING_VY,
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
104 ui::DeviceListCacheX::GetInstance()->GetXDeviceList(display); 110 ui::DeviceListCacheX::GetInstance()->GetXDeviceList(display);
105 Atom xi_touchpad = XInternAtom(display, XI_TOUCHPAD, false); 111 Atom xi_touchpad = XInternAtom(display, XI_TOUCHPAD, false);
106 for (int i = 0; i < dev_list.count; ++i) 112 for (int i = 0; i < dev_list.count; ++i)
107 if (dev_list[i].type == xi_touchpad) 113 if (dev_list[i].type == xi_touchpad)
108 touchpads_[dev_list[i].id] = true; 114 touchpads_[dev_list[i].id] = true;
109 115
110 XIDeviceList info_list = 116 XIDeviceList info_list =
111 ui::DeviceListCacheX::GetInstance()->GetXI2DeviceList(display); 117 ui::DeviceListCacheX::GetInstance()->GetXI2DeviceList(display);
112 Atom x_axis = atom_cache_.GetAtom(AXIS_LABEL_PROP_REL_HWHEEL); 118 Atom x_axis = atom_cache_.GetAtom(AXIS_LABEL_PROP_REL_HWHEEL);
113 Atom y_axis = atom_cache_.GetAtom(AXIS_LABEL_PROP_REL_WHEEL); 119 Atom y_axis = atom_cache_.GetAtom(AXIS_LABEL_PROP_REL_WHEEL);
120 Atom x_ordinal = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_ORDINAL_X);
121 Atom y_ordinal = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_ORDINAL_Y);
114 Atom start_time = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_START_TIME); 122 Atom start_time = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_START_TIME);
115 Atom start_time_dbl = 123 Atom start_time_dbl =
116 atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_START_TIME); 124 atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_START_TIME);
117 Atom end_time = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_END_TIME); 125 Atom end_time = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_END_TIME);
118 Atom end_time_dbl = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_END_TIME); 126 Atom end_time_dbl = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_END_TIME);
119 Atom fling_vx = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_X); 127 Atom fling_vx = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_X);
120 Atom fling_vx_dbl = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_FLING_VX); 128 Atom fling_vx_dbl = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_FLING_VX);
121 Atom fling_vy = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_Y); 129 Atom fling_vy = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_Y);
122 Atom fling_vy_dbl = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_FLING_VY); 130 Atom fling_vy_dbl = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_DBL_FLING_VY);
123 Atom fling_state = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_STATE); 131 Atom fling_state = atom_cache_.GetAtom(AXIS_LABEL_PROP_ABS_FLING_STATE);
(...skipping 19 matching lines...) Expand all
143 reinterpret_cast<XIValuatorClassInfo*>(info->classes[j]); 151 reinterpret_cast<XIValuatorClassInfo*>(info->classes[j]);
144 int number = v->number; 152 int number = v->number;
145 if (number > valuators.max) 153 if (number > valuators.max)
146 valuators.max = number; 154 valuators.max = number;
147 if (v->label == x_axis) { 155 if (v->label == x_axis) {
148 valuators.scroll_x = number; 156 valuators.scroll_x = number;
149 is_cmt = true; 157 is_cmt = true;
150 } else if (v->label == y_axis) { 158 } else if (v->label == y_axis) {
151 valuators.scroll_y = number; 159 valuators.scroll_y = number;
152 is_cmt = true; 160 is_cmt = true;
161 } else if (v->label == x_ordinal) {
162 valuators.ordinal_x = number;
163 is_cmt = true;
164 } else if (v->label == y_ordinal) {
165 valuators.ordinal_y = number;
166 is_cmt = true;
153 } else if (v->label == finger_count) { 167 } else if (v->label == finger_count) {
154 valuators.finger_count = number; 168 valuators.finger_count = number;
155 is_cmt = true; 169 is_cmt = true;
156 } else if (v->label == start_time) { 170 } else if (v->label == start_time) {
157 valuators.start_time = number; 171 valuators.start_time = number;
158 is_cmt = true; 172 is_cmt = true;
159 } else if (v->label == start_time_dbl) { 173 } else if (v->label == start_time_dbl) {
160 valuators.start_time_dbl = number; 174 valuators.start_time_dbl = number;
161 is_cmt = true; 175 is_cmt = true;
162 } else if (v->label == end_time) { 176 } else if (v->label == end_time) {
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
220 234
221 return natural_scroll_enabled_ ? 1.0f : -1.0f; 235 return natural_scroll_enabled_ ? 1.0f : -1.0f;
222 } 236 }
223 237
224 // Returns true if this is a scroll event (a motion event with the necessary 238 // Returns true if this is a scroll event (a motion event with the necessary
225 // valuators. Also returns the offsets. |x_offset| and |y_offset| can be 239 // valuators. Also returns the offsets. |x_offset| and |y_offset| can be
226 // NULL. 240 // NULL.
227 bool GetScrollOffsets(const XEvent& xev, 241 bool GetScrollOffsets(const XEvent& xev,
228 float* x_offset, 242 float* x_offset,
229 float* y_offset, 243 float* y_offset,
244 float* x_offset_ordinal,
245 float* y_offset_ordinal,
230 int* finger_count) { 246 int* finger_count) {
231 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev.xcookie.data); 247 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev.xcookie.data);
232 248
233 if (x_offset) 249 if (x_offset)
234 *x_offset = 0; 250 *x_offset = 0;
235 if (y_offset) 251 if (y_offset)
236 *y_offset = 0; 252 *y_offset = 0;
237 if (finger_count) 253 if (x_offset_ordinal)
254 *x_offset_ordinal = 0;
255 if (y_offset_ordinal)
256 *y_offset_ordinal = 0;
257 if (finger_count)
238 *finger_count = 2; 258 *finger_count = 2;
239 259
240 const int sourceid = xiev->sourceid; 260 const int sourceid = xiev->sourceid;
241 if (!cmt_devices_[sourceid]) 261 if (!cmt_devices_[sourceid])
242 return false; 262 return false;
243 263
244 const float natural_scroll_factor = GetNaturalScrollFactor(sourceid); 264 const float natural_scroll_factor = GetNaturalScrollFactor(sourceid);
245 const Valuators v = device_to_valuators_[sourceid]; 265 const Valuators v = device_to_valuators_[sourceid];
246 const bool has_x_offset = XIMaskIsSet(xiev->valuators.mask, v.scroll_x); 266 const bool has_x_offset = XIMaskIsSet(xiev->valuators.mask, v.scroll_x);
247 const bool has_y_offset = XIMaskIsSet(xiev->valuators.mask, v.scroll_y); 267 const bool has_y_offset = XIMaskIsSet(xiev->valuators.mask, v.scroll_y);
248 const bool is_scroll = has_x_offset || has_y_offset; 268 const bool is_scroll = has_x_offset || has_y_offset;
249 269
250 if (!is_scroll || (!x_offset && !y_offset)) 270 if (!is_scroll || (!x_offset && !y_offset))
251 return is_scroll; 271 return is_scroll;
252 272
253 double* valuators = xiev->valuators.values; 273 double* valuators = xiev->valuators.values;
254 for (int i = 0; i <= v.max; ++i) { 274 for (int i = 0; i <= v.max; ++i) {
255 if (XIMaskIsSet(xiev->valuators.mask, i)) { 275 if (XIMaskIsSet(xiev->valuators.mask, i)) {
256 if (x_offset && v.scroll_x == i) 276 if (x_offset && v.scroll_x == i)
257 *x_offset = *valuators * natural_scroll_factor; 277 *x_offset = *valuators * natural_scroll_factor;
258 else if (y_offset && v.scroll_y == i) 278 else if (y_offset && v.scroll_y == i)
259 *y_offset = *valuators * natural_scroll_factor; 279 *y_offset = *valuators * natural_scroll_factor;
280 else if (x_offset_ordinal && v.ordinal_x == i)
281 *x_offset_ordinal = *valuators * natural_scroll_factor;
282 else if (y_offset_ordinal && v.ordinal_y == i)
283 *y_offset_ordinal = *valuators * natural_scroll_factor;
260 else if (finger_count && v.finger_count == i) 284 else if (finger_count && v.finger_count == i)
261 *finger_count = static_cast<int>(*valuators); 285 *finger_count = static_cast<int>(*valuators);
262 valuators++; 286 valuators++;
263 } 287 }
264 } 288 }
265 289
266 return true; 290 return true;
267 } 291 }
268 292
269 bool GetFlingData(const XEvent& xev, 293 bool GetFlingData(const XEvent& xev,
270 float* vx, float* vy, 294 float* vx, float* vy,
295 float* vx_ordinal, float* vy_ordinal,
271 bool* is_cancel) { 296 bool* is_cancel) {
272 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev.xcookie.data); 297 XIDeviceEvent* xiev = static_cast<XIDeviceEvent*>(xev.xcookie.data);
273 298
274 *vx = 0; 299 if (vx)
275 *vy = 0; 300 *vx = 0;
276 *is_cancel = false; 301 if (vy)
302 *vy = 0;
303 if (vx_ordinal)
304 *vx_ordinal = 0;
305 if (vy_ordinal)
306 *vy_ordinal = 0;
307 if (is_cancel)
308 *is_cancel = false;
277 309
278 const int sourceid = xiev->sourceid; 310 const int sourceid = xiev->sourceid;
279 if (!cmt_devices_[sourceid]) 311 if (!cmt_devices_[sourceid])
280 return false; 312 return false;
281 313
282 const float natural_scroll_factor = GetNaturalScrollFactor(sourceid); 314 const float natural_scroll_factor = GetNaturalScrollFactor(sourceid);
283 const Valuators v = device_to_valuators_[sourceid]; 315 const Valuators v = device_to_valuators_[sourceid];
284 if ((!XIMaskIsSet(xiev->valuators.mask, v.fling_vx) && 316 if ((!XIMaskIsSet(xiev->valuators.mask, v.fling_vx) &&
285 !XIMaskIsSet(xiev->valuators.mask, v.fling_vx_dbl)) || 317 !XIMaskIsSet(xiev->valuators.mask, v.fling_vx_dbl)) ||
286 (!XIMaskIsSet(xiev->valuators.mask, v.fling_vy) && 318 (!XIMaskIsSet(xiev->valuators.mask, v.fling_vy) &&
287 !XIMaskIsSet(xiev->valuators.mask, v.fling_vy_dbl)) || 319 !XIMaskIsSet(xiev->valuators.mask, v.fling_vy_dbl)) ||
288 !XIMaskIsSet(xiev->valuators.mask, v.fling_state)) 320 !XIMaskIsSet(xiev->valuators.mask, v.fling_state))
289 return false; 321 return false;
290 322
291 double* valuators = xiev->valuators.values; 323 double* valuators = xiev->valuators.values;
292 for (int i = 0; i <= v.max; ++i) { 324 for (int i = 0; i <= v.max; ++i) {
293 if (XIMaskIsSet(xiev->valuators.mask, i)) { 325 if (XIMaskIsSet(xiev->valuators.mask, i)) {
294 // Convert values to unsigned ints representing ms before storing them, 326 // Convert values to unsigned ints representing ms before storing them,
295 // as that is how they were encoded before conversion to doubles. 327 // as that is how they were encoded before conversion to doubles.
296 if (v.fling_vx_dbl == i) { 328 if (vx && v.fling_vx_dbl == i) {
297 *vx = natural_scroll_factor * *valuators; 329 *vx = natural_scroll_factor * *valuators;
298 } else if (v.fling_vx == i) { 330 } else if (vx && v.fling_vx == i) {
299 *vx = natural_scroll_factor * 331 *vx = natural_scroll_factor *
300 static_cast<double>(static_cast<int>(*valuators)) / 1000.0f; 332 static_cast<double>(static_cast<int>(*valuators)) / 1000.0f;
301 } else if (v.fling_vy_dbl == i) { 333 } else if (vy && v.fling_vy_dbl == i) {
302 *vy = natural_scroll_factor * *valuators; 334 *vy = natural_scroll_factor * *valuators;
303 } else if (v.fling_vy == i) { 335 } else if (vy && v.fling_vy == i) {
304 *vy = natural_scroll_factor * 336 *vy = natural_scroll_factor *
305 static_cast<double>(static_cast<int>(*valuators)) / 1000.0f; 337 static_cast<double>(static_cast<int>(*valuators)) / 1000.0f;
306 } else if (v.fling_state == i) { 338 } else if (is_cancel && v.fling_state == i) {
307 *is_cancel = !!static_cast<unsigned int>(*valuators); 339 *is_cancel = !!static_cast<unsigned int>(*valuators);
340 } else if (vx_ordinal && v.ordinal_x == i) {
341 *vx_ordinal = *valuators * natural_scroll_factor;
342 } else if (vy_ordinal && v.ordinal_y == i) {
343 *vy_ordinal = *valuators * natural_scroll_factor;
308 } 344 }
309 valuators++; 345 valuators++;
310 } 346 }
311 } 347 }
312 348
313 return true; 349 return true;
314 } 350 }
315 351
316 bool GetGestureTimes(const XEvent& xev, 352 bool GetGestureTimes(const XEvent& xev,
317 double* start_time, 353 double* start_time,
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 } 396 }
361 397
362 private: 398 private:
363 // Requirement for Singleton 399 // Requirement for Singleton
364 friend struct DefaultSingletonTraits<CMTEventData>; 400 friend struct DefaultSingletonTraits<CMTEventData>;
365 401
366 struct Valuators { 402 struct Valuators {
367 int max; 403 int max;
368 int scroll_x; 404 int scroll_x;
369 int scroll_y; 405 int scroll_y;
406 int ordinal_x;
407 int ordinal_y;
370 int finger_count; 408 int finger_count;
371 int start_time; 409 int start_time;
372 int end_time; 410 int end_time;
373 int fling_vx; 411 int fling_vx;
374 int fling_vy; 412 int fling_vy;
375 int fling_state; 413 int fling_state;
376 // *_dbl valuators take precedence over the fixed precision versions. 414 // *_dbl valuators take precedence over the fixed precision versions.
377 int start_time_dbl; 415 int start_time_dbl;
378 int end_time_dbl; 416 int end_time_dbl;
379 int fling_vx_dbl; 417 int fling_vx_dbl;
380 int fling_vy_dbl; 418 int fling_vy_dbl;
381 419
382 Valuators() 420 Valuators()
383 : max(-1), 421 : max(-1),
384 scroll_x(-1), 422 scroll_x(-1),
385 scroll_y(-1), 423 scroll_y(-1),
424 ordinal_x(-1),
425 ordinal_y(-1),
386 finger_count(-1), 426 finger_count(-1),
387 start_time(-1), 427 start_time(-1),
388 end_time(-1), 428 end_time(-1),
389 fling_vx(-1), 429 fling_vx(-1),
390 fling_vy(-1), 430 fling_vy(-1),
391 fling_state(-1), 431 fling_state(-1),
392 start_time_dbl(-1), 432 start_time_dbl(-1),
393 end_time_dbl(-1), 433 end_time_dbl(-1),
394 fling_vx_dbl(-1), 434 fling_vx_dbl(-1),
395 fling_vy_dbl(-1) { 435 fling_vy_dbl(-1) {
(...skipping 387 matching lines...) Expand 10 before | Expand all | Expand 10 after
783 return ET_MOUSE_PRESSED; 823 return ET_MOUSE_PRESSED;
784 } 824 }
785 case XI_ButtonRelease: { 825 case XI_ButtonRelease: {
786 int button = EventButtonFromNative(native_event); 826 int button = EventButtonFromNative(native_event);
787 // Drop wheel events; we should've already scrolled on the press. 827 // Drop wheel events; we should've already scrolled on the press.
788 if (button >= kMinWheelButton && button <= kMaxWheelButton) 828 if (button >= kMinWheelButton && button <= kMaxWheelButton)
789 return ET_UNKNOWN; 829 return ET_UNKNOWN;
790 return ET_MOUSE_RELEASED; 830 return ET_MOUSE_RELEASED;
791 } 831 }
792 case XI_Motion: { 832 case XI_Motion: {
793 float vx, vy;
794 bool is_cancel; 833 bool is_cancel;
795 if (GetFlingData(native_event, &vx, &vy, &is_cancel)) { 834 if (GetFlingData(native_event, NULL, NULL, NULL, NULL, &is_cancel)) {
796 return is_cancel ? ET_SCROLL_FLING_CANCEL : ET_SCROLL_FLING_START; 835 return is_cancel ? ET_SCROLL_FLING_CANCEL : ET_SCROLL_FLING_START;
797 } else if (GetScrollOffsets(native_event, NULL, NULL, NULL)) { 836 } else if (GetScrollOffsets(
837 native_event, NULL, NULL, NULL, NULL, NULL)) {
798 return ET_SCROLL; 838 return ET_SCROLL;
799 } else if (GetButtonMaskForX2Event(xievent)) { 839 } else if (GetButtonMaskForX2Event(xievent)) {
800 return ET_MOUSE_DRAGGED; 840 return ET_MOUSE_DRAGGED;
801 } else { 841 } else {
802 return ET_MOUSE_MOVED; 842 return ET_MOUSE_MOVED;
803 } 843 }
804 } 844 }
805 } 845 }
806 } 846 }
807 default: 847 default:
(...skipping 297 matching lines...) Expand 10 before | Expand all | Expand 10 after
1105 // Force is normalized to fall into [0, 1] 1145 // Force is normalized to fall into [0, 1]
1106 if (!ui::ValuatorTracker::GetInstance()->NormalizeValuator( 1146 if (!ui::ValuatorTracker::GetInstance()->NormalizeValuator(
1107 deviceid, ui::ValuatorTracker::VAL_PRESSURE, &force)) 1147 deviceid, ui::ValuatorTracker::VAL_PRESSURE, &force))
1108 force = 0.0; 1148 force = 0.0;
1109 return force; 1149 return force;
1110 } 1150 }
1111 1151
1112 bool GetScrollOffsets(const base::NativeEvent& native_event, 1152 bool GetScrollOffsets(const base::NativeEvent& native_event,
1113 float* x_offset, 1153 float* x_offset,
1114 float* y_offset, 1154 float* y_offset,
1155 float* x_offset_ordinal,
1156 float* y_offset_ordinal,
1115 int* finger_count) { 1157 int* finger_count) {
1116 return CMTEventData::GetInstance()->GetScrollOffsets( 1158 return CMTEventData::GetInstance()->GetScrollOffsets(
1117 *native_event, x_offset, y_offset, finger_count); 1159 *native_event,
1160 x_offset, y_offset,
1161 x_offset_ordinal, y_offset_ordinal,
1162 finger_count);
1118 } 1163 }
1119 1164
1120 bool GetFlingData(const base::NativeEvent& native_event, 1165 bool GetFlingData(const base::NativeEvent& native_event,
1121 float* vx, 1166 float* vx,
1122 float* vy, 1167 float* vy,
1168 float* vx_ordinal,
1169 float* vy_ordinal,
1123 bool* is_cancel) { 1170 bool* is_cancel) {
1124 return CMTEventData::GetInstance()->GetFlingData( 1171 return CMTEventData::GetInstance()->GetFlingData(
1125 *native_event, vx, vy, is_cancel); 1172 *native_event, vx, vy, vx_ordinal, vy_ordinal, is_cancel);
1126 } 1173 }
1127 1174
1128 bool GetGestureTimes(const base::NativeEvent& native_event, 1175 bool GetGestureTimes(const base::NativeEvent& native_event,
1129 double* start_time, 1176 double* start_time,
1130 double* end_time) { 1177 double* end_time) {
1131 return CMTEventData::GetInstance()->GetGestureTimes( 1178 return CMTEventData::GetInstance()->GetGestureTimes(
1132 *native_event, start_time, end_time); 1179 *native_event, start_time, end_time);
1133 } 1180 }
1134 1181
1135 void SetNaturalScroll(bool enabled) { 1182 void SetNaturalScroll(bool enabled) {
(...skipping 23 matching lines...) Expand all
1159 noop->xclient.format = 8; 1206 noop->xclient.format = 8;
1160 DCHECK(!noop->xclient.display); 1207 DCHECK(!noop->xclient.display);
1161 } 1208 }
1162 // Make sure we use atom from current xdisplay, which may 1209 // Make sure we use atom from current xdisplay, which may
1163 // change during the test. 1210 // change during the test.
1164 noop->xclient.message_type = GetNoopEventAtom(); 1211 noop->xclient.message_type = GetNoopEventAtom();
1165 return noop; 1212 return noop;
1166 } 1213 }
1167 1214
1168 } // namespace ui 1215 } // namespace ui
OLDNEW
« no previous file with comments | « ui/base/win/events_win.cc ('k') | ui/base/x/x11_util.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698