275 lines
3.6 KiB
C++
275 lines
3.6 KiB
C++
|
#ifndef STAR_INPUT_EVENT_HPP
|
||
|
#define STAR_INPUT_EVENT_HPP
|
||
|
|
||
|
#include "StarString.hpp"
|
||
|
#include "StarBiMap.hpp"
|
||
|
#include "StarVariant.hpp"
|
||
|
#include "StarVector.hpp"
|
||
|
|
||
|
namespace Star {
|
||
|
|
||
|
enum class Key : uint16_t {
|
||
|
Backspace,
|
||
|
Tab,
|
||
|
Clear,
|
||
|
Return,
|
||
|
Escape,
|
||
|
Space,
|
||
|
Exclaim,
|
||
|
QuotedBL,
|
||
|
Hash,
|
||
|
Dollar,
|
||
|
Ampersand,
|
||
|
Quote,
|
||
|
LeftParen,
|
||
|
RightParen,
|
||
|
Asterisk,
|
||
|
Plus,
|
||
|
Comma,
|
||
|
Minus,
|
||
|
Period,
|
||
|
Slash,
|
||
|
Zero,
|
||
|
One,
|
||
|
Two,
|
||
|
Three,
|
||
|
Four,
|
||
|
Five,
|
||
|
Six,
|
||
|
Seven,
|
||
|
Eight,
|
||
|
Nine,
|
||
|
Colon,
|
||
|
Semicolon,
|
||
|
Less,
|
||
|
Equals,
|
||
|
Greater,
|
||
|
Question,
|
||
|
At,
|
||
|
LeftBracket,
|
||
|
Backslash,
|
||
|
RightBracket,
|
||
|
Caret,
|
||
|
Underscore,
|
||
|
Backquote,
|
||
|
A,
|
||
|
B,
|
||
|
C,
|
||
|
D,
|
||
|
E,
|
||
|
F,
|
||
|
G,
|
||
|
H,
|
||
|
I,
|
||
|
J,
|
||
|
K,
|
||
|
L,
|
||
|
M,
|
||
|
N,
|
||
|
O,
|
||
|
P,
|
||
|
Q,
|
||
|
R,
|
||
|
S,
|
||
|
T,
|
||
|
U,
|
||
|
V,
|
||
|
W,
|
||
|
X,
|
||
|
Y,
|
||
|
Z,
|
||
|
Delete,
|
||
|
Kp0,
|
||
|
Kp1,
|
||
|
Kp2,
|
||
|
Kp3,
|
||
|
Kp4,
|
||
|
Kp5,
|
||
|
Kp6,
|
||
|
Kp7,
|
||
|
Kp8,
|
||
|
Kp9,
|
||
|
Kp_period,
|
||
|
Kp_divide,
|
||
|
Kp_multiply,
|
||
|
Kp_minus,
|
||
|
Kp_plus,
|
||
|
Kp_enter,
|
||
|
Kp_equals,
|
||
|
Up,
|
||
|
Down,
|
||
|
Right,
|
||
|
Left,
|
||
|
Insert,
|
||
|
Home,
|
||
|
End,
|
||
|
PageUp,
|
||
|
PageDown,
|
||
|
F1,
|
||
|
F2,
|
||
|
F3,
|
||
|
F4,
|
||
|
F5,
|
||
|
F6,
|
||
|
F7,
|
||
|
F8,
|
||
|
F9,
|
||
|
F10,
|
||
|
F11,
|
||
|
F12,
|
||
|
F13,
|
||
|
F14,
|
||
|
F15,
|
||
|
NumLock,
|
||
|
CapsLock,
|
||
|
ScrollLock,
|
||
|
RShift,
|
||
|
LShift,
|
||
|
RCtrl,
|
||
|
LCtrl,
|
||
|
RAlt,
|
||
|
LAlt,
|
||
|
RGui,
|
||
|
LGui,
|
||
|
AltGr,
|
||
|
Compose,
|
||
|
Help,
|
||
|
PrintScreen,
|
||
|
SysReq,
|
||
|
Pause,
|
||
|
Menu,
|
||
|
Power
|
||
|
};
|
||
|
extern EnumMap<Key> const KeyNames;
|
||
|
|
||
|
enum class KeyMod : uint16_t {
|
||
|
NoMod = 0x0000,
|
||
|
LShift = 0x0001,
|
||
|
RShift = 0x0002,
|
||
|
LCtrl = 0x0040,
|
||
|
RCtrl = 0x0080,
|
||
|
LAlt = 0x0100,
|
||
|
RAlt = 0x0200,
|
||
|
LGui = 0x0400,
|
||
|
RGui = 0x0800,
|
||
|
Num = 0x1000,
|
||
|
Caps = 0x2000,
|
||
|
AltGr = 0x4000
|
||
|
};
|
||
|
extern EnumMap<KeyMod> const KeyModNames;
|
||
|
|
||
|
KeyMod operator|(KeyMod a, KeyMod b);
|
||
|
KeyMod operator&(KeyMod a, KeyMod b);
|
||
|
KeyMod operator~(KeyMod a);
|
||
|
KeyMod& operator|=(KeyMod& a, KeyMod b);
|
||
|
KeyMod& operator&=(KeyMod& a, KeyMod b);
|
||
|
|
||
|
enum class MouseButton : uint8_t {
|
||
|
Left,
|
||
|
Middle,
|
||
|
Right,
|
||
|
FourthButton,
|
||
|
FifthButton
|
||
|
};
|
||
|
extern EnumMap<MouseButton> const MouseButtonNames;
|
||
|
|
||
|
enum class MouseWheel : uint8_t {
|
||
|
Up,
|
||
|
Down
|
||
|
};
|
||
|
extern EnumMap<MouseWheel> const MouseWheelNames;
|
||
|
|
||
|
typedef uint32_t ControllerId;
|
||
|
|
||
|
struct KeyDownEvent {
|
||
|
Key key;
|
||
|
KeyMod mods;
|
||
|
};
|
||
|
|
||
|
struct KeyUpEvent {
|
||
|
Key key;
|
||
|
};
|
||
|
|
||
|
struct TextInputEvent {
|
||
|
String text;
|
||
|
};
|
||
|
|
||
|
struct MouseMoveEvent {
|
||
|
Vec2I mouseMove;
|
||
|
Vec2I mousePosition;
|
||
|
};
|
||
|
|
||
|
struct MouseButtonDownEvent {
|
||
|
MouseButton mouseButton;
|
||
|
Vec2I mousePosition;
|
||
|
};
|
||
|
|
||
|
struct MouseButtonUpEvent {
|
||
|
MouseButton mouseButton;
|
||
|
Vec2I mousePosition;
|
||
|
};
|
||
|
|
||
|
struct MouseWheelEvent {
|
||
|
MouseWheel mouseWheel;
|
||
|
Vec2I mousePosition;
|
||
|
};
|
||
|
|
||
|
struct ControllerAxisEvent {
|
||
|
ControllerId controller;
|
||
|
unsigned controllerAxis;
|
||
|
float controllerAxisValue;
|
||
|
};
|
||
|
|
||
|
struct ControllerButtonDownEvent {
|
||
|
ControllerId controller;
|
||
|
unsigned controllerButton;
|
||
|
};
|
||
|
|
||
|
struct ControllerButtonUpEvent {
|
||
|
ControllerId controller;
|
||
|
unsigned controllerButton;
|
||
|
};
|
||
|
|
||
|
typedef Variant<
|
||
|
KeyDownEvent,
|
||
|
KeyUpEvent,
|
||
|
TextInputEvent,
|
||
|
MouseMoveEvent,
|
||
|
MouseButtonDownEvent,
|
||
|
MouseButtonUpEvent,
|
||
|
MouseWheelEvent,
|
||
|
ControllerAxisEvent,
|
||
|
ControllerButtonDownEvent,
|
||
|
ControllerButtonUpEvent>
|
||
|
InputEvent;
|
||
|
|
||
|
inline KeyMod operator|(KeyMod a, KeyMod b) {
|
||
|
return (KeyMod)((uint16_t)a | (uint16_t)b);
|
||
|
}
|
||
|
|
||
|
inline KeyMod operator&(KeyMod a, KeyMod b) {
|
||
|
return (KeyMod)((uint16_t)a & (uint16_t)b);
|
||
|
}
|
||
|
|
||
|
inline KeyMod operator~(KeyMod a) {
|
||
|
return (KeyMod) ~(uint16_t)a;
|
||
|
}
|
||
|
|
||
|
inline KeyMod& operator|=(KeyMod& a, KeyMod b) {
|
||
|
uint16_t a_cast = (uint16_t)a;
|
||
|
a_cast |= (uint16_t)b;
|
||
|
a = (KeyMod)a_cast;
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
inline KeyMod& operator&=(KeyMod& a, KeyMod b) {
|
||
|
uint16_t a_cast = (uint16_t)a;
|
||
|
a_cast &= (uint16_t)b;
|
||
|
a = (KeyMod)a_cast;
|
||
|
return a;
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
#endif
|