Minor Objective-C code tweaks. iOS-improvements
authorAlex Szpakowski <slime73@gmail.com>
Thu, 27 Nov 2014 20:25:54 -0400
branchiOS-improvements
changeset 9529 4bf9830d8153
parent 9528 6915f7db6791
child 9530 ac0885050d79
Minor Objective-C code tweaks.
src/video/uikit/SDL_uikitopengles.m
src/video/uikit/SDL_uikitopenglview.m
src/video/uikit/SDL_uikitvideo.m
src/video/uikit/SDL_uikitview.h
src/video/uikit/SDL_uikitview.m
src/video/uikit/SDL_uikitviewcontroller.m
src/video/uikit/SDL_uikitwindow.h
src/video/uikit/SDL_uikitwindow.m
--- a/src/video/uikit/SDL_uikitopengles.m	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitopengles.m	Thu Nov 27 20:25:54 2014 -0400
@@ -58,7 +58,8 @@
     return 0;
 }
 
-void UIKit_GL_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h)
+void
+UIKit_GL_GetDrawableSize(_THIS, SDL_Window * window, int * w, int * h)
 {
     @autoreleasepool {
         SDL_WindowData *data = (__bridge SDL_WindowData *)window->driverdata;
@@ -157,16 +158,15 @@
             return NULL;
         }
 
+        view.sdlwindow = window;
         data.view = view;
-        view.viewcontroller = data.viewcontroller;
-        if (view.viewcontroller != nil) {
-            view.viewcontroller.view = view;
-        }
-        [uiwindow addSubview:view];
+        data.viewcontroller.view = view;
 
-        /* The view controller needs to be the root in order to control rotation on iOS 6.0 */
+        /* The view controller needs to be the root in order to control rotation */
         if (uiwindow.rootViewController == nil) {
-            uiwindow.rootViewController = view.viewcontroller;
+            uiwindow.rootViewController = data.viewcontroller;
+        } else {
+            [uiwindow addSubview:view];
         }
 
         EAGLContext *context = view.context;
@@ -199,17 +199,17 @@
             SDL_WindowData *data = (__bridge SDL_WindowData *) window->driverdata;
             SDL_uikitopenglview *view = data.view;
             if (view.context == eaglcontext) {
-                /* the delegate has retained the view, this will release him */
-                if (view.viewcontroller) {
+                /* the view controller has retained the view */
+                if (data.viewcontroller) {
                     UIWindow *uiwindow = (UIWindow *)view.superview;
-                    if (uiwindow.rootViewController == view.viewcontroller) {
+                    if (uiwindow.rootViewController == data.viewcontroller) {
                         uiwindow.rootViewController = nil;
                     }
-                    view.viewcontroller.view = nil;
-                    view.viewcontroller = nil;
+                    data.viewcontroller.view = nil;
                 }
+
                 [view removeFromSuperview];
-
+                view.sdlwindow = NULL;
                 data.view = nil;
                 return;
             }
@@ -217,7 +217,8 @@
     }
 }
 
-Uint32 SDL_iPhoneGetViewRenderbuffer(SDL_Window * window)
+Uint32
+SDL_iPhoneGetViewRenderbuffer(SDL_Window * window)
 {
     if (!window) {
         SDL_SetError("Invalid window");
@@ -234,7 +235,8 @@
     }
 }
 
-Uint32 SDL_iPhoneGetViewFramebuffer(SDL_Window * window)
+Uint32
+SDL_iPhoneGetViewFramebuffer(SDL_Window * window)
 {
     if (!window) {
         SDL_SetError("Invalid window");
--- a/src/video/uikit/SDL_uikitopenglview.m	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitopenglview.m	Thu Nov 27 20:25:54 2014 -0400
@@ -46,7 +46,6 @@
     int animationInterval;
     void (*animationCallback)(void*);
     void *animationCallbackParam;
-
 }
 
 @synthesize context;
--- a/src/video/uikit/SDL_uikitvideo.m	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitvideo.m	Thu Nov 27 20:25:54 2014 -0400
@@ -75,6 +75,7 @@
     device->SetDisplayMode = UIKit_SetDisplayMode;
     device->PumpEvents = UIKit_PumpEvents;
     device->CreateWindow = UIKit_CreateWindow;
+    device->SetWindowTitle = UIKit_SetWindowTitle;
     device->ShowWindow = UIKit_ShowWindow;
     device->HideWindow = UIKit_HideWindow;
     device->RaiseWindow = UIKit_RaiseWindow;
--- a/src/video/uikit/SDL_uikitview.h	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitview.h	Thu Nov 27 20:25:54 2014 -0400
@@ -20,7 +20,7 @@
 */
 
 #import <UIKit/UIKit.h>
-#import "SDL_uikitviewcontroller.h"
+#include "../SDL_sysvideo.h"
 
 #include "SDL_touch.h"
 
@@ -30,7 +30,7 @@
 @interface SDL_uikitview : UIView
 #endif
 
-@property (nonatomic, weak) SDL_uikitviewcontroller *viewcontroller;
+@property (nonatomic, assign) SDL_Window *sdlwindow;
 
 - (CGPoint)touchLocation:(UITouch *)touch shouldNormalize:(BOOL)normalize;
 - (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event;
--- a/src/video/uikit/SDL_uikitview.m	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitview.m	Thu Nov 27 20:25:54 2014 -0400
@@ -46,7 +46,7 @@
 
 }
 
-@synthesize viewcontroller;
+@synthesize sdlwindow;
 
 - (id)initWithFrame:(CGRect)frame
 {
@@ -92,10 +92,10 @@
             CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO];
 
             /* send moved event */
-            SDL_SendMouseMotion(self.viewcontroller.window, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y);
+            SDL_SendMouseMotion(sdlwindow, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y);
 
             /* send mouse down event */
-            SDL_SendMouseButton(self.viewcontroller.window, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
+            SDL_SendMouseButton(sdlwindow, SDL_TOUCH_MOUSEID, SDL_PRESSED, SDL_BUTTON_LEFT);
 
             leftFingerDown = touch;
         }
@@ -111,7 +111,7 @@
     for (UITouch *touch in touches) {
         if (touch == leftFingerDown) {
             /* send mouse up */
-            SDL_SendMouseButton(self.viewcontroller.window, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
+            SDL_SendMouseButton(sdlwindow, SDL_TOUCH_MOUSEID, SDL_RELEASED, SDL_BUTTON_LEFT);
             leftFingerDown = nil;
         }
 
@@ -138,7 +138,7 @@
             CGPoint locationInView = [self touchLocation:touch shouldNormalize:NO];
 
             /* send moved event */
-            SDL_SendMouseMotion(self.viewcontroller.window, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y);
+            SDL_SendMouseMotion(sdlwindow, SDL_TOUCH_MOUSEID, 0, locationInView.x, locationInView.y);
         }
 
         CGPoint locationInView = [self touchLocation:touch shouldNormalize:YES];
--- a/src/video/uikit/SDL_uikitviewcontroller.m	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitviewcontroller.m	Thu Nov 27 20:25:54 2014 -0400
@@ -73,11 +73,7 @@
 
 - (BOOL)prefersStatusBarHidden
 {
-    if (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) {
-        return YES;
-    } else {
-        return NO;
-    }
+    return (window->flags & (SDL_WINDOW_FULLSCREEN|SDL_WINDOW_BORDERLESS)) != 0;
 }
 
 - (UIStatusBarStyle)preferredStatusBarStyle
--- a/src/video/uikit/SDL_uikitwindow.h	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitwindow.h	Thu Nov 27 20:25:54 2014 -0400
@@ -27,6 +27,7 @@
 #import "SDL_uikitviewcontroller.h"
 
 extern int UIKit_CreateWindow(_THIS, SDL_Window * window);
+extern void UIKit_SetWindowTitle(_THIS, SDL_Window * window);
 extern void UIKit_ShowWindow(_THIS, SDL_Window * window);
 extern void UIKit_HideWindow(_THIS, SDL_Window * window);
 extern void UIKit_RaiseWindow(_THIS, SDL_Window * window);
--- a/src/video/uikit/SDL_uikitwindow.m	Sun Nov 23 23:29:24 2014 -0400
+++ b/src/video/uikit/SDL_uikitwindow.m	Thu Nov 27 20:25:54 2014 -0400
@@ -55,7 +55,6 @@
     SDL_VideoDisplay *display = SDL_GetDisplayForWindow(window);
     SDL_DisplayData *displaydata = (__bridge SDL_DisplayData *) display->driverdata;
 
-    /* Allocate the window data */
     SDL_WindowData *data = [[SDL_WindowData alloc] init];
     if (!data) {
         return SDL_OutOfMemory();
@@ -67,7 +66,6 @@
     {
         CGRect frame = UIKit_ComputeViewFrame(window, displaydata.uiscreen);
 
-        /* Get frame dimensions */
         int width = (int) frame.size.width;
         int height = (int) frame.size.height;
 
@@ -114,7 +112,7 @@
      * appropriate.
      */
     data.viewcontroller = [[SDL_uikitviewcontroller alloc] initWithSDLWindow:window];
-    data.viewcontroller.title = @"SDL App";  /* !!! FIXME: hook up SDL_SetWindowTitle() */
+    data.viewcontroller.title = @"";
 
     return 0;
 }
@@ -186,11 +184,9 @@
             } else {
                 if (!(orientations & (UIInterfaceOrientationMaskPortrait|UIInterfaceOrientationMaskPortraitUpsideDown))) {
                     UIInterfaceOrientation orient = UIInterfaceOrientationLandscapeLeft;
-
                     if (orientations & UIInterfaceOrientationMaskLandscapeRight) {
                         orient = UIInterfaceOrientationLandscapeRight;
                     }
-
                     [app setStatusBarOrientation:orient animated:NO];
                 }
             }
@@ -212,13 +208,25 @@
         if (SetupWindowData(_this, window, uiwindow, SDL_TRUE) < 0) {
             return -1;
         }
-
     }
 
     return 1;
 }
 
 void
+UIKit_SetWindowTitle(_THIS, SDL_Window * window)
+{
+    @autoreleasepool {
+        SDL_uikitviewcontroller *vc = ((__bridge SDL_WindowData *) window->driverdata).viewcontroller;
+        if (window->title) {
+            vc.title = @(window->title);
+        } else {
+            vc.title = @"";
+        }
+    }
+}
+
+void
 UIKit_ShowWindow(_THIS, SDL_Window * window)
 {
     @autoreleasepool {
@@ -275,16 +283,16 @@
     [windowdata.view layoutIfNeeded];
 
     /* Get frame dimensions */
-    int width  = (int) frame.size.width;
-    int height = (int) frame.size.height;
+    int w = (int) frame.size.width;
+    int h = (int) frame.size.height;
 
     /* We can pick either width or height here and we'll rotate the
      screen to match, so we pick the closest to what we wanted.
      */
     if (window->w >= window->h) {
-        SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, SDL_max(width, height), SDL_min(width, height));
+        SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, SDL_max(w, h), SDL_min(w, h));
     } else {
-        SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, SDL_min(width, height), SDL_max(width, height));
+        SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESIZED, SDL_min(w, h), SDL_max(w, h));
     }
 }
 
@@ -312,7 +320,6 @@
             CFRelease(window->driverdata);
         }
     }
-
     window->driverdata = NULL;
 }