From f9232f314bc5edbc7f86e95c519228d6abc2cbb9 Mon Sep 17 00:00:00 2001 From: Grayson Riffe Date: Thu, 13 Feb 2025 12:57:32 -0600 Subject: [PATCH] Fix fullscreen rendering --- NothinFancy/src/client/Window.cpp | 27 ++++++++++++++------------- NothinFancy/src/client/Window.h | 8 ++++---- 2 files changed, 18 insertions(+), 17 deletions(-) diff --git a/NothinFancy/src/client/Window.cpp b/NothinFancy/src/client/Window.cpp index e25bc41..c27543f 100644 --- a/NothinFancy/src/client/Window.cpp +++ b/NothinFancy/src/client/Window.cpp @@ -8,10 +8,10 @@ namespace nf::client { Window::Window(const char* windowTitle) : m_handle(nullptr) , m_wndClassName("NothinFancyWindow") - , m_windowedStyle(WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX) - , m_fullscreenStyle(WS_POPUP) - , m_width() - , m_height() + , m_styleWindowed(WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX) + , m_styleFullscreen(WS_POPUP) + , m_currentWidth() + , m_currentHeight() { NFLog("Creating window"); @@ -27,9 +27,8 @@ namespace nf::client { return m_handle; } - void Window::setDisplay(DisplayConfig config) { + void Window::setDisplay(DisplayConfig& config) { NFLog("Setting window display"); - m_width = config.width, m_height = config.height; // TODO: Only use "active" monitor when starting windowed POINT cursor = {}; @@ -44,17 +43,19 @@ namespace nf::client { switch (config.mode) { case DisplayMode::Windowed: { - SetWindowLongPtr(m_handle, GWL_STYLE, m_windowedStyle); - windowX = monitorX + (monitorWidth / 2) - (m_width / 2), windowY = monitorY + (monitorHeight / 2) - (m_height / 2); + SetWindowLongPtr(m_handle, GWL_STYLE, m_styleWindowed); + m_currentWidth = config.width, m_currentHeight = config.height; + windowX = monitorX + (monitorWidth / 2) - (m_currentWidth / 2), windowY = monitorY + (monitorHeight / 2) - (m_currentHeight / 2); SIZE windowSize = getWindowSize(); windowWidth = windowSize.cx, windowHeight = windowSize.cy; break; } case DisplayMode::Fullscreen: { - SetWindowLongPtr(m_handle, GWL_STYLE, m_fullscreenStyle); + SetWindowLongPtr(m_handle, GWL_STYLE, m_styleFullscreen); windowX = monitorX, windowY = monitorY; windowWidth = monitorWidth, windowHeight = monitorHeight; + config.width = windowWidth, config.height = windowHeight; break; } } @@ -94,7 +95,7 @@ namespace nf::client { case WM_DPICHANGED: { // Prevents automatic window resize on DPI change (don't apply to fullscreen) - if (GetWindowLongPtr(hWnd, GWL_STYLE) & WS_POPUP) + if (GetWindowLongPtr(hWnd, GWL_STYLE) == wnd->m_styleFullscreen) return 0; SIZE windowSize = wnd->getWindowSize(); @@ -112,9 +113,9 @@ namespace nf::client { SIZE Window::getWindowSize() { RECT cli = {}; - cli.right = m_width; - cli.bottom = m_height; - AdjustWindowRectExForDpi(&cli, m_windowedStyle, FALSE, NULL, GetDpiForWindow(m_handle)); + cli.right = m_currentWidth; + cli.bottom = m_currentHeight; + AdjustWindowRectExForDpi(&cli, m_styleWindowed, FALSE, NULL, GetDpiForWindow(m_handle)); int width = cli.right - cli.left, height = cli.bottom - cli.top; return { width, height }; } diff --git a/NothinFancy/src/client/Window.h b/NothinFancy/src/client/Window.h index 4c9a6d3..e772f56 100644 --- a/NothinFancy/src/client/Window.h +++ b/NothinFancy/src/client/Window.h @@ -11,7 +11,7 @@ namespace nf::client { Window(const char* windowTitle); HWND getHandle() const; - void setDisplay(DisplayConfig config); + void setDisplay(DisplayConfig& config); void runLoop(); void show(bool show = true); @@ -24,9 +24,9 @@ namespace nf::client { HWND m_handle; const char* m_wndClassName; - const DWORD m_windowedStyle; - const DWORD m_fullscreenStyle; + const DWORD m_styleWindowed; + const DWORD m_styleFullscreen; - unsigned int m_width, m_height; + unsigned int m_currentWidth, m_currentHeight; }; }