Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / ui / events / ozone / evdev / touch_event_converter_evdev.h
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.
4
5 #ifndef UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
6 #define UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_
7
8 #include <bitset>
9
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"
17
18 namespace ui {
19
20 class TouchEvent;
21
22 class EVENTS_OZONE_EVDEV_EXPORT TouchEventConverterEvdev
23     : public EventConverterEvdev {
24  public:
25   enum {
26     MAX_FINGERS = 11
27   };
28   TouchEventConverterEvdev(int fd,
29                            base::FilePath path,
30                            int id,
31                            const EventDeviceInfo& info,
32                            const EventDispatchCallback& dispatch);
33   ~TouchEventConverterEvdev() override;
34
35   // EventConverterEvdev:
36   bool HasTouchscreen() const override;
37   gfx::Size GetTouchscreenSize() const override;
38   bool IsInternal() const override;
39
40  private:
41   friend class MockTouchEventConverterEvdev;
42
43   // Unsafe part of initialization.
44   void Init(const EventDeviceInfo& info);
45
46   // Overidden from base::MessagePumpLibevent::Watcher.
47   void OnFileCanReadWithoutBlocking(int fd) override;
48
49   virtual bool Reinitialize();
50
51   void ProcessInputEvent(const input_event& input);
52   void ProcessAbs(const input_event& input);
53   void ProcessSyn(const input_event& input);
54
55   void ReportEvents(base::TimeDelta delta);
56
57   // Callback for dispatching events.
58   EventDispatchCallback callback_;
59
60   // Set if we have seen a SYN_DROPPED and not yet re-synced with the device.
61   bool syn_dropped_;
62
63   // Set if this is a type A device (uses SYN_MT_REPORT).
64   bool is_type_a_;
65
66   // Pressure values.
67   int pressure_min_;
68   int pressure_max_;  // Used to normalize pressure values.
69
70   // Input range for x-axis.
71   float x_min_tuxels_;
72   float x_num_tuxels_;
73
74   // Input range for y-axis.
75   float y_min_tuxels_;
76   float y_num_tuxels_;
77
78   // Output range for x-axis.
79   float x_min_pixels_;
80   float x_num_pixels_;
81
82   // Output range for y-axis.
83   float y_min_pixels_;
84   float y_num_pixels_;
85
86   // Size of the touchscreen as reported by the driver.
87   gfx::Size native_size_;
88
89   // Touch point currently being updated from the /dev/input/event* stream.
90   int current_slot_;
91
92   // Bit field tracking which in-progress touch points have been modified
93   // without a syn event.
94   std::bitset<MAX_FINGERS> altered_slots_;
95
96   struct InProgressEvents {
97     InProgressEvents();
98
99     float x_;
100     float y_;
101     int id_;  // Device reported "unique" touch point id; -1 means not active
102     int finger_;  // "Finger" id starting from 0; -1 means not active
103
104     EventType type_;
105     float radius_x_;
106     float radius_y_;
107     float pressure_;
108   };
109
110   // In-progress touch points.
111   InProgressEvents events_[MAX_FINGERS];
112
113   bool is_internal_;
114
115   DISALLOW_COPY_AND_ASSIGN(TouchEventConverterEvdev);
116 };
117
118 }  // namespace ui
119
120 #endif  // UI_EVENTS_OZONE_EVDEV_TOUCH_EVENT_CONVERTER_EVDEV_H_