When the cursor is hidden, Still show it on the title bar (WINDOWS)
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 1m25s
All checks were successful
Run ReCI Build Test / Explore-Gitea-Actions (push) Successful in 1m25s
This commit is contained in:
2
main.cpp
2
main.cpp
@@ -56,6 +56,8 @@ int main() {
|
||||
window->setFullscreen(false);
|
||||
window->setVsyncEnabled(false);
|
||||
window->setResizable(true);
|
||||
window->setCursorVisible(false);
|
||||
|
||||
DEBUG(std::format("Window '{}' flags: IN_FOCUS={} FULLSCREEN={} RESIZEABLE={} VSYNC={} QUIT={}",
|
||||
window->getTitle(),
|
||||
window->getFlag(RWindowFlags::IN_FOCUS),
|
||||
|
@@ -1,4 +1,5 @@
|
||||
#include <Windows.h>
|
||||
#include <Windowsx.h>
|
||||
//#include <gl/GL.h>
|
||||
#include <rewindow/types/window.h>
|
||||
|
||||
@@ -50,7 +51,6 @@ Vector2 RWindow::getCursorPos() const {
|
||||
|
||||
void RWindow::setCursorVisible(bool cursor_enable) {
|
||||
cursor_visible = cursor_enable;
|
||||
ShowCursor(cursor_visible);
|
||||
}
|
||||
|
||||
bool RWindow::getCursorVisible() {
|
||||
@@ -100,144 +100,162 @@ bool RWindow::isFullscreen() const {
|
||||
RWindow* eWindow = nullptr;
|
||||
KeyboardState* pKeyboard = nullptr;
|
||||
KeyboardState* cKeyboard = nullptr;
|
||||
|
||||
//Event loop.
|
||||
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
|
||||
switch (uMsg) {
|
||||
case WM_CLOSE:
|
||||
DestroyWindow(hwnd);
|
||||
case WM_DESTROY:
|
||||
exit(0);
|
||||
case WM_SIZE:
|
||||
break;
|
||||
case WM_SETFOCUS: {
|
||||
eWindow->setFlag(RWindowFlags::IN_FOCUS, true);
|
||||
if (!eWindow->getCursorVisible())
|
||||
ShowCursor(false);
|
||||
break;
|
||||
}
|
||||
case WM_CLOSE: {
|
||||
DestroyWindow(hwnd);
|
||||
}
|
||||
|
||||
case WM_KILLFOCUS: {
|
||||
eWindow->setFlag(RWindowFlags::IN_FOCUS, false);
|
||||
if (!eWindow->getCursorVisible())
|
||||
ShowCursor(true);
|
||||
break;
|
||||
}
|
||||
case WM_KEYDOWN: {
|
||||
auto key = GetKeyFromWindowsScancode((WindowsScancode) wParam);
|
||||
//Key repeat fix.
|
||||
if (!pKeyboard->PressedKeys[key]) {
|
||||
eWindow->OnKeyDownEvent(key);
|
||||
eWindow->OnKeyDown(key);
|
||||
eWindow->pressKey(key);
|
||||
case WM_DESTROY: {
|
||||
exit(0);
|
||||
}
|
||||
|
||||
case WM_SIZE: {
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
case WM_KEYUP: {
|
||||
auto key = GetKeyFromWindowsScancode((WindowsScancode) wParam);
|
||||
eWindow->OnKeyUpEvent(key);
|
||||
eWindow->OnKeyUp(key);
|
||||
eWindow->liftKey(key);
|
||||
break;
|
||||
}
|
||||
|
||||
//Mouse Buttons.
|
||||
case WM_MOUSEWHEEL: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
case WM_SETFOCUS: {
|
||||
eWindow->setFlag(RWindowFlags::IN_FOCUS, true);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_KILLFOCUS: {
|
||||
eWindow->setFlag(RWindowFlags::IN_FOCUS, false);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_SETCURSOR: {
|
||||
if (LOWORD(lParam) == HTCLIENT && eWindow->getCursorVisible() == false)
|
||||
SetCursor(nullptr);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_KEYDOWN: {
|
||||
auto key = GetKeyFromWindowsScancode((WindowsScancode) wParam);
|
||||
//Key repeat fix.
|
||||
if (!pKeyboard->PressedKeys[key]) {
|
||||
eWindow->OnKeyDownEvent(key);
|
||||
eWindow->OnKeyDown(key);
|
||||
eWindow->pressKey(key);
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_KEYUP: {
|
||||
auto key = GetKeyFromWindowsScancode((WindowsScancode) wParam);
|
||||
eWindow->OnKeyUpEvent(key);
|
||||
eWindow->OnKeyUp(key);
|
||||
eWindow->liftKey(key);
|
||||
break;
|
||||
}
|
||||
|
||||
//Mouse Buttons.
|
||||
case WM_MOUSEWHEEL: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
int wheel_delta = GET_WHEEL_DELTA_WPARAM(wParam);
|
||||
|
||||
//If the wheel delta is positive, That's MWheelUp, Negative is MWheelDown.
|
||||
int wheel_delta = GET_WHEEL_DELTA_WPARAM(wParam);
|
||||
if (wheel_delta > 0)
|
||||
eventData.Button = MouseButtons::MWheelUp,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
if (wheel_delta > 0)
|
||||
eventData.Button = MouseButtons::MWheelUp,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
|
||||
else
|
||||
eventData.Button = MouseButtons::MWheelDown,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_LBUTTONDOWN: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
eventData.Button = MouseButtons::Left;
|
||||
|
||||
eWindow->OnMouseButtonDownEvent(eventData);
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_LBUTTONUP: {
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
eventData.Button = MouseButtons::Left;
|
||||
|
||||
else
|
||||
eventData.Button = MouseButtons::MWheelDown,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_LBUTTONDOWN: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
eventData.Button = MouseButtons::Left;
|
||||
|
||||
eWindow->OnMouseButtonDownEvent(eventData);
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_LBUTTONUP: {
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
eventData.Button = MouseButtons::Left;
|
||||
|
||||
eWindow->OnMouseButtonUpEvent(eventData);
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_RBUTTONDOWN: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
eventData.Button = MouseButtons::Right;
|
||||
|
||||
eWindow->OnMouseButtonDownEvent(eventData);
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_RBUTTONUP: {
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
eventData.Button = MouseButtons::Right;
|
||||
|
||||
eWindow->OnMouseButtonUpEvent(eventData);
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_MBUTTONDOWN: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
eventData.Button = MouseButtons::Middle;
|
||||
|
||||
eWindow->OnMouseButtonDownEvent(eventData);
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_MBUTTONUP: {
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
eventData.Button = MouseButtons::Middle;
|
||||
|
||||
eWindow->OnMouseButtonUpEvent(eventData);
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_XBUTTONDOWN: {
|
||||
WORD button = GET_XBUTTON_WPARAM(wParam);
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
|
||||
if (button == XBUTTON1)
|
||||
eventData.Button = MouseButtons::Mouse4,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
|
||||
if (button == XBUTTON2)
|
||||
eventData.Button = MouseButtons::Mouse5,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
case WM_XBUTTONUP: {
|
||||
WORD button = GET_XBUTTON_WPARAM(wParam);
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
|
||||
if (button == XBUTTON1)
|
||||
eventData.Button = MouseButtons::Mouse4,
|
||||
eWindow->OnMouseButtonUpEvent(eventData),
|
||||
eWindow->OnMouseButtonUpEvent(eventData);
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
if (button == XBUTTON2)
|
||||
eventData.Button = MouseButtons::Mouse5,
|
||||
eWindow->OnMouseButtonUpEvent(eventData),
|
||||
case WM_RBUTTONDOWN: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
eventData.Button = MouseButtons::Right;
|
||||
|
||||
eWindow->OnMouseButtonDownEvent(eventData);
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_RBUTTONUP: {
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
eventData.Button = MouseButtons::Right;
|
||||
|
||||
eWindow->OnMouseButtonUpEvent(eventData);
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
break;
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_MBUTTONDOWN: {
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
eventData.Button = MouseButtons::Middle;
|
||||
|
||||
eWindow->OnMouseButtonDownEvent(eventData);
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_MBUTTONUP: {
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
eventData.Button = MouseButtons::Middle;
|
||||
|
||||
eWindow->OnMouseButtonUpEvent(eventData);
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_XBUTTONDOWN: {
|
||||
WORD button = GET_XBUTTON_WPARAM(wParam);
|
||||
auto eventData = MouseButtonDownEvent();
|
||||
|
||||
if (button == XBUTTON1)
|
||||
eventData.Button = MouseButtons::Mouse4,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
|
||||
if (button == XBUTTON2)
|
||||
eventData.Button = MouseButtons::Mouse5,
|
||||
eWindow->OnMouseButtonDownEvent(eventData),
|
||||
eWindow->OnMouseButtonDown(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
case WM_XBUTTONUP: {
|
||||
WORD button = GET_XBUTTON_WPARAM(wParam);
|
||||
auto eventData = MouseButtonUpEvent();
|
||||
|
||||
if (button == XBUTTON1)
|
||||
eventData.Button = MouseButtons::Mouse4,
|
||||
eWindow->OnMouseButtonUpEvent(eventData),
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
|
||||
if (button == XBUTTON2)
|
||||
eventData.Button = MouseButtons::Mouse5,
|
||||
eWindow->OnMouseButtonUpEvent(eventData),
|
||||
eWindow->OnMouseButtonUp(eventData);
|
||||
break;
|
||||
}
|
||||
|
||||
//This is the same as "Motion Notify" in the X Window System.
|
||||
case WM_MOUSEMOVE:
|
||||
//This is the same as "Motion Notify" in the X Window System.
|
||||
break;
|
||||
}
|
||||
|
||||
@@ -314,5 +332,4 @@ void RWindow::refresh() {
|
||||
|
||||
auto eventData = MouseMoveEvent(mouse_coords);
|
||||
OnMouseMove(eventData);
|
||||
std::this_thread::sleep_for(1ms);
|
||||
}
|
Reference in New Issue
Block a user