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;
222 if ([
data.uiscreen respondsToSelector:
@selector(nativeScale)]) {
227 for (UIScreenMode *uimode
in availableModes) {
230 int w = (int)(uimode.size.width /
scale);
231 int h = (int)(uimode.size.height /
scale);
234 if (isLandscape != (
w >
h)) {
240 UIKit_AddDisplayMode(display,
w,
h,
data.uiscreen, uimode, addRotation);
253 [data.uiscreen setCurrentMode:modedata.uiscreenmode];
256 if (
data.uiscreen == [UIScreen mainScreen]) {
262 return SDL_SetError(
"Screen orientation does not match display mode size");
266 return SDL_SetError(
"Screen orientation does not match display mode size");
289 #if !TARGET_OS_TV && __IPHONE_OS_VERSION_MIN_REQUIRED < __IPHONE_7_0
291 frame = [data.uiscreen applicationFrame];
316 UIKit_FreeDisplayModeData(
mode);
330 BOOL isLandscape = UIInterfaceOrientationIsLandscape([UIApplication sharedApplication].statusBarOrientation);
342 if (isLandscape != (desktopmode->
w > desktopmode->
h)) {
344 desktopmode->
w = desktopmode->
h;
349 if (isLandscape != (currentmode->
w > currentmode->
h)) {
351 currentmode->
w = currentmode->
h;
355 switch ([UIApplication sharedApplication].statusBarOrientation) {
356 case UIInterfaceOrientationPortrait:
359 case UIInterfaceOrientationPortraitUpsideDown:
362 case UIInterfaceOrientationLandscapeLeft:
366 case UIInterfaceOrientationLandscapeRight: