From f0aacca62c8a94072d7e5b90e24ca1c3a8ffb751 Mon Sep 17 00:00:00 2001 From: reuk Date: Tue, 8 Aug 2023 16:35:34 +0100 Subject: [PATCH] macOS: Fix deprecations in macOS 14.0 --- .../juce_gui_basics/native/juce_Windowing_mac.mm | 14 ++++++++++++++ modules/juce_video/native/juce_CameraDevice_mac.h | 15 +++++++++++++-- 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/modules/juce_gui_basics/native/juce_Windowing_mac.mm b/modules/juce_gui_basics/native/juce_Windowing_mac.mm index 3f87859cfe3b..52efbe85c1cc 100644 --- a/modules/juce_gui_basics/native/juce_Windowing_mac.mm +++ b/modules/juce_gui_basics/native/juce_Windowing_mac.mm @@ -510,11 +510,25 @@ static Image createNSWindowSnapshot (NSWindow* nsWindow) { JUCE_AUTORELEASEPOOL { + // CGWindowListCreateImage is replaced by functions in the ScreenCaptureKit framework, but + // that framework is only available from macOS 12.3 onwards. + // A suitable @available check should be added once the minimum build OS is 12.3 or greater, + // so that ScreenCaptureKit can be weak-linked. + #if defined (MAC_OS_VERSION_14_0) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_VERSION_14_0 + JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations") + #define JUCE_DEPRECATION_IGNORED 1 + #endif + CGImageRef screenShot = CGWindowListCreateImage (CGRectNull, kCGWindowListOptionIncludingWindow, (CGWindowID) [nsWindow windowNumber], kCGWindowImageBoundsIgnoreFraming); + #if JUCE_DEPRECATION_IGNORED + JUCE_END_IGNORE_WARNINGS_GCC_LIKE + #undef JUCE_DEPRECATION_IGNORED + #endif + NSBitmapImageRep* bitmapRep = [[NSBitmapImageRep alloc] initWithCGImage: screenShot]; Image result (Image::ARGB, (int) [bitmapRep size].width, (int) [bitmapRep size].height, true); diff --git a/modules/juce_video/native/juce_CameraDevice_mac.h b/modules/juce_video/native/juce_CameraDevice_mac.h index 35cfd67bd25a..6da9945b23d0 100644 --- a/modules/juce_video/native/juce_CameraDevice_mac.h +++ b/modules/juce_video/native/juce_CameraDevice_mac.h @@ -146,8 +146,19 @@ struct CameraDevice::Pimpl #if JUCE_USE_NEW_CAMERA_API if (@available (macOS 10.15, *)) { - auto* discovery = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes: @[AVCaptureDeviceTypeBuiltInWideAngleCamera, - AVCaptureDeviceTypeExternalUnknown] + const auto deviceType = [&] + { + #if defined (MAC_OS_VERSION_14_0) && MAC_OS_X_VERSION_MAX_ALLOWED >= MAC_OS_VERSION_14_0 + if (@available (macOS 14.0, *)) + return AVCaptureDeviceTypeExternal; + #endif + + JUCE_BEGIN_IGNORE_WARNINGS_GCC_LIKE ("-Wdeprecated-declarations", "-Wunguarded-availability-new") + return AVCaptureDeviceTypeExternalUnknown; + JUCE_END_IGNORE_WARNINGS_GCC_LIKE + }(); + + auto* discovery = [AVCaptureDeviceDiscoverySession discoverySessionWithDeviceTypes: @[AVCaptureDeviceTypeBuiltInWideAngleCamera, deviceType] mediaType: AVMediaTypeVideo position: AVCaptureDevicePositionUnspecified];