From c2d86693ff5bfd017424304dfdd1f88fa84c89b3 Mon Sep 17 00:00:00 2001 From: reuk Date: Mon, 22 Apr 2024 18:07:17 +0100 Subject: [PATCH] D2D: Avoid calling setPhysicalPixelScaleFactor --- .../native/juce_Direct2DGraphicsContext_windows.cpp | 10 +++++----- .../native/juce_Direct2DGraphicsContext_windows.h | 2 +- .../native/juce_Direct2DHwndContext_windows.cpp | 4 ++-- .../native/juce_Direct2DImageContext_windows.cpp | 2 +- .../juce_gui_basics/native/juce_Windowing_windows.cpp | 4 +--- 5 files changed, 10 insertions(+), 12 deletions(-) diff --git a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp index 067cb8f5d9..49c6bdc5d1 100644 --- a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.cpp @@ -471,7 +471,7 @@ public: deviceResources.deviceContext.context->Clear (backgroundColor); } - virtual SavedState* startFrame() + virtual SavedState* startFrame (float dpiScale) { prepare(); @@ -495,7 +495,7 @@ public: // Init device context transform deviceResources.deviceContext.resetTransform(); - const auto effectiveDpi = USER_DEFAULT_SCREEN_DPI * owner.getPhysicalPixelScaleFactor(); + const auto effectiveDpi = USER_DEFAULT_SCREEN_DPI * dpiScale; deviceResources.deviceContext.context->SetDpi (effectiveDpi, effectiveDpi); // Start drawing @@ -760,10 +760,10 @@ private: Direct2DGraphicsContext::Direct2DGraphicsContext() = default; Direct2DGraphicsContext::~Direct2DGraphicsContext() = default; -bool Direct2DGraphicsContext::startFrame() +bool Direct2DGraphicsContext::startFrame (float dpiScale) { auto pimpl = getPimpl(); - currentState = pimpl->startFrame(); + currentState = pimpl->startFrame (dpiScale); if (currentState == nullptr) return false; @@ -781,7 +781,7 @@ bool Direct2DGraphicsContext::startFrame() setFont (currentState->font); currentState->updateCurrentBrush(); - addTransform (AffineTransform::scale ((float) getPhysicalPixelScaleFactor())); + addTransform (AffineTransform::scale (dpiScale)); } return true; diff --git a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h index 5576700c3b..c312c0a234 100644 --- a/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h +++ b/modules/juce_graphics/native/juce_Direct2DGraphicsContext_windows.h @@ -99,7 +99,7 @@ public: void fillRoundedRectangle (const Rectangle& area, float cornerSize) override; //============================================================================== - bool startFrame(); + bool startFrame (float dpiScale); void endFrame(); virtual Image createSnapshot() const { return {}; } diff --git a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp index 02dc35cd34..18073f11c2 100644 --- a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp @@ -486,7 +486,7 @@ public: } } - SavedState* startFrame() override + SavedState* startFrame (float dpiScale) override { if (resizing) { @@ -494,7 +494,7 @@ public: setSize (getClientRect()); } - auto savedState = Pimpl::startFrame(); + auto savedState = Pimpl::startFrame (dpiScale); // If a new frame is starting, clear deferredAreas in case repaint is called // while the frame is being painted to ensure the new areas are painted on the diff --git a/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp index a23f2f73a1..15898e7183 100644 --- a/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DImageContext_windows.cpp @@ -103,7 +103,7 @@ Direct2DImageContext::Direct2DImageContext (Direct2DPixelData::Ptr targetIn) metrics = Direct2DMetricsHub::getInstance()->imageContextMetrics; #endif - startFrame(); + startFrame (1.0f); } Direct2DImageContext::~Direct2DImageContext() diff --git a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp index bcdf6ea38c..cbe0d509fd 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp +++ b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp @@ -4774,9 +4774,7 @@ private: // // Direct2DLowLevelGraphicsContext::endFrame calls ID2D1DeviceContext::EndDraw to finish painting // and then tells the swap chain to present the next swap chain back buffer. - direct2DContext->setPhysicalPixelScaleFactor ((float) peer.getPlatformScaleFactor()); - - if (! direct2DContext->startFrame()) + if (! direct2DContext->startFrame ((float) peer.getPlatformScaleFactor())) return; peer.handlePaint (*direct2DContext);