From 91067044f127562d61ee1239ff68c4859494b3a0 Mon Sep 17 00:00:00 2001 From: Filoppi Date: Sun, 28 Apr 2024 04:28:58 +0300 Subject: [PATCH] Remove rounded corners on emulation render window On Windows 11, when playing windowed in a separate window/widget from the main emulator window, we don't want the window to have rounded corners, as it prevents the corner pixels from being visible --- Source/Core/DolphinNoGUI/PlatformWin32.cpp | 13 +++++++++++++ Source/Core/DolphinQt/RenderWidget.cpp | 17 ++++++++++++++++- Source/Core/DolphinQt/RenderWidget.h | 1 + 3 files changed, 30 insertions(+), 1 deletion(-) diff --git a/Source/Core/DolphinNoGUI/PlatformWin32.cpp b/Source/Core/DolphinNoGUI/PlatformWin32.cpp index b92849a3b633..78a9cd783dac 100644 --- a/Source/Core/DolphinNoGUI/PlatformWin32.cpp +++ b/Source/Core/DolphinNoGUI/PlatformWin32.cpp @@ -13,6 +13,7 @@ #include #include #include +#include #include "VideoCommon/Present.h" #include "resource.h" @@ -180,6 +181,18 @@ LRESULT PlatformWin32::WndProc(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam return DefWindowProc(hwnd, msg, wParam, lParam); } + case WM_CREATE: + { + if (hwnd) + { + // Remove rounded corners from the render window on Windows 11 + const DWM_WINDOW_CORNER_PREFERENCE corner_preference = DWMWCP_DONOTROUND; + DwmSetWindowAttribute(hwnd, DWMWA_WINDOW_CORNER_PREFERENCE, &corner_preference, + sizeof(corner_preference)); + } + } + break; + case WM_SIZE: { if (g_presenter) diff --git a/Source/Core/DolphinQt/RenderWidget.cpp b/Source/Core/DolphinQt/RenderWidget.cpp index 225e2f211389..99d6c988ffdd 100644 --- a/Source/Core/DolphinQt/RenderWidget.cpp +++ b/Source/Core/DolphinQt/RenderWidget.cpp @@ -37,6 +37,7 @@ #ifdef _WIN32 #include +#include #endif RenderWidget::RenderWidget(QWidget* parent) : QWidget(parent) @@ -69,7 +70,7 @@ RenderWidget::RenderWidget(QWidget* parent) : QWidget(parent) // (which results in them not getting called) connect(this, &RenderWidget::StateChanged, Host::GetInstance(), &Host::SetRenderFullscreen, Qt::DirectConnection); - connect(this, &RenderWidget::HandleChanged, Host::GetInstance(), &Host::SetRenderHandle, + connect(this, &RenderWidget::HandleChanged, this, &RenderWidget::OnHandleChanged, Qt::DirectConnection); connect(this, &RenderWidget::SizeChanged, Host::GetInstance(), &Host::ResizeSurface, Qt::DirectConnection); @@ -133,6 +134,20 @@ void RenderWidget::dropEvent(QDropEvent* event) State::LoadAs(Core::System::GetInstance(), path.toStdString()); } +void RenderWidget::OnHandleChanged(void* handle) +{ + if (handle) + { +#ifdef _WIN32 + // Remove rounded corners from the render window on Windows 11 + const DWM_WINDOW_CORNER_PREFERENCE corner_preference = DWMWCP_DONOTROUND; + DwmSetWindowAttribute(reinterpret_cast(handle), DWMWA_WINDOW_CORNER_PREFERENCE, + &corner_preference, sizeof(corner_preference)); +#endif + } + Host::GetInstance()->SetRenderHandle(handle); +} + void RenderWidget::OnHideCursorChanged() { UpdateCursor(); diff --git a/Source/Core/DolphinQt/RenderWidget.h b/Source/Core/DolphinQt/RenderWidget.h index c214ead7d053..d828bf36d1c4 100644 --- a/Source/Core/DolphinQt/RenderWidget.h +++ b/Source/Core/DolphinQt/RenderWidget.h @@ -34,6 +34,7 @@ class RenderWidget final : public QWidget private: void HandleCursorTimer(); + void OnHandleChanged(void* handle); void OnHideCursorChanged(); void OnNeverHideCursorChanged(); void OnLockCursorChanged();