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

Side by Side Diff: ui/events/x/touch_factory_x11.h

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

Powered by Google App Engine
This is Rietveld 408576698