diff --git a/src/camera/coremedia/SDL_camera_coremedia.m b/src/camera/coremedia/SDL_camera_coremedia.m index 2f3fb59c89..81483d0862 100644 --- a/src/camera/coremedia/SDL_camera_coremedia.m +++ b/src/camera/coremedia/SDL_camera_coremedia.m @@ -238,7 +238,10 @@ static SDL_CameraFrameResult COREMEDIA_AcquireFrame(SDL_Camera *device, SDL_Surf hidden.last_device_orientation = device_orientation; // update the last known-good orientation for later. } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" const UIInterfaceOrientation ui_orientation = [UIApplication sharedApplication].statusBarOrientation; +#pragma clang diagnostic pop // there is probably math for this, but this is easy to slap into a table. // rotation = rotations[uiorientation-1][devorientation-1]; @@ -468,7 +471,10 @@ static bool COREMEDIA_OpenDevice(SDL_Camera *device, const SDL_CameraSpec *spec) hidden.last_device_orientation = uidevice.orientation; if (!UIDeviceOrientationIsValidInterfaceOrientation(hidden.last_device_orientation)) { // accelerometer isn't ready yet or the phone is laying flat or something. Just try to guess from how the UI is oriented at the moment. +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" switch ([UIApplication sharedApplication].statusBarOrientation) { +#pragma clang diagnostic pop case UIInterfaceOrientationPortrait: hidden.last_device_orientation = UIDeviceOrientationPortrait; break; case UIInterfaceOrientationPortraitUpsideDown: hidden.last_device_orientation = UIDeviceOrientationPortraitUpsideDown; break; case UIInterfaceOrientationLandscapeLeft: hidden.last_device_orientation = UIDeviceOrientationLandscapeRight; break; // Apple docs say UI and device orientations are reversed in landscape. @@ -589,9 +595,13 @@ static void COREMEDIA_DetectDevices(void) devices = discoverySession.devices; // !!! FIXME: this can use Key Value Observation to get hotplug events. } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + // this is deprecated but works back to macOS 10.7; 10.15 added AVCaptureDeviceDiscoverySession as a replacement. devices = [AVCaptureDevice devicesWithMediaType:AVMediaTypeVideo]; // !!! FIXME: this can use AVCaptureDeviceWasConnectedNotification and AVCaptureDeviceWasDisconnectedNotification with NSNotificationCenter to get hotplug events. +#pragma clang diagnostic pop } for (AVCaptureDevice *device in devices) { diff --git a/src/video/uikit/SDL_uikitappdelegate.m b/src/video/uikit/SDL_uikitappdelegate.m index 47de97759c..4f40d93dcf 100644 --- a/src/video/uikit/SDL_uikitappdelegate.m +++ b/src/video/uikit/SDL_uikitappdelegate.m @@ -67,7 +67,10 @@ int SDL_RunApp(int argc, char *argv[], SDL_main_func mainFunction, void *reserve // Load a launch image using the old UILaunchImageFile-era naming rules. static UIImage *SDL_LoadLaunchImageNamed(NSString *name, int screenh) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" UIInterfaceOrientation curorient = [UIApplication sharedApplication].statusBarOrientation; +#pragma clang diagnostic pop UIUserInterfaceIdiom idiom = [UIDevice currentDevice].userInterfaceIdiom; UIImage *image = nil; @@ -127,8 +130,11 @@ static UIImage *SDL_LoadLaunchImageNamed(NSString *name, int screenh) [self.storyboardViewController didMoveToParentViewController:self]; #ifndef SDL_PLATFORM_VISIONOS +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" UIApplication.sharedApplication.statusBarHidden = self.prefersStatusBarHidden; UIApplication.sharedApplication.statusBarStyle = self.preferredStatusBarStyle; +#pragma clang diagnostic pop #endif } @@ -207,7 +213,10 @@ static UIImage *SDL_LoadLaunchImageNamed(NSString *name, int screenh) #if !defined(SDL_PLATFORM_TVOS) && !defined(SDL_PLATFORM_VISIONOS) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" UIInterfaceOrientation curorient = [UIApplication sharedApplication].statusBarOrientation; +#pragma clang diagnostic pop // We always want portrait-oriented size, to match UILaunchImageSize. if (screenw > screenh) { diff --git a/src/video/uikit/SDL_uikitevents.m b/src/video/uikit/SDL_uikitevents.m index 2a22347174..fef6683dbf 100644 --- a/src/video/uikit/SDL_uikitevents.m +++ b/src/video/uikit/SDL_uikitevents.m @@ -62,10 +62,13 @@ static BOOL UIKit_EventPumpEnabled = YES; [notificationCenter addObserver:self selector:@selector(applicationWillTerminate) name:UIApplicationWillTerminateNotification object:nil]; [notificationCenter addObserver:self selector:@selector(applicationDidReceiveMemoryWarning) name:UIApplicationDidReceiveMemoryWarningNotification object:nil]; #if !defined(SDL_PLATFORM_TVOS) && !defined(SDL_PLATFORM_VISIONOS) +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" [notificationCenter addObserver:self selector:@selector(applicationDidChangeStatusBarOrientation) name:UIApplicationDidChangeStatusBarOrientationNotification object:nil]; +#pragma clang diagnostic pop #endif } else if (!wants_observation && self.isObservingNotifications) { self.isObservingNotifications = NO; diff --git a/src/video/uikit/SDL_uikitmodes.m b/src/video/uikit/SDL_uikitmodes.m index b7cb52e76a..103469caa7 100644 --- a/src/video/uikit/SDL_uikitmodes.m +++ b/src/video/uikit/SDL_uikitmodes.m @@ -330,7 +330,10 @@ bool UIKit_IsDisplayLandscape(UIScreen *uiscreen) { #ifndef SDL_PLATFORM_TVOS if (uiscreen == [UIScreen mainScreen]) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation); +#pragma clang diagnostic pop } else #endif // !SDL_PLATFORM_TVOS { @@ -484,7 +487,10 @@ void UIKit_QuitModes(SDL_VideoDevice *_this) #if !defined(SDL_PLATFORM_TVOS) && !defined(SDL_PLATFORM_VISIONOS) void SDL_OnApplicationDidChangeStatusBarOrientation(void) { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation); +#pragma clang diagnostic pop SDL_VideoDisplay *display = SDL_GetVideoDisplay(SDL_GetPrimaryDisplay()); if (display) { @@ -518,7 +524,10 @@ void SDL_OnApplicationDidChangeStatusBarOrientation(void) } } +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" switch ([UIApplication sharedApplication].statusBarOrientation) { +#pragma clang diagnostic pop case UIInterfaceOrientationPortrait: orientation = SDL_ORIENTATION_PORTRAIT; break; diff --git a/src/video/uikit/SDL_uikitvideo.m b/src/video/uikit/SDL_uikitvideo.m index 97aeb94431..43fab3afcd 100644 --- a/src/video/uikit/SDL_uikitvideo.m +++ b/src/video/uikit/SDL_uikitvideo.m @@ -237,7 +237,10 @@ CGRect UIKit_ComputeViewFrame(SDL_Window *window, UIScreen *screen) * https://bugzilla.libsdl.org/show_bug.cgi?id=3505 * https://bugzilla.libsdl.org/show_bug.cgi?id=3465 * https://forums.developer.apple.com/thread/65337 */ +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" UIInterfaceOrientation orient = [UIApplication sharedApplication].statusBarOrientation; +#pragma clang diagnostic pop BOOL landscape = UIInterfaceOrientationIsLandscape(orient) || !(UIKit_GetSupportedOrientations(window) & (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown)); BOOL fullscreen = CGRectEqualToRect(screen.bounds, frame); diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m index 0ee736446e..dd6dc27bd7 100644 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -163,10 +163,17 @@ bool UIKit_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_Properti } if (data.uiscreen == [UIScreen mainScreen]) { - if (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) { - [UIApplication sharedApplication].statusBarHidden = YES; + if (@available(iOS 13.0, *)) { + // iOS 13+ uses view controller's prefersStatusBarHidden } else { - [UIApplication sharedApplication].statusBarHidden = NO; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) { + [UIApplication sharedApplication].statusBarHidden = YES; + } else { + [UIApplication sharedApplication].statusBarHidden = NO; + } +#pragma clang diagnostic pop } } #endif // !SDL_PLATFORM_TVOS @@ -193,7 +200,14 @@ bool UIKit_CreateWindow(SDL_VideoDevice *_this, SDL_Window *window, SDL_Properti // put the window on an external display if appropriate. #ifndef SDL_PLATFORM_VISIONOS if (data.uiscreen != [UIScreen mainScreen]) { - [uiwindow setScreen:data.uiscreen]; + if (@available(iOS 13.0, tvOS 13.0, *)) { + // iOS 13+ uses UIWindowScene to manage screen association + } else { +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + [uiwindow setScreen:data.uiscreen]; +#pragma clang diagnostic pop + } } #endif @@ -277,10 +291,17 @@ static void UIKit_UpdateWindowBorder(SDL_VideoDevice *_this, SDL_Window *window) #if !defined(SDL_PLATFORM_TVOS) && !defined(SDL_PLATFORM_VISIONOS) if (data.uiwindow.screen == [UIScreen mainScreen]) { - if (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) { - [UIApplication sharedApplication].statusBarHidden = YES; + if (@available(iOS 13.0, *)) { + // iOS 13+ uses view controller's prefersStatusBarHidden } else { - [UIApplication sharedApplication].statusBarHidden = NO; +#pragma clang diagnostic push +#pragma clang diagnostic ignored "-Wdeprecated-declarations" + if (window->flags & (SDL_WINDOW_FULLSCREEN | SDL_WINDOW_BORDERLESS)) { + [UIApplication sharedApplication].statusBarHidden = YES; + } else { + [UIApplication sharedApplication].statusBarHidden = NO; + } +#pragma clang diagnostic pop } [viewcontroller setNeedsStatusBarAppearanceUpdate];