1 /*
2  * Copyright (c) 2023 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #ifndef FOUNDATION_ACE_ADAPTER_PREVIEW_EXTERNAL_MULTIMODALINPUT_POINTER_EVENT_H
17 #define FOUNDATION_ACE_ADAPTER_PREVIEW_EXTERNAL_MULTIMODALINPUT_POINTER_EVENT_H
18 
19 #include <list>
20 #include <memory>
21 #include <set>
22 #include <array>
23 #include <vector>
24 #include <optional>
25 #include <functional>
26 
27 #include "adapter/preview/external/multimodalinput/common_type.h"
28 
29 namespace OHOS {
30 namespace MMI {
31 
32 enum class TouchType : size_t {
33     DOWN = 0,
34     UP,
35     MOVE,
36     CANCEL,
37     PULL_DOWN,
38     PULL_UP,
39     PULL_MOVE,
40     PULL_IN_WINDOW,
41     PULL_OUT_WINDOW,
42     UNKNOWN,
43 };
44 
45 struct TouchPoint final {
46     int32_t id = 0;
47     float x = 0.0f;
48     float y = 0.0f;
49     float screenX = 0.0f;
50     float screenY = 0.0f;
51     TimeStamp downTime;
52     double size = 0.0;
53     float force = 0.0f;
54     std::optional<float> tiltX;
55     std::optional<float> tiltY;
56     SourceTool sourceTool = SourceTool::UNKNOWN;
57     bool isPressed = false;
58 };
59 
60 class PointerEvent {
61 public:
62     PointerEvent() = default;
63     ~PointerEvent() = default;
64 
65 public:
66     int32_t id = 0;
67     float x = 0.0f;
68     float y = 0.0f;
69     float screenX = 0.0f;
70     float screenY = 0.0f;
71     TouchType type = TouchType::UNKNOWN;
72     TouchType pullType = TouchType::UNKNOWN;
73     TimeStamp time;
74     double size = 0.0;
75     float force = 0.0f;
76     std::optional<float> tiltX;
77     std::optional<float> tiltY;
78     int64_t deviceId = 0;
79     int32_t sourceType = 0; // SOURCE_TYPE_UNKNOWN == SourceType::NONE == 0
80     SourceTool sourceTool = SourceTool::UNKNOWN;
81     std::vector<TouchPoint> pointers;
82 
83     // pointerAction_
84     static constexpr int32_t POINTER_ACTION_UNKNOWN = 0;
85     static constexpr int32_t POINTER_ACTION_CANCEL = 1;
86     static constexpr int32_t POINTER_ACTION_DOWN = 2;
87     static constexpr int32_t POINTER_ACTION_MOVE = 3;
88     static constexpr int32_t POINTER_ACTION_UP = 4;
89     static constexpr int32_t POINTER_ACTION_AXIS_BEGIN = 5;
90     static constexpr int32_t POINTER_ACTION_AXIS_UPDATE = 6;
91     static constexpr int32_t POINTER_ACTION_AXIS_END = 7;
92     static constexpr int32_t POINTER_ACTION_BUTTON_DOWN = 8;
93     static constexpr int32_t POINTER_ACTION_BUTTON_UP = 9;
94     static constexpr int32_t POINTER_ACTION_ENTER_WINDOW = 10;
95     static constexpr int32_t POINTER_ACTION_LEAVE_WINDOW = 11;
96     static constexpr int32_t POINTER_ACTION_PULL_DOWN = 12;
97     static constexpr int32_t POINTER_ACTION_PULL_MOVE = 13;
98     static constexpr int32_t POINTER_ACTION_PULL_UP = 14;
99     static constexpr int32_t POINTER_ACTION_PULL_IN_WINDOW = 15;
100     static constexpr int32_t POINTER_ACTION_PULL_OUT_WINDOW = 16;
101     static constexpr int32_t POINTER_ACTION_SWIPE_BEGIN = 17;
102     static constexpr int32_t POINTER_ACTION_SWIPE_UPDATE = 18;
103     static constexpr int32_t POINTER_ACTION_SWIPE_END = 19;
104     static constexpr int32_t POINTER_ACTION_ROTATE_BEGIN = 20;
105     static constexpr int32_t POINTER_ACTION_ROTATE_UPDATE = 21;
106     static constexpr int32_t POINTER_ACTION_ROTATE_END = 22;
107 
108     // sourceType
109     static constexpr int32_t SOURCE_TYPE_UNKNOWN = 0;
110     static constexpr int32_t SOURCE_TYPE_MOUSE = 1;
111     static constexpr int32_t SOURCE_TYPE_TOUCHSCREEN = 2;
112     static constexpr int32_t SOURCE_TYPE_TOUCHPAD = 3;
113     static constexpr int32_t SOURCE_TYPE_JOYSTICK = 4;
114 
115     // buttonId_
116     static constexpr int32_t BUTTON_NONE = -1;
117     static constexpr int32_t MOUSE_BUTTON_LEFT = 0;
118     static constexpr int32_t MOUSE_BUTTON_RIGHT = 1;
119     static constexpr int32_t MOUSE_BUTTON_MIDDLE = 2;
120     static constexpr int32_t MOUSE_BUTTON_SIDE = 3;
121     static constexpr int32_t MOUSE_BUTTON_EXTRA = 4;
122     static constexpr int32_t MOUSE_BUTTON_FORWARD = 5;
123     static constexpr int32_t MOUSE_BUTTON_BACK = 6;
124     static constexpr int32_t MOUSE_BUTTON_TASK = 7;
125 
126     enum AxisType {
127         AXIS_TYPE_UNKNOWN,
128         AXIS_TYPE_SCROLL_VERTICAL,
129         AXIS_TYPE_SCROLL_HORIZONTAL,
130         AXIS_TYPE_PINCH,
131         AXIS_TYPE_ROTATE,
132         AXIS_TYPE_ABS_X,
133         AXIS_TYPE_ABS_Y,
134         AXIS_TYPE_ABS_Z,
135         AXIS_TYPE_ABS_RZ,
136         AXIS_TYPE_ABS_GAS,
137         AXIS_TYPE_ABS_BRAKE,
138         AXIS_TYPE_ABS_HAT0X,
139         AXIS_TYPE_ABS_HAT0Y,
140         AXIS_TYPE_ABS_THROTTLE,
141         AXIS_TYPE_MAX
142     };
143 
144     int32_t pointerAction_ { POINTER_ACTION_UNKNOWN };
145     int32_t buttonId_ { -1 };
146     std::set<int32_t> pressedButtons_;
147     std::array<double, AXIS_TYPE_MAX> axisValues_ {};
148     int32_t targetDisplayId_ { -1 }; // InputEvent
149 };
150 
151 } // namespace MMI
152 } // namespace OHOS
153 #endif // FOUNDATION_ACE_ADAPTER_PREVIEW_EXTERNAL_MULTIMODALINPUT_POINTER_EVENT_H
154