21 #include "../../SDL_internal.h"
23 #if SDL_VIDEO_DRIVER_UIKIT
28 #include "../../events/SDL_events_c.h"
59 mode->driverdata = (
void *) CFBridgingRetain(
data);
68 CFRelease(
mode->driverdata);
74 UIKit_GetDisplayModeRefreshRate(UIScreen *uiscreen)
77 if ([uiscreen respondsToSelector:
@selector(maximumFramesPerSecond)]) {
78 return uiscreen.maximumFramesPerSecond;
96 mode.refresh_rate = (int) UIKit_GetDisplayModeRefreshRate(uiscreen);
103 UIKit_FreeDisplayModeData(&
mode);
112 if (UIKit_AddSingleDisplayMode(display,
w,
h, uiscreen,
uiscreenmode) < 0) {
118 if (UIKit_AddSingleDisplayMode(display,
h,
w, uiscreen,
uiscreenmode) < 0) {
127 UIKit_AddDisplay(UIScreen *uiscreen)
130 CGSize
size = uiscreen.bounds.size;
143 mode.refresh_rate = (int) UIKit_GetDisplayModeRefreshRate(uiscreen);
162 data.uiscreen = uiscreen;
174 if (uiscreen == [UIScreen mainScreen]) {
175 return UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
179 CGSize
size = uiscreen.bounds.size;
188 for (UIScreen *uiscreen
in [UIScreen screens]) {
189 if (UIKit_AddDisplay(uiscreen) < 0) {
208 SDL_bool addRotation = (
data.uiscreen == [UIScreen mainScreen]);
210 NSArray *availableModes = nil;
214 availableModes = @[data.uiscreen.currentMode];
216 availableModes =
data.uiscreen.availableModes;
219 for (UIScreenMode *uimode
in availableModes) {
231 int w = (int)(uimode.size.width /
scale);
232 int h = (int)(uimode.size.height /
scale);
235 if (isLandscape != (
w >
h)) {
241 UIKit_AddDisplayMode(display,
w,
h,
data.uiscreen, uimode, addRotation);
254 [data.uiscreen setCurrentMode:modedata.uiscreenmode];
257 if (
data.uiscreen == [UIScreen mainScreen]) {
263 return SDL_SetError(
"Screen orientation does not match display mode size");
267 return SDL_SetError(
"Screen orientation does not match display mode size");
290 #if !TARGET_OS_TV && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
292 frame = [data.uiscreen applicationFrame];
317 UIKit_FreeDisplayModeData(
mode);
331 BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
343 if (isLandscape != (desktopmode->
w > desktopmode->
h)) {
345 desktopmode->
w = desktopmode->
h;
350 if (isLandscape != (currentmode->
w > currentmode->
h)) {
352 currentmode->
w = currentmode->
h;
356 switch ([UIApplication sharedApplication].statusBarOrientation) {
357 case UIInterfaceOrientationPortrait:
360 case UIInterfaceOrientationPortraitUpsideDown:
363 case UIInterfaceOrientationLandscapeLeft:
367 case UIInterfaceOrientationLandscapeRight: