Mercurial > sdl-ios-xcode
annotate src/video/uikit/SDL_uikitwindow.m @ 4447:947201caa46e
Added automated test to Xcode project plus needed changes to SDL_RWFromFile to be OS X bundle aware.
The Mac OS X project has a new target called testsdl which builds the automated test. I looked at using Xcode's native unit test support, but the impedance mismatch between the existing automated test structure and Apple's was more than I could handle.
As such, the testsdl application is a full blown proper OS X application, which means it is a self-contained .app bundle. This immediately revealed some problems from the automated test. The largest problem was the assumption about the current working directory and where to find resources. (I suspect Windows may have a similar problem depending on circumstance.) To open resources, the test was looking in directories relative to the SDL source directory, but this will not work well with self-contained .app bundles and Xcode which can place its built applications almost anywhere. And for real-world situations, this is pretty useless anyway.
So I modified SDL_RWFromFile to do special things on OS X. First, it will look for a file in the .app bundle. If not found, it will fallback and just call fopen as it used to do.
I also had to modify the automated test itself because it had a contrieved test which called fopen directly to do read from an existing FILE pointer. In addition, there was a write test. Since a .app bundle is likely going to be read-only, I added a special case for OS X to write to NSTemporaryDirectory.
I expect these changes should work for both Mac and iPhone OS (which includes iPad).
I will update the iPhone Xcode project next.
Finally, FYI, the X11 automated test seems to be failing. Below is my output.
Pending breakpoint 4 - "-[NSException raise]" resolved
Platform : All tests successful (2)
SDL_RWops : All tests successful (5)
Rect : All tests successful (1)
SDL_Surface : All tests successful (6)
Rendering with cocoa driver : All tests successful (3)
Assert Failed!
Blit output not the same.
Test Case 'Renderer x11'
Test Suite 'Rendering with x11 driver'
Last SDL error ''
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorFailure: Set a breakpoint @ CGErrorBreakpoint() to catch errors as they are logged.
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetWindowBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetWindowBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetWindowBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetWindowBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetWindowBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetWindowBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSGetSurfaceBounds
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Sat May 8 00:30:34 iMacAL.local testsdl[71586] <Error>: kCGErrorIllegalArgument: CGSBindSurface: Invalid window 0xa150
Rendering with x11 driver : Failed 1 out of 4 testcases!
Rendering with dummy driver : All tests successful (3)
SDL_Audio : All tests successful (1)
Tests run with SDL 1.3.0 revision 1095906
System is running Mac OS X and is little endian
author | Eric Wing <ewing . public |-at-| gmail . com> |
---|---|
date | Sat, 08 May 2010 00:54:22 -0700 (2010-05-08) |
parents | 8b03a20b320f |
children | 8b7988f42fcb |
rev | line source |
---|---|
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
1 /* |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
2 SDL - Simple DirectMedia Layer |
2859 | 3 Copyright (C) 1997-2009 Sam Lantinga |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
4 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
5 This library is free software; you can redistribute it and/or |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
6 modify it under the terms of the GNU Lesser General Public |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
7 License as published by the Free Software Foundation; either |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
8 version 2.1 of the License, or (at your option) any later version. |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
9 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
10 This library is distributed in the hope that it will be useful, |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
11 but WITHOUT ANY WARRANTY; without even the implied warranty of |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
13 Lesser General Public License for more details. |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
14 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
15 You should have received a copy of the GNU Lesser General Public |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
16 License along with this library; if not, write to the Free Software |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
17 Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
18 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
19 Sam Lantinga |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
20 slouken@libsdl.org |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
21 */ |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
22 #include "SDL_config.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
23 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
24 #include "SDL_video.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
25 #include "SDL_mouse.h" |
4446
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
26 #include "SDL_assert.h" |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
27 #include "../SDL_sysvideo.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
28 #include "../SDL_pixels_c.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
29 #include "../../events/SDL_events_c.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
30 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
31 #include "SDL_uikitvideo.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
32 #include "SDL_uikitevents.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
33 #include "SDL_uikitwindow.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
34 #import "SDL_uikitappdelegate.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
35 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
36 #import "SDL_uikitopenglview.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
37 #import "SDL_renderer_sw.h" |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
38 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
39 #include <UIKit/UIKit.h> |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
40 #include <Foundation/Foundation.h> |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
41 |
4446
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
42 static int SetupWindowData(_THIS, SDL_Window *window, UIWindow *uiwindow, SDL_bool created) |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
43 { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
44 SDL_VideoDisplay *display = window->display; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
45 UIScreen *uiscreen = (UIScreen *) display->driverdata; |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
46 SDL_WindowData *data; |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
47 |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
48 /* Allocate the window data */ |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
49 data = (SDL_WindowData *)SDL_malloc(sizeof(*data)); |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
50 if (!data) { |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
51 SDL_OutOfMemory(); |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
52 return -1; |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
53 } |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
54 data->uiwindow = uiwindow; |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
55 data->view = nil; |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
56 |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
57 /* Fill in the SDL window with the window data */ |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
58 { |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
59 window->x = 0; |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
60 window->y = 0; |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
61 window->w = (int)uiwindow.frame.size.width; |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
62 window->h = (int)uiwindow.frame.size.height; |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
63 } |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
64 |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
65 window->driverdata = data; |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
66 |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
67 window->flags &= ~SDL_WINDOW_RESIZABLE; /* window is NEVER resizeable */ |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
68 window->flags |= SDL_WINDOW_OPENGL; /* window is always OpenGL */ |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
69 window->flags |= SDL_WINDOW_FULLSCREEN; /* window is always fullscreen */ |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
70 window->flags |= SDL_WINDOW_SHOWN; /* only one window on iPod touch, always shown */ |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
71 window->flags |= SDL_WINDOW_INPUT_FOCUS; /* always has input focus */ |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
72 |
4446
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
73 // SDL_WINDOW_BORDERLESS controls whether status bar is hidden. |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
74 // This is only set if the window is on the main screen. Other screens |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
75 // just force the window to have the borderless flag. |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
76 if ([UIScreen mainScreen] == uiscreen) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
77 if (window->flags & SDL_WINDOW_BORDERLESS) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
78 [UIApplication sharedApplication].statusBarHidden = YES; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
79 } else { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
80 [UIApplication sharedApplication].statusBarHidden = NO; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
81 } |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
82 } |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
83 |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
84 return 0; |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
85 |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
86 } |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
87 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
88 int UIKit_CreateWindow(_THIS, SDL_Window *window) { |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
89 |
4446
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
90 SDL_VideoDisplay *display = window->display; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
91 UIScreen *uiscreen = (UIScreen *) display->driverdata; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
92 |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
93 // SDL currently puts this window at the start of display's linked list. We rely on this. |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
94 SDL_assert(display->windows == window); |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
95 |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
96 /* We currently only handle a single window per display on iPhone */ |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
97 if (window->next != NULL) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
98 SDL_SetError("Only one window allowed per display."); |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
99 return -1; |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
100 } |
4446
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
101 |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
102 // Non-mainscreen windows must be force to borderless, as there's no |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
103 // status bar there, and we want to get the right dimensions later in |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
104 // this function. |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
105 if ([UIScreen mainScreen] != uiscreen) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
106 window->flags |= SDL_WINDOW_BORDERLESS; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
107 } |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
108 |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
109 // If monitor has a resolution of 0x0 (hasn't been explicitly set by the |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
110 // user, so it's in standby), try to force the display to a resolution |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
111 // that most closely matches the desired window size. |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
112 if (SDL_UIKit_supports_multiple_displays) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
113 const CGSize origsize = [[uiscreen currentMode] size]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
114 if ((origsize.width == 0.0f) && (origsize.height == 0.0f)) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
115 if (display->num_display_modes == 0) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
116 _this->GetDisplayModes(_this, display); |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
117 } |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
118 |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
119 int i; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
120 const SDL_DisplayMode *bestmode = NULL; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
121 for (i = display->num_display_modes; i >= 0; i--) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
122 const SDL_DisplayMode *mode = &display->display_modes[i]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
123 if ((mode->w >= window->w) && (mode->h >= window->h)) |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
124 bestmode = mode; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
125 } |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
126 |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
127 if (bestmode) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
128 UIScreenMode *uimode = (UIScreenMode *) bestmode->driverdata; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
129 [uiscreen setCurrentMode:uimode]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
130 display->desktop_mode = *bestmode; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
131 display->current_mode = *bestmode; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
132 } |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
133 } |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
134 } |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
135 |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
136 /* ignore the size user requested, and make a fullscreen window */ |
4446
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
137 // !!! FIXME: can we have a smaller view? |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
138 UIWindow *uiwindow = [UIWindow alloc]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
139 if (window->flags & SDL_WINDOW_BORDERLESS) |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
140 uiwindow = [uiwindow initWithFrame:[uiscreen bounds]]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
141 else |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
142 uiwindow = [uiwindow initWithFrame:[uiscreen applicationFrame]]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
143 |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
144 if (SDL_UIKit_supports_multiple_displays) { |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
145 [uiwindow setScreen:uiscreen]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
146 } |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
147 |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
148 if (SetupWindowData(_this, window, uiwindow, SDL_TRUE) < 0) { |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
149 [uiwindow release]; |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
150 return -1; |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
151 } |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
152 |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
153 return 1; |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
154 |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
155 } |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
156 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
157 void UIKit_DestroyWindow(_THIS, SDL_Window * window) { |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
158 SDL_WindowData *data = (SDL_WindowData *)window->driverdata; |
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
159 if (data) { |
4446
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
160 [data->uiwindow release]; |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
161 SDL_free(data); |
8b03a20b320f
Much improved multi-display support for iPad.
Ryan C. Gordon <icculus@icculus.org>
parents:
3685
diff
changeset
|
162 window->driverdata = NULL; |
3685
64ce267332c6
Switched from SDL_WindowID and SDL_TextureID to SDL_Window* and SDL_Texture* for code simplicity and improved performance.
Sam Lantinga <slouken@libsdl.org>
parents:
3400
diff
changeset
|
163 } |
2765
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
164 } |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
165 |
f55c87ae336b
Final merge of Google Summer of Code 2008 work...
Sam Lantinga <slouken@libsdl.org>
parents:
diff
changeset
|
166 /* vi: set ts=4 sw=4 expandtab: */ |