1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-09 23:34:20 +00:00

Direct2D: Use WM_PAINT and vblank callbacks to drive painting

This commit is contained in:
reuk 2025-12-15 18:01:13 +00:00
parent 22ae5baa42
commit 258203706c
No known key found for this signature in database

View file

@ -5082,16 +5082,18 @@ public:
updateRegion.findRECTAndValidate (peer.getHWND());
for (const auto& rect : updateRegion.getRects())
repaint (D2DUtilities::toRectangle (rect));
direct2DContext->addDeferredRepaint (D2DUtilities::toRectangle (rect));
#if JUCE_DIRECT2D_METRICS
lastPaintStartTicks = paintStartTicks;
#endif
handleDirect2DPaint();
}
void repaint (const Rectangle<int>& area) override
{
direct2DContext->addDeferredRepaint (area);
deferredRepaints.add (area);
}
void performAnyPendingRepaintsNow() override {}
@ -5103,7 +5105,13 @@ public:
void onVBlank() override
{
handleDirect2DPaint();
for (auto deferredRect : deferredRepaints)
{
auto r = D2DUtilities::toRECT (deferredRect);
InvalidateRect (peer.getHWND(), &r, FALSE);
}
deferredRepaints.clear();
}
void handleShowWindow() override
@ -5472,6 +5480,7 @@ private:
std::unique_ptr<WrappedD2DHwndContextBase> direct2DContext = getContextForPeer (peer);
UpdateRegion updateRegion;
RectangleList<int> deferredRepaints;
#if JUCE_ETW_TRACELOGGING
struct ETWEventProvider