From 99a17ad3a9f8d84e881ed010198791605ab8b5b4 Mon Sep 17 00:00:00 2001 From: ed Date: Tue, 3 Mar 2020 18:07:00 +0000 Subject: [PATCH] Windows: Fixed an issue with OpenGL rendering scale in plug-ins --- modules/juce_opengl/native/juce_OpenGL_win32.h | 8 ++++++++ modules/juce_opengl/opengl/juce_OpenGLContext.cpp | 8 ++++++++ 2 files changed, 16 insertions(+) diff --git a/modules/juce_opengl/native/juce_OpenGL_win32.h b/modules/juce_opengl/native/juce_OpenGL_win32.h index 5152250639..0bcf70820f 100644 --- a/modules/juce_opengl/native/juce_OpenGL_win32.h +++ b/modules/juce_opengl/native/juce_OpenGL_win32.h @@ -150,6 +150,14 @@ public: struct Locker { Locker (NativeContext&) {} }; + HWND getNativeHandle() + { + if (nativeWindow != nullptr) + return (HWND) nativeWindow->getNativeHandle(); + + return {}; + } + private: struct DummyComponent : public Component { diff --git a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp index 2cfcf9c016..5e60c6d8d9 100644 --- a/modules/juce_opengl/opengl/juce_OpenGLContext.cpp +++ b/modules/juce_opengl/opengl/juce_OpenGLContext.cpp @@ -66,6 +66,10 @@ private: #endif +#if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + extern JUCE_API double getScaleFactorForWindow (HWND); +#endif + //============================================================================== class OpenGLContext::CachedImage : public CachedComponentImage, private ThreadPoolJob @@ -292,7 +296,11 @@ public: { if (auto* peer = component.getPeer()) { + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + auto newScale = getScaleFactorForWindow (nativeContext->getNativeHandle()); + #else auto newScale = Desktop::getInstance().getDisplays().findDisplayForRect (component.getTopLevelComponent()->getScreenBounds()).scale; + #endif auto localBounds = component.getLocalBounds(); auto newArea = peer->getComponent().getLocalArea (&component, localBounds).withZeroOrigin() * newScale;