mirror of
https://github.com/scratchfoundation/bgfx.git
synced 2025-03-22 21:06:42 -04:00
Added mouse lock.
This commit is contained in:
parent
165e98c60b
commit
f513da8b67
6 changed files with 75 additions and 0 deletions
|
@ -159,6 +159,7 @@ namespace entry
|
||||||
|
|
||||||
void setWindowSize(uint32_t _width, uint32_t _height);
|
void setWindowSize(uint32_t _width, uint32_t _height);
|
||||||
void toggleWindowFrame();
|
void toggleWindowFrame();
|
||||||
|
void setMouseLock(bool _lock);
|
||||||
|
|
||||||
} // namespace entry
|
} // namespace entry
|
||||||
|
|
||||||
|
|
|
@ -32,6 +32,10 @@ namespace entry
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMouseLock(bool _lock)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace entry
|
} // namespace entry
|
||||||
|
|
||||||
extern int _main_(int _argc, char** _argv);
|
extern int _main_(int _argc, char** _argv);
|
||||||
|
|
|
@ -302,6 +302,10 @@ namespace entry
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMouseLock(bool _lock)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace entry
|
} // namespace entry
|
||||||
|
|
||||||
int main(int _argc, char** _argv)
|
int main(int _argc, char** _argv)
|
||||||
|
|
|
@ -44,6 +44,10 @@ namespace entry
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMouseLock(bool _lock)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace entry
|
} // namespace entry
|
||||||
|
|
||||||
extern int _main_(int _argc, char** _argv);
|
extern int _main_(int _argc, char** _argv);
|
||||||
|
|
|
@ -236,6 +236,10 @@ namespace entry
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMouseLock(bool _lock)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace entry
|
} // namespace entry
|
||||||
|
|
||||||
int main(int _argc, char** _argv)
|
int main(int _argc, char** _argv)
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
|
|
||||||
#define WM_USER_SET_WINDOW_SIZE (WM_USER+0)
|
#define WM_USER_SET_WINDOW_SIZE (WM_USER+0)
|
||||||
#define WM_USER_TOGGLE_WINDOW_FRAME (WM_USER+1)
|
#define WM_USER_TOGGLE_WINDOW_FRAME (WM_USER+1)
|
||||||
|
#define WM_USER_MOUSE_LOCK (WM_USER+2)
|
||||||
|
|
||||||
extern int _main_(int _argc, char** _argv);
|
extern int _main_(int _argc, char** _argv);
|
||||||
|
|
||||||
|
@ -267,6 +268,10 @@ namespace entry
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case WM_USER_MOUSE_LOCK:
|
||||||
|
setMouseLock(!!_lparam);
|
||||||
|
break;
|
||||||
|
|
||||||
case WM_DESTROY:
|
case WM_DESTROY:
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
@ -348,6 +353,21 @@ namespace entry
|
||||||
{
|
{
|
||||||
int32_t mx = GET_X_LPARAM(_lparam);
|
int32_t mx = GET_X_LPARAM(_lparam);
|
||||||
int32_t my = GET_Y_LPARAM(_lparam);
|
int32_t my = GET_Y_LPARAM(_lparam);
|
||||||
|
|
||||||
|
if (m_mouseLock)
|
||||||
|
{
|
||||||
|
mx -= m_mx;
|
||||||
|
my -= m_my;
|
||||||
|
|
||||||
|
if (0 == mx
|
||||||
|
&& 0 == my)
|
||||||
|
{
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
setMousePos(m_mx, m_my);
|
||||||
|
}
|
||||||
|
|
||||||
m_eventQueue.postMouseEvent(mx, my);
|
m_eventQueue.postMouseEvent(mx, my);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -505,6 +525,34 @@ namespace entry
|
||||||
m_frame = _windowFrame;
|
m_frame = _windowFrame;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMousePos(int32_t _mx, int32_t _my)
|
||||||
|
{
|
||||||
|
POINT pt = { _mx, _my };
|
||||||
|
ClientToScreen(m_hwnd, &pt);
|
||||||
|
SetCursorPos(pt.x, pt.y);
|
||||||
|
}
|
||||||
|
|
||||||
|
void setMouseLock(bool _lock)
|
||||||
|
{
|
||||||
|
if (_lock != m_mouseLock)
|
||||||
|
{
|
||||||
|
if (_lock)
|
||||||
|
{
|
||||||
|
m_mx = m_width/2;
|
||||||
|
m_my = m_height/2;
|
||||||
|
ShowCursor(false);
|
||||||
|
setMousePos(m_mx, m_my);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
setMousePos(m_mx, m_my);
|
||||||
|
ShowCursor(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
m_mouseLock = _lock;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
static LRESULT CALLBACK wndProc(HWND _hwnd, UINT _id, WPARAM _wparam, LPARAM _lparam);
|
static LRESULT CALLBACK wndProc(HWND _hwnd, UINT _id, WPARAM _wparam, LPARAM _lparam);
|
||||||
|
|
||||||
EventQueue m_eventQueue;
|
EventQueue m_eventQueue;
|
||||||
|
@ -517,7 +565,12 @@ namespace entry
|
||||||
uint32_t m_oldWidth;
|
uint32_t m_oldWidth;
|
||||||
uint32_t m_oldHeight;
|
uint32_t m_oldHeight;
|
||||||
float m_aspectRatio;
|
float m_aspectRatio;
|
||||||
|
|
||||||
|
int32_t m_mx;
|
||||||
|
int32_t m_my;
|
||||||
|
|
||||||
bool m_frame;
|
bool m_frame;
|
||||||
|
bool m_mouseLock;
|
||||||
bool m_init;
|
bool m_init;
|
||||||
bool m_exit;
|
bool m_exit;
|
||||||
|
|
||||||
|
@ -550,6 +603,11 @@ namespace entry
|
||||||
PostMessage(s_ctx.m_hwnd, WM_USER_TOGGLE_WINDOW_FRAME, 0, 0);
|
PostMessage(s_ctx.m_hwnd, WM_USER_TOGGLE_WINDOW_FRAME, 0, 0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void setMouseLock(bool _lock)
|
||||||
|
{
|
||||||
|
PostMessage(s_ctx.m_hwnd, WM_USER_MOUSE_LOCK, 0, _lock);
|
||||||
|
}
|
||||||
|
|
||||||
int32_t MainThreadEntry::threadFunc(void* _userData)
|
int32_t MainThreadEntry::threadFunc(void* _userData)
|
||||||
{
|
{
|
||||||
MainThreadEntry* self = (MainThreadEntry*)_userData;
|
MainThreadEntry* self = (MainThreadEntry*)_userData;
|
||||||
|
|
Loading…
Reference in a new issue