diff --git a/modules/juce_gui_basics/detail/juce_WindowingHelpers.h b/modules/juce_gui_basics/detail/juce_WindowingHelpers.h index 1947392d2e..cb83e2fe30 100644 --- a/modules/juce_gui_basics/detail/juce_WindowingHelpers.h +++ b/modules/juce_gui_basics/detail/juce_WindowingHelpers.h @@ -47,6 +47,15 @@ struct WindowingHelpers { return Process::isForegroundProcess() || isEmbeddedInForegroundProcess (viewComponent); } + + template + static BorderSize roundToInt (BorderSize border) + { + return { ::juce::roundToInt (border.getTop()), + ::juce::roundToInt (border.getLeft()), + ::juce::roundToInt (border.getBottom()), + ::juce::roundToInt (border.getRight()) }; + } }; } // namespace juce::detail diff --git a/modules/juce_gui_basics/native/juce_Windowing_ios.mm b/modules/juce_gui_basics/native/juce_Windowing_ios.mm index ba542d11d5..0d24a4edc3 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_ios.mm +++ b/modules/juce_gui_basics/native/juce_Windowing_ios.mm @@ -599,24 +599,6 @@ Desktop::DisplayOrientation Desktop::getCurrentOrientation() const return Orientations::convertToJuce (orientation); } -template -static BorderSize operator/ (BorderSize border, Value scale) -{ - return { border.getTop() / scale, - border.getLeft() / scale, - border.getBottom() / scale, - border.getRight() / scale }; -} - -template -static BorderSize roundToInt (BorderSize border) -{ - return { roundToInt (border.getTop()), - roundToInt (border.getLeft()), - roundToInt (border.getBottom()), - roundToInt (border.getRight()) }; -} - // The most straightforward way of retrieving the screen area available to an iOS app // seems to be to create a new window (which will take up all available space) and to // query its frame. @@ -636,10 +618,10 @@ static BorderSize getSafeAreaInsets (float masterScale) if (@available (iOS 11.0, *)) { UIEdgeInsets safeInsets = TemporaryWindow().window.safeAreaInsets; - return roundToInt (BorderSize { safeInsets.top, - safeInsets.left, - safeInsets.bottom, - safeInsets.right } / (double) masterScale); + return detail::WindowingHelpers::roundToInt (BorderSize { safeInsets.top, + safeInsets.left, + safeInsets.bottom, + safeInsets.right }.multipliedBy (1.0 / (double) masterScale)); } JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") @@ -746,7 +728,8 @@ void Displays::findDisplays (float masterScale) d.totalArea = convertToRectInt ([s bounds]) / masterScale; d.userArea = getRecommendedWindowBounds() / masterScale; d.safeAreaInsets = getSafeAreaInsets (masterScale); - d.keyboardInsets = roundToInt (keyboardChangeDetector.getInsets() / (double) masterScale); + const auto scaledInsets = keyboardChangeDetector.getInsets().multipliedBy (1.0 / (double) masterScale); + d.keyboardInsets = detail::WindowingHelpers::roundToInt (scaledInsets); d.isMain = true; d.scale = masterScale * s.scale; d.dpi = 160 * d.scale; diff --git a/modules/juce_gui_basics/native/juce_Windowing_mac.mm b/modules/juce_gui_basics/native/juce_Windowing_mac.mm index 9217bb9869..7fefb2936f 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_mac.mm +++ b/modules/juce_gui_basics/native/juce_Windowing_mac.mm @@ -446,6 +446,17 @@ static Displays::Display getDisplayFromScreen (NSScreen* s, CGFloat& mainScreenB NSSize dpi = [[[s deviceDescription] objectForKey: NSDeviceResolution] sizeValue]; d.dpi = (dpi.width + dpi.height) / 2.0; + #if defined (MAC_OS_VERSION_12_0) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_VERSION_12_0 + if (@available (macOS 12.0, *)) + { + const auto safeInsets = [s safeAreaInsets]; + d.safeAreaInsets = detail::WindowingHelpers::roundToInt (BorderSize { safeInsets.top, + safeInsets.left, + safeInsets.bottom, + safeInsets.right }.multipliedBy (1.0 / (double) masterScale)); + } + #endif + return d; }