From fd5f8e03dd94728e9d9df050c2ee3678305ca4d7 Mon Sep 17 00:00:00 2001 From: ed Date: Fri, 4 Jan 2019 14:22:59 +0000 Subject: [PATCH] VST3: Fixed some glitchy resizing in Reaper when using a fixed aspect ratio --- .../VST3/juce_VST3_Wrapper.cpp | 31 ++++++++++--------- 1 file changed, 17 insertions(+), 14 deletions(-) diff --git a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp index 020e126364..675df873ac 100644 --- a/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp +++ b/modules/juce_audio_plugin_client/VST3/juce_VST3_Wrapper.cpp @@ -985,26 +985,29 @@ private: { if (auto* editor = component->pluginEditor.get()) { - #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE - auto juceRect = editor->getLocalArea (component.get(), - Rectangle::leftTopRightBottom (rectToCheck->left, rectToCheck->top, - rectToCheck->right, rectToCheck->bottom) / editorScaleFactor); - #else - auto juceRect = editor->getLocalArea (component.get(), - { rectToCheck->left, rectToCheck->top, rectToCheck->right, rectToCheck->bottom }); - #endif - if (auto* constrainer = editor->getConstrainer()) { + #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE + auto juceRect = editor->getLocalArea (component.get(), + Rectangle::leftTopRightBottom (rectToCheck->left, rectToCheck->top, + rectToCheck->right, rectToCheck->bottom) / editorScaleFactor); + #else + auto juceRect = editor->getLocalArea (component.get(), + { rectToCheck->left, rectToCheck->top, rectToCheck->right, rectToCheck->bottom }); + #endif + Rectangle limits (0, 0, constrainer->getMaximumWidth(), constrainer->getMaximumHeight()); auto currentRect = editor->getBounds(); - constrainer->checkBounds (juceRect, currentRect, limits, - juceRect.getY() != currentRect.getY() && juceRect.getBottom() == currentRect.getBottom(), - juceRect.getX() != currentRect.getX() && juceRect.getRight() == currentRect.getRight(), - juceRect.getY() == currentRect.getY() && juceRect.getBottom() != currentRect.getBottom(), - juceRect.getX() == currentRect.getX() && juceRect.getRight() != currentRect.getRight()); + if (getHostType().isReaper() && constrainer->getFixedAspectRatio() != 0.0) + constrainer->checkBounds (juceRect, currentRect, limits, false, false, true, true); + else + constrainer->checkBounds (juceRect, currentRect, limits, + juceRect.getY() != currentRect.getY() && juceRect.getBottom() == currentRect.getBottom(), + juceRect.getX() != currentRect.getX() && juceRect.getRight() == currentRect.getRight(), + juceRect.getY() == currentRect.getY() && juceRect.getBottom() != currentRect.getBottom(), + juceRect.getX() == currentRect.getX() && juceRect.getRight() != currentRect.getRight()); juceRect = component->getLocalArea (editor, juceRect);