| @@ -987,37 +987,65 @@ private: | |||||
| { | { | ||||
| if (auto* constrainer = editor->getConstrainer()) | if (auto* constrainer = editor->getConstrainer()) | ||||
| { | { | ||||
| auto minW = (double) constrainer->getMinimumWidth(); | |||||
| auto maxW = (double) constrainer->getMaximumWidth(); | |||||
| auto minH = (double) constrainer->getMinimumHeight(); | |||||
| auto maxH = (double) constrainer->getMaximumHeight(); | |||||
| auto width = (double) (rectToCheck->right - rectToCheck->left); | |||||
| auto height = (double) (rectToCheck->bottom - rectToCheck->top); | |||||
| #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE | #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE | ||||
| auto juceRect = editor->getLocalArea (component.get(), | |||||
| Rectangle<int>::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 }); | |||||
| width /= editorScaleFactor; | |||||
| height /= editorScaleFactor; | |||||
| #endif | #endif | ||||
| Rectangle<int> limits (0, 0, constrainer->getMaximumWidth(), constrainer->getMaximumHeight()); | |||||
| width = jlimit (minW, maxW, width); | |||||
| height = jlimit (minH, maxH, height); | |||||
| auto currentRect = editor->getBounds(); | |||||
| auto aspectRatio = constrainer->getFixedAspectRatio(); | |||||
| 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()); | |||||
| if (aspectRatio != 0.0) | |||||
| { | |||||
| bool adjustWidth = (width / height > aspectRatio); | |||||
| juceRect = component->getLocalArea (editor, juceRect); | |||||
| if (getHostType().type == PluginHostType::SteinbergCubase9) | |||||
| { | |||||
| if (editor->getWidth() == width && editor->getHeight() != height) | |||||
| adjustWidth = true; | |||||
| else if (editor->getHeight() == height && editor->getWidth() != width) | |||||
| adjustWidth = false; | |||||
| } | |||||
| if (adjustWidth) | |||||
| { | |||||
| width = height * aspectRatio; | |||||
| if (width > maxW || width < minW) | |||||
| { | |||||
| width = jlimit (minW, maxW, width); | |||||
| height = width / aspectRatio; | |||||
| } | |||||
| } | |||||
| else | |||||
| { | |||||
| height = width / aspectRatio; | |||||
| if (height > maxH || height < minH) | |||||
| { | |||||
| height = jlimit (minH, maxH, height); | |||||
| width = height * aspectRatio; | |||||
| } | |||||
| } | |||||
| } | |||||
| #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE | #if JUCE_WINDOWS && JUCE_WIN_PER_MONITOR_DPI_AWARE | ||||
| rectToCheck->right = rectToCheck->left + roundToInt (juceRect.getWidth() * editorScaleFactor); | |||||
| rectToCheck->bottom = rectToCheck->top + roundToInt (juceRect.getHeight() * editorScaleFactor); | |||||
| #else | |||||
| rectToCheck->right = rectToCheck->left + juceRect.getWidth(); | |||||
| rectToCheck->bottom = rectToCheck->top + juceRect.getHeight(); | |||||
| width *= editorScaleFactor; | |||||
| height *= editorScaleFactor; | |||||
| #endif | #endif | ||||
| rectToCheck->right = rectToCheck->left + roundToInt (width); | |||||
| rectToCheck->bottom = rectToCheck->top + roundToInt (height); | |||||
| } | } | ||||
| } | } | ||||