Skip to content
This repository has been archived by the owner on Feb 11, 2021. It is now read-only.

Latest commit

 

History

History
162 lines (129 loc) · 4.79 KB

SDL_uikitappdelegate.m

File metadata and controls

162 lines (129 loc) · 4.79 KB
 
Jun 22, 2011
Jun 22, 2011
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
/*
Simple DirectMedia Layer
Copyright (C) 1997-2011 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.
*/
#import "../SDL_sysvideo.h"
#import "SDL_assert.h"
#import "SDL_hints.h"
#import "../../SDL_hints_c.h"
#import "SDL_uikitappdelegate.h"
#import "SDL_uikitopenglview.h"
#import "SDL_events_c.h"
#import "jumphack.h"
#ifdef main
#undef main
#endif
extern int SDL_main(int argc, char *argv[]);
static int forward_argc;
static char **forward_argv;
Sep 27, 2011
Sep 27, 2011
40
41
int main(int argc, char **argv)
{
Jun 22, 2011
Jun 22, 2011
42
43
int i;
NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
Sep 27, 2011
Sep 27, 2011
44
Jun 22, 2011
Jun 22, 2011
45
46
47
/* store arguments */
forward_argc = argc;
forward_argv = (char **)malloc((argc+1) * sizeof(char *));
Sep 27, 2011
Sep 27, 2011
48
for (i = 0; i < argc; i++) {
Jun 22, 2011
Jun 22, 2011
49
50
51
52
53
54
55
forward_argv[i] = malloc( (strlen(argv[i])+1) * sizeof(char));
strcpy(forward_argv[i], argv[i]);
}
forward_argv[i] = NULL;
/* Give over control to run loop, SDLUIKitDelegate will handle most things from here */
UIApplicationMain(argc, argv, NULL, [SDLUIKitDelegate getAppDelegateClassName]);
Sep 27, 2011
Sep 27, 2011
56
Jun 22, 2011
Jun 22, 2011
57
58
59
60
[pool release];
return 0;
}
Sep 27, 2011
Sep 27, 2011
61
62
static void SDL_IdleTimerDisabledChanged(const char *name, const char *oldValue, const char *newValue)
{
Jun 22, 2011
Jun 22, 2011
63
SDL_assert(SDL_strcmp(name, SDL_HINT_IDLE_TIMER_DISABLED) == 0);
Sep 27, 2011
Sep 27, 2011
64
Jun 22, 2011
Jun 22, 2011
65
66
67
68
69
70
71
BOOL disable = (*newValue != '0');
[UIApplication sharedApplication].idleTimerDisabled = disable;
}
@implementation SDLUIKitDelegate
/* convenience method */
Sep 27, 2011
Sep 27, 2011
72
73
+ (SDLUIKitDelegate *)sharedAppDelegate
{
Jun 22, 2011
Jun 22, 2011
74
75
76
77
/* the delegate is set in UIApplicationMain(), which is garaunteed to be called before this method */
return (SDLUIKitDelegate *)[[UIApplication sharedApplication] delegate];
}
Sep 27, 2011
Sep 27, 2011
78
79
+ (NSString *)getAppDelegateClassName
{
Jun 22, 2011
Jun 22, 2011
80
81
82
83
84
/* subclassing notice: when you subclass this appdelegate, make sure to add a category to override
this method and return the actual name of the delegate */
return @"SDLUIKitDelegate";
}
Sep 27, 2011
Sep 27, 2011
85
86
- (id)init
{
Jun 22, 2011
Jun 22, 2011
87
88
89
90
self = [super init];
return self;
}
Sep 27, 2011
Sep 27, 2011
91
92
- (void)postFinishLaunch
{
Jun 22, 2011
Jun 22, 2011
93
94
95
96
97
98
/* register a callback for the idletimer hint */
SDL_SetHint(SDL_HINT_IDLE_TIMER_DISABLED, "0");
SDL_RegisterHintChangedCb(SDL_HINT_IDLE_TIMER_DISABLED, &SDL_IdleTimerDisabledChanged);
/* run the user's application, passing argc and argv */
int exit_status = SDL_main(forward_argc, forward_argv);
Sep 27, 2011
Sep 27, 2011
99
Jun 22, 2011
Jun 22, 2011
100
101
/* free the memory we used to hold copies of argc and argv */
int i;
Sep 27, 2011
Sep 27, 2011
102
for (i = 0; i < forward_argc; i++) {
Jun 22, 2011
Jun 22, 2011
103
104
free(forward_argv[i]);
}
Sep 27, 2011
Sep 27, 2011
105
106
free(forward_argv);
Jun 22, 2011
Jun 22, 2011
107
108
109
110
/* exit, passing the return status from the user's application */
exit(exit_status);
}
Sep 27, 2011
Sep 27, 2011
111
112
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
Jun 22, 2011
Jun 22, 2011
113
114
/* Set working directory to resource path */
[[NSFileManager defaultManager] changeCurrentDirectoryPath: [[NSBundle mainBundle] resourcePath]];
Sep 27, 2011
Sep 27, 2011
115
Jun 22, 2011
Jun 22, 2011
116
117
118
119
120
[self performSelector:@selector(postFinishLaunch) withObject:nil afterDelay:0.0];
return YES;
}
Sep 27, 2011
Sep 27, 2011
121
122
- (void)applicationWillTerminate:(UIApplication *)application
{
Jun 22, 2011
Jun 22, 2011
123
124
125
126
127
128
129
130
131
132
133
134
135
136
SDL_SendQuit();
/* hack to prevent automatic termination. See SDL_uikitevents.m for details */
longjmp(*(jump_env()), 1);
}
- (void) applicationWillResignActive:(UIApplication*)application
{
//NSLog(@"%@", NSStringFromSelector(_cmd));
// Send every window on every screen a MINIMIZED event.
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (!_this) {
return;
}
Sep 27, 2011
Sep 27, 2011
137
Jun 22, 2011
Jun 22, 2011
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
SDL_Window *window;
for (window = _this->windows; window != nil; window = window->next) {
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
}
}
- (void) applicationDidBecomeActive:(UIApplication*)application
{
//NSLog(@"%@", NSStringFromSelector(_cmd));
// Send every window on every screen a RESTORED event.
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (!_this) {
return;
}
Sep 27, 2011
Sep 27, 2011
153
Aug 18, 2011
Aug 18, 2011
154
SDL_Window *window;
Jun 22, 2011
Jun 22, 2011
155
for (window = _this->windows; window != nil; window = window->next) {
Aug 18, 2011
Aug 18, 2011
156
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0);
Jun 22, 2011
Jun 22, 2011
157
158
159
160
161
162
}
}
@end
/* vi: set ts=4 sw=4 expandtab: */