forked from youtube/cobalt_sandbox
-
Notifications
You must be signed in to change notification settings - Fork 0
/
input.h
190 lines (155 loc) · 6.8 KB
/
input.h
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
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
// Copyright 2015 The Cobalt Authors. All Rights Reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// Module Overview: Starboard Input module
//
// Defines input events and associated data types.
#ifndef STARBOARD_INPUT_H_
#define STARBOARD_INPUT_H_
#include "starboard/configuration.h"
#include "starboard/export.h"
#include "starboard/key.h"
#include "starboard/time.h"
#include "starboard/types.h"
#include "starboard/window.h"
#ifdef __cplusplus
extern "C" {
#endif
// Identifies possible input subsystem types. The types of events that each
// device type produces correspond to |SbInputEventType| values.
typedef enum SbInputDeviceType {
// Input from a gesture-detection mechanism. Examples include Kinect,
// Wiimotes, etc...
//
// Produces |Move|, |Press| and |Unpress| events.
kSbInputDeviceTypeGesture,
// Input from a gamepad, following the layout provided in the W3C Web Gamepad
// API. [https://www.w3.org/TR/gamepad/]
//
// Produces |Move|, |Press| and |Unpress| events.
kSbInputDeviceTypeGamepad,
// Keyboard input from a traditional keyboard or game controller chatpad.
//
// Produces |Press| and |Unpress| events.
kSbInputDeviceTypeKeyboard,
// Input from a traditional mouse.
//
// Produces |Move|, |Press|, and |Unpress| events.
kSbInputDeviceTypeMouse,
// Input from a TV remote-control-style device.
//
// Produces |Press| and |Unpress| events.
kSbInputDeviceTypeRemote,
// Input from a single- or multi-touchscreen.
//
// Produces |Move|, |Press|, and |Unpress| events.
kSbInputDeviceTypeTouchScreen,
// Input from a touchpad that is not masquerading as a mouse.
//
// Produces |Move|, |Press|, and |Unpress| events.
kSbInputDeviceTypeTouchPad,
// Keyboard input from an on screen keyboard.
//
// Produces |Input| events.
kSbInputDeviceTypeOnScreenKeyboard,
} SbInputDeviceType;
// The action that an input event represents.
typedef enum SbInputEventType {
// Device Movement. In the case of |Mouse|, and perhaps |Gesture|, the
// movement tracks an absolute cursor position. In the case of |TouchPad|,
// only relative movements are provided.
kSbInputEventTypeMove,
// Key or button press activation. This could be a key on a keyboard, a button
// on a mouse or game controller, a push from a touch screen, or a gesture. An
// |Unpress| event is subsequently delivered when the |Press| event
// terminates, such as when the key/button/finger is raised. Injecting repeat
// presses is up to the client.
kSbInputEventTypePress,
// Key or button deactivation. The counterpart to the |Press| event, this
// event is sent when the key or button being pressed is released.
kSbInputEventTypeUnpress,
// Wheel movement. Provides relative movements of the |Mouse| wheel.
kSbInputEventTypeWheel,
// https://w3c.github.io/uievents/#event-type-input
kSbInputEventTypeInput,
} SbInputEventType;
// A 2-dimensional vector used to represent points and motion vectors.
typedef struct SbInputVector {
float x;
float y;
} SbInputVector;
// Event data for |kSbEventTypeInput| events.
typedef struct SbInputData {
#if SB_API_VERSION < 13
// The time that should be reported for this event. This is intended to
// facilitate calculation of time-sensitive information (e.g. velocity for
// kSbInputEventTypeMove). This may be set to 0 to have the relevant systems
// automatically set the timestamp. However, this may happen at a later time,
// so the relative time between events may not be preserved.
SbTimeMonotonic timestamp;
#endif // SB_API_VERSION < 13
// The window in which the input was generated.
SbWindow window;
// The type of input event that this represents.
SbInputEventType type;
// The type of device that generated this input event.
SbInputDeviceType device_type;
// An identifier that is unique among all connected devices.
int device_id;
// An identifier that indicates which keyboard key or mouse button was
// involved in this event, if any. All known keys for all devices are mapped
// to a single ID space, defined by the |SbKey| enum in |key.h|.
SbKey key;
// The character that corresponds to the key. For an external keyboard, this
// character also depends on the keyboard language. The value is |0| if there
// is no corresponding character.
wchar_t character;
// The location of the specified key, in cases where there are multiple
// instances of the button on the keyboard. For example, some keyboards have
// more than one "shift" key.
SbKeyLocation key_location;
// Key modifiers (e.g. |Ctrl|, |Shift|) held down during this input event.
unsigned int key_modifiers;
// The (x, y) coordinates of the persistent cursor controlled by this device.
// The value is |0| if this data is not applicable. For events with type
// kSbInputEventTypeMove and device_type kSbInputDeviceTypeGamepad, this field
// is interpreted as a stick position with the range [-1, 1], with positive
// values for the down and right direction.
SbInputVector position;
// The relative motion vector of this input. The value is |0| if this data is
// not applicable.
SbInputVector delta;
// The normalized pressure of the pointer input in the range of [0,1], where 0
// and 1 represent the minimum and maximum pressure the hardware is capable of
// detecting, respectively. Use NaN for devices that do not report pressure.
// This value is used for input events with device type mouse or touch screen.
float pressure;
// The (width, height) of the contact geometry of the pointer. This defines
// the size of the area under the pointer position. If (NaN, NaN) is
// specified, the value (0,0) will be used. This value is used for input
// events with device type mouse or touch screen.
SbInputVector size;
// The (x, y) angle in degrees, in the range of [-90, 90] of the pointer,
// relative to the z axis. Positive values are for tilt to the right (x), and
// towards the user (y). Use (NaN, NaN) for devices that do not report tilt.
// This value is used for input events with device type mouse or touch screen.
SbInputVector tilt;
// The text to input for events of type |Input|.
const char* input_text;
// Set to true if the input event is part of a composition event.
bool is_composing;
} SbInputData;
#ifdef __cplusplus
} // extern "C"
#endif
#endif // STARBOARD_INPUT_H_