blob: d3677087134c8b7a06c288d4277482a14be8ea5d [file] [log] [blame]
Jeff Browne839a582010-04-22 18:58:52 -07001//
2// Copyright 2010 The Android Open Source Project
3//
4// Provides a pipe-based transport for native events in the NDK.
5//
6#define LOG_TAG "Input"
7
8//#define LOG_NDEBUG 0
9
10#include <ui/Input.h>
11
12namespace android {
13
14// class InputEvent
15
16void InputEvent::initialize(int32_t deviceId, int32_t nature) {
17 mDeviceId = deviceId;
18 mNature = nature;
19}
20
21// class KeyEvent
22
23void KeyEvent::initialize(
24 int32_t deviceId,
25 int32_t nature,
26 int32_t action,
27 int32_t flags,
28 int32_t keyCode,
29 int32_t scanCode,
30 int32_t metaState,
31 int32_t repeatCount,
32 nsecs_t downTime,
33 nsecs_t eventTime) {
34 InputEvent::initialize(deviceId, nature);
35 mAction = action;
36 mFlags = flags;
37 mKeyCode = keyCode;
38 mScanCode = scanCode;
39 mMetaState = metaState;
40 mRepeatCount = repeatCount;
41 mDownTime = downTime;
42 mEventTime = eventTime;
43}
44
45// class MotionEvent
46
47void MotionEvent::initialize(
48 int32_t deviceId,
49 int32_t nature,
50 int32_t action,
51 int32_t edgeFlags,
52 int32_t metaState,
53 float rawX,
54 float rawY,
55 float xPrecision,
56 float yPrecision,
57 nsecs_t downTime,
58 nsecs_t eventTime,
59 size_t pointerCount,
60 const int32_t* pointerIds,
61 const PointerCoords* pointerCoords) {
62 InputEvent::initialize(deviceId, nature);
63 mAction = action;
64 mEdgeFlags = edgeFlags;
65 mMetaState = metaState;
66 mRawX = rawX;
67 mRawY = rawY;
68 mXPrecision = xPrecision;
69 mYPrecision = yPrecision;
70 mDownTime = downTime;
71 mPointerIds.clear();
72 mPointerIds.appendArray(pointerIds, pointerCount);
73 mSampleEventTimes.clear();
74 mSamplePointerCoords.clear();
75 addSample(eventTime, pointerCoords);
76}
77
78void MotionEvent::addSample(
79 int64_t eventTime,
80 const PointerCoords* pointerCoords) {
81 mSampleEventTimes.push(eventTime);
82 mSamplePointerCoords.appendArray(pointerCoords, getPointerCount());
83}
84
85void MotionEvent::offsetLocation(float xOffset, float yOffset) {
86 if (xOffset != 0 || yOffset != 0) {
87 for (size_t i = 0; i < mSamplePointerCoords.size(); i++) {
88 PointerCoords& pointerCoords = mSamplePointerCoords.editItemAt(i);
89 pointerCoords.x += xOffset;
90 pointerCoords.y += yOffset;
91 }
92 }
93}
94
95} // namespace android
96
97// NDK APIs
98
99using android::InputEvent;
100using android::KeyEvent;
101using android::MotionEvent;
102
103int32_t input_event_get_type(const input_event_t* event) {
104 return reinterpret_cast<const InputEvent*>(event)->getType();
105}
106
107int32_t input_event_get_device_id(const input_event_t* event) {
108 return reinterpret_cast<const InputEvent*>(event)->getDeviceId();
109}
110
111int32_t input_event_get_nature(const input_event_t* event) {
112 return reinterpret_cast<const InputEvent*>(event)->getNature();
113}
114
115int32_t key_event_get_action(const input_event_t* key_event) {
116 return reinterpret_cast<const KeyEvent*>(key_event)->getAction();
117}
118
119int32_t key_event_get_flags(const input_event_t* key_event) {
120 return reinterpret_cast<const KeyEvent*>(key_event)->getFlags();
121}
122
123int32_t key_event_get_key_code(const input_event_t* key_event) {
124 return reinterpret_cast<const KeyEvent*>(key_event)->getKeyCode();
125}
126
127int32_t key_event_get_scan_code(const input_event_t* key_event) {
128 return reinterpret_cast<const KeyEvent*>(key_event)->getScanCode();
129}
130
131int32_t key_event_get_meta_state(const input_event_t* key_event) {
132 return reinterpret_cast<const KeyEvent*>(key_event)->getMetaState();
133}
134int32_t key_event_get_repeat_count(const input_event_t* key_event) {
135 return reinterpret_cast<const KeyEvent*>(key_event)->getRepeatCount();
136}
137
138int64_t key_event_get_down_time(const input_event_t* key_event) {
139 return reinterpret_cast<const KeyEvent*>(key_event)->getDownTime();
140}
141
142int64_t key_event_get_event_time(const input_event_t* key_event) {
143 return reinterpret_cast<const KeyEvent*>(key_event)->getEventTime();
144}
145
146int32_t motion_event_get_action(const input_event_t* motion_event) {
147 return reinterpret_cast<const MotionEvent*>(motion_event)->getAction();
148}
149
150int32_t motion_event_get_meta_state(const input_event_t* motion_event) {
151 return reinterpret_cast<const MotionEvent*>(motion_event)->getMetaState();
152}
153
154int32_t motion_event_get_edge_flags(const input_event_t* motion_event) {
155 return reinterpret_cast<const MotionEvent*>(motion_event)->getEdgeFlags();
156}
157
158int64_t motion_event_get_down_time(const input_event_t* motion_event) {
159 return reinterpret_cast<const MotionEvent*>(motion_event)->getDownTime();
160}
161
162int64_t motion_event_get_event_time(const input_event_t* motion_event) {
163 return reinterpret_cast<const MotionEvent*>(motion_event)->getEventTime();
164}
165
166float motion_event_get_x_precision(const input_event_t* motion_event) {
167 return reinterpret_cast<const MotionEvent*>(motion_event)->getXPrecision();
168}
169
170float motion_event_get_y_precision(const input_event_t* motion_event) {
171 return reinterpret_cast<const MotionEvent*>(motion_event)->getYPrecision();
172}
173
174size_t motion_event_get_pointer_count(const input_event_t* motion_event) {
175 return reinterpret_cast<const MotionEvent*>(motion_event)->getPointerCount();
176}
177
178int32_t motion_event_get_pointer_id(const input_event_t* motion_event, size_t pointer_index) {
179 return reinterpret_cast<const MotionEvent*>(motion_event)->getPointerId(pointer_index);
180}
181
182float motion_event_get_raw_x(const input_event_t* motion_event) {
183 return reinterpret_cast<const MotionEvent*>(motion_event)->getRawX();
184}
185
186float motion_event_get_raw_y(const input_event_t* motion_event) {
187 return reinterpret_cast<const MotionEvent*>(motion_event)->getRawY();
188}
189
190float motion_event_get_x(const input_event_t* motion_event, size_t pointer_index) {
191 return reinterpret_cast<const MotionEvent*>(motion_event)->getX(pointer_index);
192}
193
194float motion_event_get_y(const input_event_t* motion_event, size_t pointer_index) {
195 return reinterpret_cast<const MotionEvent*>(motion_event)->getY(pointer_index);
196}
197
198float motion_event_get_pressure(const input_event_t* motion_event, size_t pointer_index) {
199 return reinterpret_cast<const MotionEvent*>(motion_event)->getPressure(pointer_index);
200}
201
202float motion_event_get_size(const input_event_t* motion_event, size_t pointer_index) {
203 return reinterpret_cast<const MotionEvent*>(motion_event)->getSize(pointer_index);
204}
205
206size_t motion_event_get_history_size(const input_event_t* motion_event) {
207 return reinterpret_cast<const MotionEvent*>(motion_event)->getHistorySize();
208}
209
210int64_t motion_event_get_historical_event_time(input_event_t* motion_event,
211 size_t history_index) {
212 return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalEventTime(
213 history_index);
214}
215
216float motion_event_get_historical_x(input_event_t* motion_event, size_t pointer_index,
217 size_t history_index) {
218 return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalX(
219 pointer_index, history_index);
220}
221
222float motion_event_get_historical_y(input_event_t* motion_event, size_t pointer_index,
223 size_t history_index) {
224 return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalY(
225 pointer_index, history_index);
226}
227
228float motion_event_get_historical_pressure(input_event_t* motion_event, size_t pointer_index,
229 size_t history_index) {
230 return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalPressure(
231 pointer_index, history_index);
232}
233
234float motion_event_get_historical_size(input_event_t* motion_event, size_t pointer_index,
235 size_t history_index) {
236 return reinterpret_cast<const MotionEvent*>(motion_event)->getHistoricalSize(
237 pointer_index, history_index);
238}