Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/core
diff options
context:
space:
mode:
Diffstat (limited to 'source/core')
-rw-r--r--source/core/CMakeLists.txt2
-rw-r--r--source/core/StarInputEvent.cpp200
-rw-r--r--source/core/StarInputEvent.hpp312
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