blob: 80938beffb8f9fa4b96eb6a38d0ad8428ca05d6a (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
|
// Copyright 2014 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
#define UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
#include <bitset>
#include "base/compiler_specific.h"
#include "base/files/file_path.h"
#include "base/memory/scoped_ptr.h"
#include "base/message_loop/message_pump_libevent.h"
#include "ui/events/event_constants.h"
#include "ui/events/ozone/evdev/event_converter_evdev.h"
#include "ui/events/ozone/evdev/event_device_info.h"
#include "ui/events/ozone/evdev/events_ozone_evdev_export.h"
namespace ui {
class DeviceEventDispatcherEvdev;
class TouchEvent;
class TouchNoiseFinder;
struct InProgressTouchEvdev;
class EVENTS_OZONE_EVDEV_EXPORT TouchEventConverterEvdev
: public EventConverterEvdev {
public:
TouchEventConverterEvdev(int fd,
base::FilePath path,
int id,
InputDeviceType type,
const EventDeviceInfo& devinfo,
DeviceEventDispatcherEvdev* dispatcher);
~TouchEventConverterEvdev() override;
// EventConverterEvdev:
bool HasTouchscreen() const override;
gfx::Size GetTouchscreenSize() const override;
int GetTouchPoints() const override;
void OnEnabled() override;
void OnDisabled() override;
// Unsafe part of initialization.
virtual void Initialize(const EventDeviceInfo& info);
private:
friend class MockTouchEventConverterEvdev;
// Overidden from base::MessagePumpLibevent::Watcher.
void OnFileCanReadWithoutBlocking(int fd) override;
virtual void Reinitialize();
void ProcessMultitouchEvent(const input_event& input);
void EmulateMultitouchEvent(const input_event& input);
void ProcessKey(const input_event& input);
void ProcessAbs(const input_event& input);
void ProcessSyn(const input_event& input);
// Returns an EventType to dispatch for |touch|. Returns ET_UNKNOWN if an
// event should not be dispatched.
EventType GetEventTypeForTouch(const InProgressTouchEvdev& touch);
void ReportEvent(const InProgressTouchEvdev& event,
EventType event_type,
const base::TimeDelta& delta);
void ReportEvents(base::TimeDelta delta);
void UpdateTrackingId(int slot, int tracking_id);
void ReleaseTouches();
// Normalize pressure value to [0, 1].
float ScalePressure(int32_t value);
int NextTrackingId();
// Dispatcher for events.
DeviceEventDispatcherEvdev* dispatcher_;
// Set if we drop events in kernel (SYN_DROPPED) or in process.
bool dropped_events_ = false;
// Device has multitouch capability.
bool has_mt_ = false;
// Use BTN_LEFT instead of BT_TOUCH.
bool quirk_left_mouse_button_ = false;
// Pressure values.
int pressure_min_;
int pressure_max_; // Used to normalize pressure values.
// Input range for x-axis.
float x_min_tuxels_;
float x_num_tuxels_;
// Input range for y-axis.
float y_min_tuxels_;
float y_num_tuxels_;
// Number of touch points reported by driver
int touch_points_ = 0;
// Tracking id counter.
int next_tracking_id_ = 0;
// Touch point currently being updated from the /dev/input/event* stream.
size_t current_slot_ = 0;
// In-progress touch points.
std::vector<InProgressTouchEvdev> events_;
// Finds touch noise.
scoped_ptr<TouchNoiseFinder> touch_noise_finder_;
DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdev);
};
} // namespace ui
#endif // UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
|