| @@ -1074,11 +1074,13 @@ public: | |||
| void liveResizingStart() | |||
| { | |||
| if (constrainer != nullptr) | |||
| { | |||
| constrainer->resizeStart(); | |||
| isFirstLiveResize = true; | |||
| } | |||
| if (constrainer == nullptr) | |||
| return; | |||
| constrainer->resizeStart(); | |||
| isFirstLiveResize = true; | |||
| setFullScreenSizeConstraints (*constrainer); | |||
| } | |||
| void liveResizingEnd() | |||
| @@ -1087,37 +1089,34 @@ public: | |||
| constrainer->resizeEnd(); | |||
| } | |||
| NSRect constrainRect (NSRect r) | |||
| NSRect constrainRect (const NSRect r) | |||
| { | |||
| if (constrainer != nullptr && ! isKioskMode()) | |||
| { | |||
| auto scale = getComponent().getDesktopScaleFactor(); | |||
| if (constrainer == nullptr || isKioskMode()) | |||
| return r; | |||
| auto pos = ScalingHelpers::unscaledScreenPosToScaled (scale, convertToRectInt (flippedScreenRect (r))); | |||
| auto original = ScalingHelpers::unscaledScreenPosToScaled (scale, convertToRectInt (flippedScreenRect ([window frame]))); | |||
| const auto scale = getComponent().getDesktopScaleFactor(); | |||
| auto screenBounds = Desktop::getInstance().getDisplays().getTotalBounds (true); | |||
| auto pos = ScalingHelpers::unscaledScreenPosToScaled (scale, convertToRectInt (flippedScreenRect (r))); | |||
| const auto original = ScalingHelpers::unscaledScreenPosToScaled (scale, convertToRectInt (flippedScreenRect ([window frame]))); | |||
| const bool inLiveResize = [window inLiveResize]; | |||
| const auto screenBounds = Desktop::getInstance().getDisplays().getTotalBounds (true); | |||
| if (! inLiveResize || isFirstLiveResize) | |||
| { | |||
| isFirstLiveResize = false; | |||
| const bool inLiveResize = [window inLiveResize]; | |||
| isStretchingTop = (pos.getY() != original.getY() && pos.getBottom() == original.getBottom()); | |||
| isStretchingLeft = (pos.getX() != original.getX() && pos.getRight() == original.getRight()); | |||
| isStretchingBottom = (pos.getY() == original.getY() && pos.getBottom() != original.getBottom()); | |||
| isStretchingRight = (pos.getX() == original.getX() && pos.getRight() != original.getRight()); | |||
| } | |||
| constrainer->checkBounds (pos, original, screenBounds, | |||
| isStretchingTop, isStretchingLeft, isStretchingBottom, isStretchingRight); | |||
| if (! inLiveResize || isFirstLiveResize) | |||
| { | |||
| isFirstLiveResize = false; | |||
| pos = ScalingHelpers::scaledScreenPosToUnscaled (scale, pos); | |||
| r = flippedScreenRect (makeNSRect (pos)); | |||
| isStretchingTop = (pos.getY() != original.getY() && pos.getBottom() == original.getBottom()); | |||
| isStretchingLeft = (pos.getX() != original.getX() && pos.getRight() == original.getRight()); | |||
| isStretchingBottom = (pos.getY() == original.getY() && pos.getBottom() != original.getBottom()); | |||
| isStretchingRight = (pos.getX() == original.getX() && pos.getRight() != original.getRight()); | |||
| } | |||
| return r; | |||
| constrainer->checkBounds (pos, original, screenBounds, | |||
| isStretchingTop, isStretchingLeft, isStretchingBottom, isStretchingRight); | |||
| return flippedScreenRect (makeNSRect (ScalingHelpers::scaledScreenPosToUnscaled (scale, pos))); | |||
| } | |||
| static void showArrowCursorIfNeeded() | |||
| @@ -1563,6 +1562,13 @@ private: | |||
| return true; | |||
| } | |||
| void setFullScreenSizeConstraints (const ComponentBoundsConstrainer& c) | |||
| { | |||
| const auto minSize = NSMakeSize (static_cast<float> (c.getMinimumWidth()), | |||
| 0.0f); | |||
| [window setMinFullScreenContentSize: minSize]; | |||
| } | |||
| JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentPeer) | |||
| }; | |||