From 6135d7c37be0c5ac28d1ac6914ccc8f0bb90d399 Mon Sep 17 00:00:00 2001 From: fallenoak Date: Thu, 16 Mar 2023 12:25:07 -0500 Subject: [PATCH] feat(event): wire up more mouse mode handling --- src/event/Input.cpp | 31 +++++++++++++++++++++++++++++-- src/event/Input.hpp | 5 +++++ src/event/Types.hpp | 6 ++++++ 3 files changed, 40 insertions(+), 2 deletions(-) diff --git a/src/event/Input.cpp b/src/event/Input.cpp index 66c4013..37e935a 100644 --- a/src/event/Input.cpp +++ b/src/event/Input.cpp @@ -325,8 +325,7 @@ void ProcessInput(const int32_t param[], OSINPUT id, int32_t* shutdown, EvtConte void CheckMouseModeState() { if (Input::s_mouseHoldButton) { if (Input::s_mouseHoldButton != (Input::s_mouseHoldButton & Input::s_buttonState)) { - // TODO - // EventSetMouseMode(0, 0); + EventSetMouseMode(MOUSE_MODE_NORMAL, 0); } } } @@ -355,6 +354,30 @@ void ConvertPosition(int32_t clientx, int32_t clienty, float* x, float* y) { *y = 1.0 - (static_cast(clienty) / static_cast(windowDim.bottom - windowDim.top)); } +void EventSetMouseMode(MOUSEMODE mode, uint32_t holdButton) { + STORM_ASSERT(mode < MOUSE_MODES); + STORM_VALIDATE(mode < MOUSE_MODES, ERROR_INVALID_PARAMETER); + + auto contextId = *reinterpret_cast(PropGet(PROP_EVENTCONTEXT)); + int32_t findMask; + auto context = TSingletonInstanceId::s_idTable.Ptr( + contextId, + 0, + &findMask + ); + + if (context) { + IEvtSetMouseMode(context, mode, holdButton); + + if (findMask != -1) { + TSingletonInstanceId::s_idTable.Unlock( + findMask & (INSTANCE_TABLE_SLOT_COUNT - 1), + findMask >= INSTANCE_TABLE_SLOT_COUNT + ); + } + } +} + uint32_t GenerateMouseFlags() { uint32_t flags = 0; @@ -454,6 +477,10 @@ int32_t IEvtInputProcess(EvtContext* context, int32_t* shutdown) { return v4; } +void IEvtSetMouseMode(EvtContext* context, MOUSEMODE mode, uint32_t holdButton) { + // TODO +} + const char* KeyCodeToString(KEY key) { static char charBuf[8]; diff --git a/src/event/Input.hpp b/src/event/Input.hpp index 36f855f..4bc145b 100644 --- a/src/event/Input.hpp +++ b/src/event/Input.hpp @@ -16,6 +16,7 @@ namespace Input { extern C2iVector s_currentMouse; extern uint32_t s_mouseHoldButton; extern MOUSEMODE s_mouseMode; + extern OS_MOUSE_MODE s_osMouseMode; extern int32_t s_numlockState; extern int32_t s_simulatedRightButtonClick; extern uint32_t s_metaKeyState; @@ -38,6 +39,8 @@ MOUSEBUTTON ConvertButtonNumberToMOUSEBUTTON(int32_t buttonNumber); void ConvertPosition(int32_t clientx, int32_t clienty, float* x, float* y); +void EventSetMouseMode(MOUSEMODE mode, uint32_t holdButton); + uint32_t GenerateMouseFlags(); const char* GetButtonName(int32_t button); @@ -46,6 +49,8 @@ void IEvtInputInitialize(); int32_t IEvtInputProcess(EvtContext* context, int32_t* shutdown); +void IEvtSetMouseMode(EvtContext* context, MOUSEMODE mode, uint32_t holdButton); + const char* KeyCodeToString(KEY key); int32_t OsInputGet(OSINPUT* id, int32_t* param0, int32_t* param1, int32_t* param2, int32_t* param3); diff --git a/src/event/Types.hpp b/src/event/Types.hpp index 3b2f0b7..a195799 100644 --- a/src/event/Types.hpp +++ b/src/event/Types.hpp @@ -209,6 +209,12 @@ enum OSINPUT { OS_INPUT_SHUTDOWN = 19 }; +enum OS_MOUSE_MODE { + OS_MOUSE_MODE_NORMAL = 0, + OS_MOUSE_MODE_RELATIVE = 1, + OS_MOUSE_MODES = 2, +}; + struct OSEVENT { OSINPUT id; int32_t param[4];