| @@ -1074,11 +1074,13 @@ public: | |||||
| void liveResizingStart() | void liveResizingStart() | ||||
| { | { | ||||
| if (constrainer != nullptr) | |||||
| { | |||||
| constrainer->resizeStart(); | |||||
| isFirstLiveResize = true; | |||||
| } | |||||
| if (constrainer == nullptr) | |||||
| return; | |||||
| constrainer->resizeStart(); | |||||
| isFirstLiveResize = true; | |||||
| setFullScreenSizeConstraints (*constrainer); | |||||
| } | } | ||||
| void liveResizingEnd() | void liveResizingEnd() | ||||
| @@ -1087,37 +1089,34 @@ public: | |||||
| constrainer->resizeEnd(); | 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() | static void showArrowCursorIfNeeded() | ||||
| @@ -1563,6 +1562,13 @@ private: | |||||
| return true; | 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) | JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (NSViewComponentPeer) | ||||
| }; | }; | ||||