diff --git a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp index 455ceb3990..55c862a571 100644 --- a/modules/juce_gui_basics/native/juce_win32_Windowing.cpp +++ b/modules/juce_gui_basics/native/juce_win32_Windowing.cpp @@ -4095,6 +4095,27 @@ JUCE_API bool shouldScaleGLWindow (void* hwnd) } #endif +JUCE_API void setThreadDPIAwareness (void* hwnd) +{ + if (setThreadDPIAwarenessContext != nullptr) + { + if (! JUCEApplicationBase::isStandaloneApp()) + { + if (hwnd != nullptr) + setThreadDPIAwarenessContext (isPerMonitorDPIAwareWindow ((HWND) hwnd) ? DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE + : DPI_AWARENESS_CONTEXT_UNAWARE); + } + else + { + #if JUCE_WIN_PER_MONITOR_DPI_AWARE + setThreadDPIAwarenessContext (DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE); + #else + setThreadDPIAwarenessContext (DPI_AWARENESS_CONTEXT_UNAWARE); + #endif + } + } +} + JUCE_IMPLEMENT_SINGLETON (HWNDComponentPeer::WindowClassHolder) //============================================================================== diff --git a/modules/juce_opengl/native/juce_OpenGL_win32.h b/modules/juce_opengl/native/juce_OpenGL_win32.h index 95c2dd68e3..ce213815c5 100644 --- a/modules/juce_opengl/native/juce_OpenGL_win32.h +++ b/modules/juce_opengl/native/juce_OpenGL_win32.h @@ -40,6 +40,8 @@ extern bool shouldScaleGLWindow (void* hwnd); void setProcessDPIAwarenessIfNecessary (void*); #endif + void setThreadDPIAwareness (void*); + //============================================================================== class OpenGLContext::NativeContext #if JUCE_WIN_PER_MONITOR_DPI_AWARE @@ -109,6 +111,8 @@ public: setProcessDPIAwarenessIfNecessary (nativeWindow->getNativeHandle()); #endif + updateThreadDPIAwareness(); + context = &c; return true; } @@ -116,7 +120,7 @@ public: void shutdownOnRenderThread() { deactivateCurrentContext(); context = nullptr; } static void deactivateCurrentContext() { wglMakeCurrent (0, 0); } - bool makeActive() const noexcept { return isActive() || wglMakeCurrent (dc, renderContext) != FALSE; } + bool makeActive() const noexcept { updateThreadDPIAwareness(); return isActive() || wglMakeCurrent (dc, renderContext) != FALSE; } bool isActive() const noexcept { return wglGetCurrentContext() == renderContext; } void swapBuffers() const noexcept { SwapBuffers (dc); } @@ -336,6 +340,15 @@ private: return format; } + void updateThreadDPIAwareness() const + { + if (nativeWindow.get() != nullptr) + setThreadDPIAwareness (nativeWindow->getNativeHandle()); + else + setThreadDPIAwareness (nullptr); + + } + JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NativeContext) };