diff options
Diffstat (limited to 'source/core')
-rw-r--r-- | source/core/CMakeLists.txt | 2 | ||||
-rw-r--r-- | source/core/StarInputEvent.cpp | 200 | ||||
-rw-r--r-- | source/core/StarInputEvent.hpp | 312 |
3 files changed, 514 insertions, 0 deletions
diff --git a/source/core/CMakeLists.txt b/source/core/CMakeLists.txt index cf64c3a..08701d7 100644 --- a/source/core/CMakeLists.txt +++ b/source/core/CMakeLists.txt @@ -40,6 +40,7 @@ SET (star_core_HEADERS StarIdMap.hpp StarImage.hpp StarImageProcessing.hpp + StarInputEvent.hpp StarInterpolation.hpp StarRefPtr.hpp StarIterator.hpp @@ -142,6 +143,7 @@ SET (star_core_SOURCES StarIODevice.cpp StarImage.cpp StarImageProcessing.cpp + StarInputEvent.cpp StarJson.cpp StarJsonBuilder.cpp StarJsonExtra.cpp diff --git a/source/core/StarInputEvent.cpp b/source/core/StarInputEvent.cpp new file mode 100644 index 0000000..7d6835b --- /dev/null +++ b/source/core/StarInputEvent.cpp @@ -0,0 +1,200 @@ +#include "StarInputEvent.hpp" + +namespace Star { + +EnumMap<Key> const KeyNames{ + {Key::Backspace, "Backspace"}, + {Key::Tab, "Tab"}, + {Key::Clear, "Clear"}, + {Key::Return, "Return"}, + {Key::Escape, "Esc"}, + {Key::Space, "Space"}, + {Key::Exclaim, "!"}, + {Key::QuotedBL, "\""}, + {Key::Hash, "#"}, + {Key::Dollar, "$"}, + {Key::Ampersand, "&"}, + {Key::Quote, "\'"}, + {Key::LeftParen, "("}, + {Key::RightParen, ")"}, + {Key::Asterisk, "*"}, + {Key::Plus, "+"}, + {Key::Comma, ","}, + {Key::Minus, "-"}, + {Key::Period, "."}, + {Key::Slash, "/"}, + {Key::Zero, "0"}, + {Key::One, "1"}, + {Key::Two, "2"}, + {Key::Three, "3"}, + {Key::Four, "4"}, + {Key::Five, "5"}, + {Key::Six, "6"}, + {Key::Seven, "7"}, + {Key::Eight, "8"}, + {Key::Nine, "9"}, + {Key::Colon, ":"}, + {Key::Semicolon, ";"}, + {Key::Less, "<"}, + {Key::Equals, "="}, + {Key::Greater, ">"}, + {Key::Question, "?"}, + {Key::At, "@"}, + {Key::LeftBracket, "["}, + {Key::Backslash, "\\"}, + {Key::RightBracket, "]"}, + {Key::Caret, "^"}, + {Key::Underscore, "_"}, + {Key::Backquote, "`"}, + {Key::A, "A"}, + {Key::B, "B"}, + {Key::C, "C"}, + {Key::D, "D"}, + {Key::E, "E"}, + {Key::F, "F"}, + {Key::G, "G"}, + {Key::H, "H"}, + {Key::I, "I"}, + {Key::J, "J"}, + {Key::K, "K"}, + {Key::L, "L"}, + {Key::M, "M"}, + {Key::N, "N"}, + {Key::O, "O"}, + {Key::P, "P"}, + {Key::Q, "Q"}, + {Key::R, "R"}, + {Key::S, "S"}, + {Key::T, "T"}, + {Key::U, "U"}, + {Key::V, "V"}, + {Key::W, "W"}, + {Key::X, "X"}, + {Key::Y, "Y"}, + {Key::Z, "Z"}, + {Key::Delete, "Del"}, + {Key::Kp0, "Kp0"}, + {Key::Kp1, "Kp1"}, + {Key::Kp2, "Kp2"}, + {Key::Kp3, "Kp3"}, + {Key::Kp4, "Kp4"}, + {Key::Kp5, "Kp5"}, + {Key::Kp6, "Kp6"}, + {Key::Kp7, "Kp7"}, + {Key::Kp8, "Kp8"}, + {Key::Kp9, "Kp9"}, + {Key::Kp_period, "Kp_period"}, + {Key::Kp_divide, "Kp_divide"}, + {Key::Kp_multiply, "Kp_multiply"}, + {Key::Kp_minus, "Kp_minus"}, + {Key::Kp_plus, "Kp_plus"}, + {Key::Kp_enter, "Kp_enter"}, + {Key::Kp_equals, "Kp_equals"}, + {Key::Up, "Up"}, + {Key::Down, "Down"}, + {Key::Right, "Right"}, + {Key::Left, "Left"}, + {Key::Insert, "Ins"}, + {Key::Home, "Home"}, + {Key::End, "End"}, + {Key::PageUp, "PageUp"}, + {Key::PageDown, "PageDown"}, + {Key::F1, "F1"}, + {Key::F2, "F2"}, + {Key::F3, "F3"}, + {Key::F4, "F4"}, + {Key::F5, "F5"}, + {Key::F6, "F6"}, + {Key::F7, "F7"}, + {Key::F8, "F8"}, + {Key::F9, "F9"}, + {Key::F10, "F10"}, + {Key::F11, "F11"}, + {Key::F12, "F12"}, + {Key::F13, "F13"}, + {Key::F14, "F14"}, + {Key::F15, "F15"}, + {Key::NumLock, "NumLock"}, + {Key::CapsLock, "CapsLock"}, + {Key::ScrollLock, "ScrollLock"}, + {Key::RShift, "RShift"}, + {Key::LShift, "LShift"}, + {Key::RCtrl, "RCtrl"}, + {Key::LCtrl, "LCtrl"}, + {Key::RAlt, "RAlt"}, + {Key::LAlt, "LAlt"}, + {Key::RGui, "RGui"}, + {Key::LGui, "LGui"}, + {Key::AltGr, "AltGr"}, + {Key::Compose, "Compose"}, + {Key::Help, "Help"}, + {Key::PrintScreen, "PrintScreen"}, + {Key::SysReq, "SysReq"}, + {Key::Pause, "Pause"}, + {Key::Menu, "Menu"}, + {Key::Power, "Power"} +}; + +EnumMap<KeyMod> const KeyModNames{ + {KeyMod::NoMod, "NoMod"}, + {KeyMod::LShift, "LShift"}, + {KeyMod::RShift, "RShift"}, + {KeyMod::LCtrl, "LCtrl"}, + {KeyMod::RCtrl, "RCtrl"}, + {KeyMod::LAlt, "LAlt"}, + {KeyMod::RAlt, "RAlt"}, + {KeyMod::LGui, "LMeta"}, + {KeyMod::RGui, "RMeta"}, + {KeyMod::Num, "Num"}, + {KeyMod::Caps, "Caps"}, + {KeyMod::AltGr, "AltGr"} +}; + +EnumMap<MouseButton> const MouseButtonNames{ + {MouseButton::Left, "MouseLeft"}, + {MouseButton::Middle, "MouseMiddle"}, + {MouseButton::Right, "MouseRight"}, + {MouseButton::FourthButton, "MouseFourth"}, + {MouseButton::FifthButton, "MouseFifth"} +}; + +EnumMap<MouseWheel> const MouseWheelNames{ + {MouseWheel::Up, "MouseWheelUp"}, + {MouseWheel::Down, "MouseWheelDown"} +}; + +EnumMap<ControllerAxis> const ControllerAxisNames{ + {ControllerAxis::LeftX, "LeftX"}, + {ControllerAxis::LeftY, "LeftY"}, + {ControllerAxis::RightX, "RightX"}, + {ControllerAxis::RightY, "RightY"}, + {ControllerAxis::TriggerLeft, "TriggerLeft"}, + {ControllerAxis::TriggerRight, "TriggerRight"}, +}; + +EnumMap<ControllerButton> const ControllerButtonNames{ + {ControllerButton::A, "A"}, + {ControllerButton::B, "B"}, + {ControllerButton::X, "X"}, + {ControllerButton::Y, "Y"}, + {ControllerButton::Back, "Back"}, + {ControllerButton::Guide, "Guide"}, + {ControllerButton::Start, "Start"}, + {ControllerButton::LeftStick, "LeftStick"}, + {ControllerButton::RightStick, "RightStick"}, + {ControllerButton::LeftShoulder, "LeftShoulder"}, + {ControllerButton::RightShoulder, "RightShoulder"}, + {ControllerButton::DPadUp, "DPadUp"}, + {ControllerButton::DPadDown, "DPadDown"}, + {ControllerButton::DPadLeft, "DPadLeft"}, + {ControllerButton::DPadRight, "DPadRight"}, + {ControllerButton::Misc1, "Misc1"}, + {ControllerButton::Paddle1, "Paddle1"}, + {ControllerButton::Paddle2, "Paddle2"}, + {ControllerButton::Paddle3, "Paddle3"}, + {ControllerButton::Paddle4, "Paddle4"}, + {ControllerButton::Touchpad, "Touchpad"}, + {ControllerButton::Invalid, "Invalid"} +}; + +} diff --git a/source/core/StarInputEvent.hpp b/source/core/StarInputEvent.hpp new file mode 100644 index 0000000..896b192 --- /dev/null +++ b/source/core/StarInputEvent.hpp @@ -0,0 +1,312 @@ +#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, + Scroll = 0x8000 +}; +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; + +enum class ControllerAxis : uint8_t { + LeftX, + LeftY, + RightX, + RightY, + TriggerLeft, + TriggerRight, + Invalid = 255 +}; +extern EnumMap<ControllerAxis> const ControllerAxisNames; + +enum class ControllerButton : uint8_t { + A, + B, + X, + Y, + Back, + Guide, + Start, + LeftStick, + RightStick, + LeftShoulder, + RightShoulder, + DPadUp, + DPadDown, + DPadLeft, + DPadRight, + Misc1, + Paddle1, + Paddle2, + Paddle3, + Paddle4, + Touchpad, + Invalid = 255 +}; +extern EnumMap<ControllerButton> const ControllerButtonNames; + +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; + ControllerAxis controllerAxis; + float controllerAxisValue; +}; + +struct ControllerButtonDownEvent { + ControllerId controller; + ControllerButton controllerButton; +}; + +struct ControllerButtonUpEvent { + ControllerId controller; + ControllerButton 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 |