1 // Copyright 2014 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.
5 #ifndef UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
6 #define UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
10 #include "base/compiler_specific.h"
11 #include "base/files/file_path.h"
12 #include "base/message_loop/message_pump_libevent.h"
13 #include "ui/events/event_constants.h"
14 #include "ui/events/ozone/evdev/event_converter_evdev.h"
15 #include "ui/events/ozone/evdev/event_device_info.h"
16 #include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
22 class EVENTS_OZONE_EVDEV_EXPORT TouchEventConverterEvdev
23 : public EventConverterEvdev
{
28 TouchEventConverterEvdev(int fd
,
32 const EventDispatchCallback
& dispatch
);
33 ~TouchEventConverterEvdev() override
;
35 // EventConverterEvdev:
36 bool HasTouchscreen() const override
;
37 gfx::Size
GetTouchscreenSize() const override
;
39 // Unsafe part of initialization.
40 virtual void Initialize(const EventDeviceInfo
& info
);
43 friend class MockTouchEventConverterEvdev
;
45 struct InProgressEvents
{
50 int id_
; // Device reported "unique" touch point id; -1 means not active
51 int finger_
; // "Finger" id starting from 0; -1 means not active
59 // Overidden from base::MessagePumpLibevent::Watcher.
60 void OnFileCanReadWithoutBlocking(int fd
) override
;
62 virtual bool Reinitialize();
64 void ProcessInputEvent(const input_event
& input
);
65 void ProcessAbs(const input_event
& input
);
66 void ProcessSyn(const input_event
& input
);
68 void ReportEvent(int touch_id
,
69 const InProgressEvents
& event
, const base::TimeDelta
& delta
);
70 void ReportEvents(base::TimeDelta delta
);
72 // Callback for dispatching events.
73 EventDispatchCallback callback_
;
75 // Set if we have seen a SYN_DROPPED and not yet re-synced with the device.
78 // Set if this is a type A device (uses SYN_MT_REPORT).
83 int pressure_max_
; // Used to normalize pressure values.
85 // Input range for x-axis.
89 // Input range for y-axis.
93 // Size of the touchscreen as reported by the driver.
94 gfx::Size native_size_
;
96 // Touch point currently being updated from the /dev/input/event* stream.
99 // Bit field tracking which in-progress touch points have been modified
100 // without a syn event.
101 std::bitset
<MAX_FINGERS
> altered_slots_
;
103 // In-progress touch points.
104 InProgressEvents events_
[MAX_FINGERS
];
106 DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdev
);
111 #endif // UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_