From 570fd4b65c3b1ac0fcfe7b5ace7c5a939aff5da5 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 13 Aug 2024 11:20:29 +0100 Subject: [PATCH] Direct2D: Track UpdateRegions in D2DContext rather than the Direct2DHwndContext --- .../juce_Direct2DHwndContext_windows.cpp | 18 ------------------ .../native/juce_Direct2DHwndContext_windows.h | 1 - .../native/juce_Windowing_windows.cpp | 6 +++++- 3 files changed, 5 insertions(+), 20 deletions(-) diff --git a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp index 0bc5a604bc..18f9b37e73 100644 --- a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp +++ b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.cpp @@ -313,7 +313,6 @@ private: std::unique_ptr swapChainThread; BackBufferLock presentation; std::optional compositionTree; - UpdateRegion updateRegion; RectangleList deferredRepaints; Rectangle frameSize; std::vector dirtyRectangles; @@ -493,18 +492,6 @@ public: JUCE_TRACE_EVENT_INT_RECT (etw::repaint, etw::paintKeyword, snappedRectangle); } - void addInvalidWindowRegionToDeferredRepaints() - { - updateRegion.findRECTAndValidate (hwnd); - - // Call addDeferredRepaint for each RECT in the update region to make - // sure they are snapped properly for DPI scaling - for (const auto& rect : updateRegion.getRects()) - addDeferredRepaint (D2DUtilities::toRectangle (rect)); - - updateRegion.clear(); - } - SavedState* startFrame (float dpiScale) override { if (resizing) @@ -721,11 +708,6 @@ void Direct2DHwndContext::addDeferredRepaint (Rectangle deferredRepaint) pimpl->addDeferredRepaint (deferredRepaint); } -void Direct2DHwndContext::addInvalidWindowRegionToDeferredRepaints() -{ - pimpl->addInvalidWindowRegionToDeferredRepaints(); -} - Image Direct2DHwndContext::createSnapshot() const { return pimpl->createSnapshot(); diff --git a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h index 0e10c000fe..4ccde0804c 100644 --- a/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h +++ b/modules/juce_graphics/native/juce_Direct2DHwndContext_windows.h @@ -50,7 +50,6 @@ public: void updateSize(); void addDeferredRepaint (Rectangle deferredRepaint); - void addInvalidWindowRegionToDeferredRepaints(); Image createSnapshot() const override; diff --git a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp index 64f6f4a390..7786de2358 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_windows.cpp +++ b/modules/juce_gui_basics/native/juce_Windowing_windows.cpp @@ -5033,7 +5033,10 @@ public: auto paintStartTicks = Time::getHighResolutionTicks(); #endif - direct2DContext->addInvalidWindowRegionToDeferredRepaints(); + updateRegion.findRECTAndValidate (peer.getHWND()); + + for (const auto& rect : updateRegion.getRects()) + repaint (D2DUtilities::toRectangle (rect)); #if JUCE_DIRECT2D_METRICS lastPaintStartTicks = paintStartTicks; @@ -5122,6 +5125,7 @@ private: HWNDComponentPeer& peer; std::unique_ptr direct2DContext; + UpdateRegion updateRegion; #if JUCE_ETW_TRACELOGGING struct ETWEventProvider