From 08e6d2f9ee63d41151f984a68bd48626de71860c Mon Sep 17 00:00:00 2001 From: ed Date: Sat, 20 Feb 2021 16:54:15 +0000 Subject: [PATCH] Windows: Set SWP_NOMOVE/SWP_NOSIZE flags when updating window position in HWNDComponent and use getSmallestIntegerContainer() when calculating scaled bounds --- .../native/juce_win32_HWNDComponent.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/modules/juce_gui_extra/native/juce_win32_HWNDComponent.cpp b/modules/juce_gui_extra/native/juce_win32_HWNDComponent.cpp index 1a65de43cd..905e137840 100644 --- a/modules/juce_gui_extra/native/juce_win32_HWNDComponent.cpp +++ b/modules/juce_gui_extra/native/juce_win32_HWNDComponent.cpp @@ -46,16 +46,20 @@ public: DestroyWindow (hwnd); } - void componentMovedOrResized (bool, bool) override + void componentMovedOrResized (bool wasMoved, bool wasResized) override { if (auto* peer = owner.getTopLevelComponent()->getPeer()) { - auto area = (peer->getAreaCoveredBy (owner).toFloat() * peer->getPlatformScaleFactor()).toNearestInt(); + auto area = (peer->getAreaCoveredBy (owner).toFloat() * peer->getPlatformScaleFactor()).getSmallestIntegerContainer(); setThreadDPIAwarenessForWindow (hwnd); - SetWindowPos (hwnd, nullptr, area.getX(), area.getY(), area.getWidth(), area.getHeight(), - SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER); + UINT flagsToSend = SWP_NOACTIVATE | SWP_NOZORDER | SWP_NOOWNERZORDER; + + if (! wasMoved) flagsToSend |= SWP_NOMOVE; + if (! wasResized) flagsToSend |= SWP_NOSIZE; + + SetWindowPos (hwnd, nullptr, area.getX(), area.getY(), area.getWidth(), area.getHeight(), flagsToSend); } }