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

Side by Side Diff: ui/events/devices/x11/touch_factory_x11.h

Issue 1287103004: Sync ui/events to chromium @ https://codereview.chromium.org/1210203002 (Closed) Base URL: https://github.com/domokit/mojo.git@master
Patch Set: rebased Created 5 years, 4 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
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 #ifndef UI_EVENTS_PLATFORM_X11_TOUCH_FACTORY_X11_H_ 5 #ifndef UI_EVENTS_DEVICES_X11_TOUCH_FACTORY_X11_H_
6 #define UI_EVENTS_PLATFORM_X11_TOUCH_FACTORY_X11_H_ 6 #define UI_EVENTS_DEVICES_X11_TOUCH_FACTORY_X11_H_
7 7
8 #include <bitset> 8 #include <bitset>
9 #include <map> 9 #include <map>
10 #include <set> 10 #include <set>
11 #include <utility> 11 #include <utility>
12 #include <vector> 12 #include <vector>
13 13
14 #include "base/timer/timer.h" 14 #include "ui/events/devices/events_devices_export.h"
15 #include "ui/events/events_base_export.h"
16 #include "ui/gfx/sequential_id_generator.h" 15 #include "ui/gfx/sequential_id_generator.h"
17 16
18 template <typename T> 17 template <typename T> struct DefaultSingletonTraits;
19 struct DefaultSingletonTraits;
20 18
21 typedef unsigned long Cursor; 19 typedef unsigned long Cursor;
22 typedef unsigned long Window; 20 typedef unsigned long Window;
23 typedef struct _XDisplay Display; 21 typedef struct _XDisplay Display;
24 typedef union _XEvent XEvent; 22 typedef union _XEvent XEvent;
25 23
26 namespace ui { 24 namespace ui {
27 25
28 // Functions related to determining touch devices. 26 // Functions related to determining touch devices.
29 class EVENTS_BASE_EXPORT TouchFactory { 27 class EVENTS_DEVICES_EXPORT TouchFactory {
30 private: 28 private:
31 TouchFactory(); 29 TouchFactory();
32 ~TouchFactory(); 30 ~TouchFactory();
33 31
34 public: 32 public:
35 // Returns the TouchFactory singleton. 33 // Returns the TouchFactory singleton.
36 static TouchFactory* GetInstance(); 34 static TouchFactory* GetInstance();
37 35
38 // Sets the touch devices from the command line. 36 // Sets the touch devices from the command line.
39 static void SetTouchDeviceListFromCommandLine(); 37 static void SetTouchDeviceListFromCommandLine();
40 38
41 // Updates the list of devices. 39 // Updates the list of devices.
42 void UpdateDeviceList(Display* display); 40 void UpdateDeviceList(Display* display);
43 41
44 // Checks whether an XI2 event should be processed or not (i.e. if the event 42 // Checks whether an XI2 event should be processed or not (i.e. if the event
45 // originated from a device we are interested in). 43 // originated from a device we are interested in).
46 bool ShouldProcessXI2Event(XEvent* xevent); 44 bool ShouldProcessXI2Event(XEvent* xevent);
47 45
48 // Setup an X Window for XInput2 events. 46 // Setup an X Window for XInput2 events.
49 void SetupXI2ForXWindow(::Window xid); 47 void SetupXI2ForXWindow(::Window xid);
50 48
51 // Keeps a list of touch devices so that it is possible to determine if a 49 // Keeps a list of touch devices so that it is possible to determine if a
52 // pointer event is a touch-event or a mouse-event. The list is reset each 50 // pointer event is a touch-event or a mouse-event. The list is reset each
53 // time this is called. 51 // time this is called.
54 void SetTouchDeviceList(const std::vector<unsigned int>& devices); 52 void SetTouchDeviceList(const std::vector<int>& devices);
53
54 // Is the device ID valid?
55 bool IsValidDevice(int deviceid) const;
55 56
56 // Is the device a touch-device? 57 // Is the device a touch-device?
57 bool IsTouchDevice(unsigned int deviceid) const; 58 bool IsTouchDevice(int deviceid) const;
58 59
59 // Is the device a real multi-touch-device? (see doc. for |touch_device_list_| 60 // Is the device a real multi-touch-device? (see doc. for |touch_device_list_|
60 // below for more explanation.) 61 // below for more explanation.)
61 bool IsMultiTouchDevice(unsigned int deviceid) const; 62 bool IsMultiTouchDevice(int deviceid) const;
62 63
63 // Tries to find an existing slot ID mapping to tracking ID. Returns true 64 // Tries to find an existing slot ID mapping to tracking ID. Returns true
64 // if the slot is found and it is saved in |slot|, false if no such slot 65 // if the slot is found and it is saved in |slot|, false if no such slot
65 // can be found. 66 // can be found.
66 bool QuerySlotForTrackingID(uint32 tracking_id, int* slot); 67 bool QuerySlotForTrackingID(uint32 tracking_id, int* slot);
67 68
68 // Tries to find an existing slot ID mapping to tracking ID. If there 69 // Tries to find an existing slot ID mapping to tracking ID. If there
69 // isn't one already, allocates a new slot ID and sets up the mapping. 70 // isn't one already, allocates a new slot ID and sets up the mapping.
70 int GetSlotForTrackingID(uint32 tracking_id); 71 int GetSlotForTrackingID(uint32 tracking_id);
71 72
72 // Increases the number of times |ReleaseSlotForTrackingID| needs to be called
73 // on a given tracking id before it will actually be released.
74 void AcquireSlotForTrackingID(uint32 tracking_id);
75
76 // Releases the slot ID mapping to tracking ID. 73 // Releases the slot ID mapping to tracking ID.
77 void ReleaseSlotForTrackingID(uint32 tracking_id); 74 void ReleaseSlotForTrackingID(uint32 tracking_id);
78 75
79 // Whether any touch device is currently present and enabled. 76 // Whether any touch device is currently present and enabled.
80 bool IsTouchDevicePresent(); 77 bool IsTouchDevicePresent();
81 78
82 // Pairs of <vendor id, product id> of external touch screens. 79 // Pairs of <vendor id, product id> of external touch screens.
83 const std::set<std::pair<int, int>>& GetTouchscreenIds() const { 80 const std::set<std::pair<int, int> >& GetTouchscreenIds() const {
84 return touchscreen_ids_; 81 return touchscreen_ids_;
85 } 82 }
86 83
87 // Return maximum simultaneous touch points supported by device.
88 int GetMaxTouchPoints() const;
89
90 // Resets the TouchFactory singleton. 84 // Resets the TouchFactory singleton.
91 void ResetForTest(); 85 void ResetForTest();
92 86
93 // Sets up the device id in the list |devices| as multi-touch capable 87 // Sets up the device id in the list |devices| as multi-touch capable
94 // devices and enables touch events processing. This function is only 88 // devices and enables touch events processing. This function is only
95 // for test purpose, and it does not query from X server. 89 // for test purpose, and it does not query from X server.
96 void SetTouchDeviceForTest(const std::vector<unsigned int>& devices); 90 void SetTouchDeviceForTest(const std::vector<int>& devices);
97 91
98 // Sets up the device id in the list |devices| as pointer devices. 92 // Sets up the device id in the list |devices| as pointer devices.
99 // This function is only for test purpose, and it does not query from 93 // This function is only for test purpose, and it does not query from
100 // X server. 94 // X server.
101 void SetPointerDeviceForTest(const std::vector<unsigned int>& devices); 95 void SetPointerDeviceForTest(const std::vector<int>& devices);
102 96
103 private: 97 private:
104 // Requirement for Singleton 98 // Requirement for Singleton
105 friend struct DefaultSingletonTraits<TouchFactory>; 99 friend struct DefaultSingletonTraits<TouchFactory>;
106 100
107 void CacheTouchscreenIds(Display* display, int id); 101 void CacheTouchscreenIds(int id);
108 102
109 // NOTE: To keep track of touch devices, we currently maintain a lookup table 103 // NOTE: To keep track of touch devices, we currently maintain a lookup table
110 // to quickly decide if a device is a touch device or not. We also maintain a 104 // to quickly decide if a device is a touch device or not. We also maintain a
111 // list of the touch devices. Ideally, there will be only one touch device, 105 // list of the touch devices. Ideally, there will be only one touch device,
112 // and instead of having the lookup table and the list, there will be a single 106 // and instead of having the lookup table and the list, there will be a single
113 // identifier for the touch device. This can be completed after enough testing 107 // identifier for the touch device. This can be completed after enough testing
114 // on real touch devices. 108 // on real touch devices.
115 109
116 static const int kMaxDeviceNum = 128; 110 static const int kMaxDeviceNum = 128;
117 111
118 // A quick lookup table for determining if events from the pointer device 112 // A quick lookup table for determining if events from the pointer device
119 // should be processed. 113 // should be processed.
120 std::bitset<kMaxDeviceNum> pointer_device_lookup_; 114 std::bitset<kMaxDeviceNum> pointer_device_lookup_;
121 115
122 // A quick lookup table for determining if a device is a touch device. 116 // A quick lookup table for determining if a device is a touch device.
123 std::bitset<kMaxDeviceNum> touch_device_lookup_; 117 std::bitset<kMaxDeviceNum> touch_device_lookup_;
124 118
125 // Indicates whether touch events are explicitly disabled. 119 // Indicates whether touch events are explicitly disabled.
126 bool touch_events_disabled_; 120 bool touch_events_disabled_;
127 121
128 // The list of touch devices. For testing/debugging purposes, a single-pointer 122 // The list of touch devices. For testing/debugging purposes, a single-pointer
129 // device (mouse or touch screen without sufficient X/driver support for MT) 123 // device (mouse or touch screen without sufficient X/driver support for MT)
130 // can sometimes be treated as a touch device. The key in the map represents 124 // can sometimes be treated as a touch device. The key in the map represents
131 // the device id, and the value represents if the device is multi-touch 125 // the device id, and the value represents if the device is multi-touch
132 // capable. 126 // capable.
133 std::map<int, bool> touch_device_list_; 127 std::map<int, bool> touch_device_list_;
134 128
135 // Touch screen <vid, pid>s. 129 // Touch screen <vid, pid>s.
136 std::set<std::pair<int, int>> touchscreen_ids_; 130 std::set<std::pair<int, int> > touchscreen_ids_;
137
138 // Maps from a tracking id to the number of times |ReleaseSlotForTrackingID|
139 // must be called before the tracking id is released.
140 std::map<uint32, int> tracking_id_refcounts_;
141
142 // Maximum simultaneous touch points supported by device. In the case of
143 // devices with multiple digitizers (e.g. multiple touchscreens), the value
144 // is the maximum of the set of maximum supported contacts by each individual
145 // digitizer.
146 int max_touch_points_;
147 131
148 // Device ID of the virtual core keyboard. 132 // Device ID of the virtual core keyboard.
149 int virtual_core_keyboard_device_; 133 int virtual_core_keyboard_device_;
150 134
151 SequentialIDGenerator id_generator_; 135 SequentialIDGenerator id_generator_;
152 136
137 // Associate each device ID with its master device ID.
138 std::map<int, int> device_master_id_list_;
139
153 DISALLOW_COPY_AND_ASSIGN(TouchFactory); 140 DISALLOW_COPY_AND_ASSIGN(TouchFactory);
154 }; 141 };
155 142
156 } // namespace ui 143 } // namespace ui
157 144
158 #endif // UI_EVENTS_PLATFORM_X11_TOUCH_FACTORY_X11_H_ 145 #endif // UI_EVENTS_DEVICES_X11_TOUCH_FACTORY_X11_H_
OLDNEW
« no previous file with comments | « ui/events/devices/x11/device_list_cache_x11.cc ('k') | ui/events/devices/x11/touch_factory_x11.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698