From e1b5a1eda2c86886e1eb9cab00bcf028efc9d042 Mon Sep 17 00:00:00 2001 From: Tim Angus Date: Fri, 10 Jun 2011 14:23:24 +0100 Subject: [PATCH] * SDL_IOS_ORIENTATIONS hint --- include/SDL_hints.h | 11 +++++++++++ src/video/uikit/SDL_uikitwindow.m | 32 +++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/SDL_hints.h b/include/SDL_hints.h index ed76ce53f..e106650f1 100644 --- a/include/SDL_hints.h +++ b/include/SDL_hints.h @@ -118,6 +118,17 @@ extern "C" { * By default SDL does not sync screen surface updates with vertical refresh. */ #define SDL_HINT_RENDER_VSYNC "SDL_RENDER_VSYNC" + +/** + * \brief A variable controlling which orientations are allowed on iOS. + * + * In some circumstances it is necessary to be able to explicitly control + * which UI orientations are allowed. + * + * This variable is a space delimited list of the following values: + * "LandscapeLeft", "LandscapeRight", "Portrait" "PortraitUpsideDown" + */ +#define SDL_HINT_ORIENTATIONS "SDL_IOS_ORIENTATIONS" /** diff --git a/src/video/uikit/SDL_uikitwindow.m b/src/video/uikit/SDL_uikitwindow.m index 97fa50058..50a8ec819 100644 --- a/src/video/uikit/SDL_uikitwindow.m +++ b/src/video/uikit/SDL_uikitwindow.m @@ -24,6 +24,7 @@ #include "SDL_video.h" #include "SDL_mouse.h" #include "SDL_assert.h" +#include "SDL_hints.h" #include "../SDL_sysvideo.h" #include "../SDL_pixels_c.h" #include "../../events/SDL_events_c.h" @@ -48,6 +49,37 @@ - (id)initWithSDLWindow:(SDL_Window *)_window { } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orient { + const char *orientationsCString; + if ((orientationsCString = SDL_GetHint(SDL_HINT_ORIENTATIONS)) != NULL) { + BOOL rotate = NO; + NSString *orientationsNSString = [NSString stringWithCString:orientationsCString + encoding:NSUTF8StringEncoding]; + NSArray *orientations = [orientationsNSString componentsSeparatedByCharactersInSet: + [NSCharacterSet characterSetWithCharactersInString:@" "]]; + + switch (orient) { + case UIInterfaceOrientationLandscapeLeft: + rotate = [orientations containsObject:@"LandscapeLeft"]; + break; + + case UIInterfaceOrientationLandscapeRight: + rotate = [orientations containsObject:@"LandscapeRight"]; + break; + + case UIInterfaceOrientationPortrait: + rotate = [orientations containsObject:@"Portrait"]; + break; + + case UIInterfaceOrientationPortraitUpsideDown: + rotate = [orientations containsObject:@"PortraitUpsideDown"]; + break; + + default: break; + } + + return rotate; + } + if (self->window->flags & SDL_WINDOW_RESIZABLE) { return YES; // any orientation is okay. }