| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- /*
- Simple DirectMedia Layer
- Copyright (C) 1997-2014 Sam Lantinga <slouken@libsdl.org>
- This software is provided 'as-is', without any express or implied
- warranty. In no event will the authors be held liable for any damages
- arising from the use of this software.
- Permission is granted to anyone to use this software for any purpose,
- including commercial applications, and to alter it and redistribute it
- freely, subject to the following restrictions:
- 1. The origin of this software must not be misrepresented; you must not
- claim that you wrote the original software. If you use this software
- in a product, an acknowledgment in the product documentation would be
- appreciated but is not required.
- 2. Altered source versions must be plainly marked as such, and must not be
- misrepresented as being the original software.
- 3. This notice may not be removed or altered from any source distribution.
- */
- #include "../../SDL_internal.h"
- #if SDL_VIDEO_DRIVER_UIKIT
- #include "SDL_video.h"
- #include "SDL_assert.h"
- #include "SDL_hints.h"
- #include "../SDL_sysvideo.h"
- #include "../../events/SDL_events_c.h"
- #include "SDL_uikitviewcontroller.h"
- #include "SDL_uikitvideo.h"
- #include "SDL_uikitmodes.h"
- #include "SDL_uikitwindow.h"
- @implementation SDL_uikitviewcontroller
- @synthesize window;
- - (id)initWithSDLWindow:(SDL_Window *)_window
- {
- if (self = [super initWithNibName:nil bundle:nil]) {
- self.window = _window;
- }
- return self;
- }
- - (void)loadView
- {
- /* do nothing. */
- }
- - (void)viewDidLayoutSubviews
- {
- const CGSize size = self.view.bounds.size;
- int w = (int) size.width;
- int h = (int) size.height;
- SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, w, h);
- }
- - (NSUInteger)supportedInterfaceOrientations
- {
- NSUInteger orientationMask = 0;
- const char *hint = SDL_GetHint(SDL_HINT_ORIENTATIONS);
- if (hint != NULL) {
- NSArray *orientations = [@(hint) componentsSeparatedByString:@" "];
- if ([orientations containsObject:@"LandscapeLeft"]) {
- orientationMask |= UIInterfaceOrientationMaskLandscapeLeft;
- }
- if ([orientations containsObject:@"LandscapeRight"]) {
- orientationMask |= UIInterfaceOrientationMaskLandscapeRight;
- }
- if ([orientations containsObject:@"Portrait"]) {
- orientationMask |= UIInterfaceOrientationMaskPortrait;
- }
- if ([orientations containsObject:@"PortraitUpsideDown"]) {
- orientationMask |= UIInterfaceOrientationMaskPortraitUpsideDown;
- }
- }
- if (orientationMask == 0 && (window->flags & SDL_WINDOW_RESIZABLE)) {
- orientationMask = UIInterfaceOrientationMaskAll; /* any orientation is okay. */
- }
- if (orientationMask == 0) {
- if (window->w >= window->h) {
- orientationMask |= UIInterfaceOrientationMaskLandscape;
- }
- if (window->h >= window->w) {
- orientationMask |= (UIInterfaceOrientationMaskPortrait | UIInterfaceOrientationMaskPortraitUpsideDown);
- }
- }
- /* Don't allow upside-down orientation on the phone, so answering calls is in the natural orientation */
- if ([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPhone) {
- orientationMask &= ~UIInterfaceOrientationMaskPortraitUpsideDown;
- }
- return orientationMask;
- }
- - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)orient
- {
- NSUInteger orientationMask = [self supportedInterfaceOrientations];
- return (orientationMask & (1 << orient));
- }
- - (BOOL)prefersStatusBarHidden
- {
- if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) {
- return YES;
- } else {
- return NO;
- }
- }
- - (UIStatusBarStyle)preferredStatusBarStyle
- {
- /* We assume most games don't have a bright white background. */
- return UIStatusBarStyleLightContent;
- }
- @end
- #endif /* SDL_VIDEO_DRIVER_UIKIT */
- /* vi: set ts=4 sw=4 expandtab: */
|