mirror of
https://github.com/thunderbrewhq/thunderbrew
synced 2025-04-25 14:16:06 +03:00
feat(event): add os-specific mouse mode handling
This commit is contained in:
parent
73859890b1
commit
c2a5dd0568
@ -47,6 +47,7 @@ C2iVector Input::s_currentMouse;
|
||||
uint32_t Input::s_mouseHoldButton;
|
||||
MOUSEMODE Input::s_mouseMode;
|
||||
int32_t Input::s_numlockState;
|
||||
OS_MOUSE_MODE Input::s_osMouseMode;
|
||||
int32_t Input::s_simulatedRightButtonClick;
|
||||
uint32_t Input::s_metaKeyState;
|
||||
int32_t Input::s_queueHead;
|
||||
@ -142,6 +143,10 @@ void PostMouseDown(EvtContext* context, MOUSEBUTTON button, int32_t x, int32_t y
|
||||
IEvtQueueDispatch(context, EVENT_ID_MOUSEDOWN, &data);
|
||||
}
|
||||
|
||||
void PostMouseModeChanged(EvtContext* context, MOUSEMODE mode) {
|
||||
// TODO
|
||||
}
|
||||
|
||||
void PostMouseMove(EvtContext* context, int32_t x, int32_t y, int32_t time) {
|
||||
EVENT_DATA_MOUSE data;
|
||||
|
||||
@ -367,7 +372,7 @@ void EventSetMouseMode(MOUSEMODE mode, uint32_t holdButton) {
|
||||
);
|
||||
|
||||
if (context) {
|
||||
IEvtSetMouseMode(context, mode, holdButton);
|
||||
IEvtInputSetMouseMode(context, mode, holdButton);
|
||||
|
||||
if (findMask != -1) {
|
||||
TSingletonInstanceId<EvtContext, offsetof(EvtContext, m_id)>::s_idTable.Unlock(
|
||||
@ -477,8 +482,20 @@ int32_t IEvtInputProcess(EvtContext* context, int32_t* shutdown) {
|
||||
return v4;
|
||||
}
|
||||
|
||||
void IEvtSetMouseMode(EvtContext* context, MOUSEMODE mode, uint32_t holdButton) {
|
||||
// TODO
|
||||
void IEvtInputSetMouseMode(EvtContext* context, MOUSEMODE mode, uint32_t holdButton) {
|
||||
STORM_ASSERT(context);
|
||||
STORM_VALIDATE(context, ERROR_INVALID_PARAMETER);
|
||||
|
||||
if ((Input::s_buttonState & holdButton) == holdButton) {
|
||||
Input::s_mouseHoldButton = holdButton;
|
||||
|
||||
if (Input::s_mouseMode != mode) {
|
||||
OS_MOUSE_MODE osMouseMode = mode == MOUSE_MODE_NORMAL ? OS_MOUSE_MODE_NORMAL : OS_MOUSE_MODE_RELATIVE;
|
||||
OsInputSetMouseMode(osMouseMode);
|
||||
|
||||
PostMouseModeChanged(context, mode);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const char* KeyCodeToString(KEY key) {
|
||||
|
@ -49,7 +49,7 @@ void IEvtInputInitialize();
|
||||
|
||||
int32_t IEvtInputProcess(EvtContext* context, int32_t* shutdown);
|
||||
|
||||
void IEvtSetMouseMode(EvtContext* context, MOUSEMODE mode, uint32_t holdButton);
|
||||
void IEvtInputSetMouseMode(EvtContext* context, MOUSEMODE mode, uint32_t holdButton);
|
||||
|
||||
const char* KeyCodeToString(KEY key);
|
||||
|
||||
@ -61,6 +61,8 @@ bool OsInputIsUsingCocoaEventLoop();
|
||||
|
||||
void OsInputPostEvent(OSINPUT id, int32_t param0, int32_t param1, int32_t param2, int32_t param3);
|
||||
|
||||
void OsInputSetMouseMode(OS_MOUSE_MODE mode);
|
||||
|
||||
int32_t OsQueueGet(OSINPUT* id, int32_t* param0, int32_t* param1, int32_t* param2, int32_t* param3);
|
||||
|
||||
void OsQueuePut(OSINPUT id, int32_t param0, int32_t param1, int32_t param2, int32_t param3);
|
||||
|
@ -4,3 +4,7 @@ int32_t OsInputGet(OSINPUT* id, int32_t* param0, int32_t* param1, int32_t* param
|
||||
// TODO
|
||||
return 0;
|
||||
}
|
||||
|
||||
void OsInputSetMouseMode(OS_MOUSE_MODE mode) {
|
||||
// TODO
|
||||
}
|
||||
|
@ -21,3 +21,7 @@ int32_t OsInputGet(OSINPUT* id, int32_t* param0, int32_t* param1, int32_t* param
|
||||
|
||||
return OsQueueGet(id, param0, param1, param2, param3);
|
||||
}
|
||||
|
||||
void OsInputSetMouseMode(OS_MOUSE_MODE mode) {
|
||||
// TODO
|
||||
}
|
||||
|
@ -1,7 +1,16 @@
|
||||
#include "event/Input.hpp"
|
||||
#include "event/Window.hpp"
|
||||
#include <storm/Error.hpp>
|
||||
#include <windows.h>
|
||||
|
||||
void CenterMouse() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
void RestoreMouse() {
|
||||
// TODO
|
||||
}
|
||||
|
||||
int32_t OsInputGet(OSINPUT* id, int32_t* param0, int32_t* param1, int32_t* param2, int32_t* param3) {
|
||||
// TODO window rect comparisons
|
||||
|
||||
@ -48,3 +57,20 @@ int32_t OsInputGet(OSINPUT* id, int32_t* param0, int32_t* param1, int32_t* param
|
||||
OsQueueGet(id, param0, param1, param2, param3);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void OsInputSetMouseMode(OS_MOUSE_MODE mode) {
|
||||
STORM_ASSERT(mode < OS_MOUSE_MODES);
|
||||
STORM_VALIDATE(mode < OS_MOUSE_MODES, ERROR_INVALID_PARAMETER);
|
||||
|
||||
if (Input::s_osMouseMode == mode) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (mode == OS_MOUSE_MODE_NORMAL) {
|
||||
Input::s_osMouseMode = mode;
|
||||
RestoreMouse();
|
||||
} else if (mode == OS_MOUSE_MODE_RELATIVE) {
|
||||
Input::s_osMouseMode = mode;
|
||||
CenterMouse();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user