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

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

Issue 8907005: Add support for new scroll valuators coming from CMT (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Cleanup and comments Created 9 years 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
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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.h" 5 #include "ui/base/events.h"
6 6
7 #include <X11/Xlib.h> 7 #include <X11/Xlib.h>
8 #include <X11/extensions/XInput2.h> 8 #include <X11/extensions/XInput2.h>
9 #include <string.h> 9 #include <string.h>
10 10
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "ui/base/keycodes/keyboard_code_conversion_x.h" 12 #include "ui/base/keycodes/keyboard_code_conversion_x.h"
13 #include "ui/base/touch/touch_factory.h" 13 #include "ui/base/touch/touch_factory.h"
14 #include "ui/base/x/scroll_factory.h"
14 #include "ui/base/x/x11_util.h" 15 #include "ui/base/x/x11_util.h"
15 #include "ui/gfx/point.h" 16 #include "ui/gfx/point.h"
16 17
17 #if !defined(TOOLKIT_USES_GTK) 18 #if !defined(TOOLKIT_USES_GTK)
18 #include "base/message_pump_x.h" 19 #include "base/message_pump_x.h"
19 #endif 20 #endif
20 21
21 namespace { 22 namespace {
22 23
23 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+. 24 // Scroll amount for each wheelscroll event. 53 is also the value used for GTK+.
(...skipping 161 matching lines...) Expand 10 before | Expand all | Expand 10 after
185 return ET_MOUSE_MOVED; 186 return ET_MOUSE_MOVED;
186 case EnterNotify: 187 case EnterNotify:
187 return ET_MOUSE_ENTERED; 188 return ET_MOUSE_ENTERED;
188 case LeaveNotify: 189 case LeaveNotify:
189 return ET_MOUSE_EXITED; 190 return ET_MOUSE_EXITED;
190 case GenericEvent: { 191 case GenericEvent: {
191 XIDeviceEvent* xievent = 192 XIDeviceEvent* xievent =
192 static_cast<XIDeviceEvent*>(native_event->xcookie.data); 193 static_cast<XIDeviceEvent*>(native_event->xcookie.data);
193 if (TouchFactory::GetInstance()->IsTouchDevice(xievent->sourceid)) 194 if (TouchFactory::GetInstance()->IsTouchDevice(xievent->sourceid))
194 return GetTouchEventType(native_event); 195 return GetTouchEventType(native_event);
195 int button = EventButtonFromNative(native_event);
196 switch (xievent->evtype) { 196 switch (xievent->evtype) {
197 case XI_ButtonPress: 197 case XI_ButtonPress:
198 if (button >= kMinWheelButton && 198 case XI_ButtonRelease: {
199 button <= kMaxWheelButton) 199 int button = EventButtonFromNative(native_event);
200 if (button >= kMinWheelButton && button <= kMaxWheelButton)
200 return ET_MOUSEWHEEL; 201 return ET_MOUSEWHEEL;
201 return ET_MOUSE_PRESSED; 202 return xievent->evtype == XI_ButtonPress ?
202 case XI_ButtonRelease: 203 ET_MOUSE_PRESSED : ET_MOUSE_RELEASED;
203 if (button >= kMinWheelButton && 204 }
204 button <= kMaxWheelButton)
205 return ET_MOUSEWHEEL;
206 return ET_MOUSE_RELEASED;
207 case XI_Motion: 205 case XI_Motion:
208 return GetButtonMaskForX2Event(xievent) ? 206 if (GetScrollOffsets(native_event, NULL, NULL))
209 ET_MOUSE_DRAGGED : ET_MOUSE_MOVED; 207 return ET_SCROLL;
208 else if (GetButtonMaskForX2Event(xievent))
209 return ET_MOUSE_DRAGGED;
210 else
211 return ET_MOUSE_MOVED;
210 } 212 }
211 } 213 }
212 default: 214 default:
213 break; 215 break;
214 } 216 }
215 return ET_UNKNOWN; 217 return ET_UNKNOWN;
216 } 218 }
217 219
218 int EventFlagsFromNative(const base::NativeEvent& native_event) { 220 int EventFlagsFromNative(const base::NativeEvent& native_event) {
219 switch (native_event->type) { 221 switch (native_event->type) {
(...skipping 178 matching lines...) Expand 10 before | Expand all | Expand 10 after
398 0.0); 400 0.0);
399 unsigned int deviceid = 401 unsigned int deviceid =
400 static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid; 402 static_cast<XIDeviceEvent*>(native_event->xcookie.data)->sourceid;
401 // Force is normalized to fall into [0, 1] 403 // Force is normalized to fall into [0, 1]
402 if (!ui::TouchFactory::GetInstance()->NormalizeTouchParam( 404 if (!ui::TouchFactory::GetInstance()->NormalizeTouchParam(
403 deviceid, ui::TouchFactory::TP_PRESSURE, &force)) 405 deviceid, ui::TouchFactory::TP_PRESSURE, &force))
404 force = 0.0; 406 force = 0.0;
405 return force; 407 return force;
406 } 408 }
407 409
410 bool GetScrollOffsets(const base::NativeEvent& native_event,
411 float* x_offset,
412 float* y_offset) {
413 return ui::ScrollFactory::GetInstance()->GetScrollOffsets(
414 *native_event, x_offset, y_offset);
415 }
416
408 base::NativeEvent CreateNoopEvent() { 417 base::NativeEvent CreateNoopEvent() {
409 static XEvent* noop = NULL; 418 static XEvent* noop = NULL;
410 if (!noop) { 419 if (!noop) {
411 noop = new XEvent(); 420 noop = new XEvent();
412 memset(noop, 0, sizeof(XEvent)); 421 memset(noop, 0, sizeof(XEvent));
413 noop->xclient.type = ClientMessage; 422 noop->xclient.type = ClientMessage;
414 noop->xclient.window = None; 423 noop->xclient.window = None;
415 noop->xclient.format = 8; 424 noop->xclient.format = 8;
416 DCHECK(!noop->xclient.display); 425 DCHECK(!noop->xclient.display);
417 } 426 }
418 // TODO(oshima): Remove ifdef once gtk is removed from views. 427 // TODO(oshima): Remove ifdef once gtk is removed from views.
419 #if defined(TOOLKIT_USES_GTK) 428 #if defined(TOOLKIT_USES_GTK)
420 NOTREACHED(); 429 NOTREACHED();
421 #else 430 #else
422 // Make sure we use atom from current xdisplay, which may 431 // Make sure we use atom from current xdisplay, which may
423 // change during the test. 432 // change during the test.
424 noop->xclient.message_type = XInternAtom( 433 noop->xclient.message_type = XInternAtom(
425 base::MessagePumpX::GetDefaultXDisplay(), 434 base::MessagePumpX::GetDefaultXDisplay(),
426 "noop", False); 435 "noop", False);
427 #endif 436 #endif
428 return noop; 437 return noop;
429 } 438 }
430 439
431 } // namespace ui 440 } // namespace ui
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698