Added support for mixing Qt and SDL on iOS

You should call SDL_SetMainReady(), and then customize the QIOSApplicationDelegate like this, in your application code:

/* Additional support for applications mixing Qt and SDL */
@interface QIOSApplicationDelegate : UIResponder <UIApplicationDelegate>
@end

extern "C"
{
void SDL_OnApplicationWillResignActive();
void SDL_OnApplicationDidEnterBackground();
void SDL_OnApplicationWillEnterForeground();
void SDL_OnApplicationDidBecomeActive();
}

@interface QIOSApplicationDelegate (SDL)

- (void)applicationWillResignActive:(UIApplication*)application;
- (void)applicationDidEnterBackground:(UIApplication*)application;
- (void)applicationWillEnterForeground:(UIApplication*)application;
- (void)applicationDidBecomeActive:(UIApplication*)application;

@end

@implementation QIOSApplicationDelegate (SDL)

- (void)applicationWillResignActive:(UIApplication*)application
{
    SDL_OnApplicationWillResignActive();
}

- (void)applicationDidEnterBackground:(UIApplication*)application
{
    SDL_OnApplicationDidEnterBackground();
}

- (void)applicationWillEnterForeground:(UIApplication*)application
{
    SDL_OnApplicationWillEnterForeground();
}

- (void)applicationDidBecomeActive:(UIApplication*)application
{
    SDL_OnApplicationDidBecomeActive();
}

@end // QIOSApplicationDelegate
This commit is contained in:
Sam Lantinga 2017-05-09 10:10:42 -07:00
parent 60f2848421
commit 9ac3bb7011
3 changed files with 68 additions and 31 deletions

View file

@ -418,6 +418,13 @@ extern SDL_bool SDL_ShouldAllowTopmost(void);
extern float SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches); extern float SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches);
extern void SDL_OnApplicationWillTerminate();
extern void SDL_OnApplicationDidReceiveMemoryWarning();
extern void SDL_OnApplicationWillResignActive();
extern void SDL_OnApplicationDidEnterBackground();
extern void SDL_OnApplicationWillEnterForeground();
extern void SDL_OnApplicationDidBecomeActive();
#endif /* SDL_sysvideo_h_ */ #endif /* SDL_sysvideo_h_ */
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View file

@ -3857,4 +3857,51 @@ SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches)
SDL_sqrt((double)den2)); SDL_sqrt((double)den2));
} }
void SDL_OnApplicationWillTerminate()
{
SDL_SendAppEvent(SDL_APP_TERMINATING);
}
void SDL_OnApplicationDidReceiveMemoryWarning()
{
SDL_SendAppEvent(SDL_APP_LOWMEMORY);
}
void SDL_OnApplicationWillResignActive()
{
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this) {
SDL_Window *window;
for (window = _this->windows; window != NULL; window = window->next) {
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0);
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
}
}
SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
}
void SDL_OnApplicationDidEnterBackground()
{
SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND);
}
void SDL_OnApplicationWillEnterForeground()
{
SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND);
}
void SDL_OnApplicationDidBecomeActive()
{
SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND);
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this) {
SDL_Window *window;
for (window = _this->windows; window != NULL; window = window->next) {
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_GAINED, 0, 0);
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0);
}
}
}
/* vi: set ts=4 sw=4 expandtab: */ /* vi: set ts=4 sw=4 expandtab: */

View file

@ -442,16 +442,6 @@ SDL_LoadLaunchImageNamed(NSString *name, int screenh)
/* Do nothing. */ /* Do nothing. */
} }
- (void)applicationWillTerminate:(UIApplication *)application
{
SDL_SendAppEvent(SDL_APP_TERMINATING);
}
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
SDL_SendAppEvent(SDL_APP_LOWMEMORY);
}
#if !TARGET_OS_TV #if !TARGET_OS_TV
- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation - (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
{ {
@ -482,41 +472,34 @@ SDL_LoadLaunchImageNamed(NSString *name, int screenh)
} }
#endif #endif
- (void)applicationWillTerminate:(UIApplication *)application
{
SDL_OnApplicationWillTerminate();
}
- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
SDL_OnApplicationDidReceiveMemoryWarning();
}
- (void)applicationWillResignActive:(UIApplication*)application - (void)applicationWillResignActive:(UIApplication*)application
{ {
SDL_VideoDevice *_this = SDL_GetVideoDevice(); SDL_OnApplicationWillResignActive();
if (_this) {
SDL_Window *window;
for (window = _this->windows; window != NULL; window = window->next) {
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_LOST, 0, 0);
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_MINIMIZED, 0, 0);
}
}
SDL_SendAppEvent(SDL_APP_WILLENTERBACKGROUND);
} }
- (void)applicationDidEnterBackground:(UIApplication*)application - (void)applicationDidEnterBackground:(UIApplication*)application
{ {
SDL_SendAppEvent(SDL_APP_DIDENTERBACKGROUND); SDL_OnApplicationDidEnterBackground();
} }
- (void)applicationWillEnterForeground:(UIApplication*)application - (void)applicationWillEnterForeground:(UIApplication*)application
{ {
SDL_SendAppEvent(SDL_APP_WILLENTERFOREGROUND); SDL_OnApplicationWillEnterForeground();
} }
- (void)applicationDidBecomeActive:(UIApplication*)application - (void)applicationDidBecomeActive:(UIApplication*)application
{ {
SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND); SDL_OnApplicationDidBecomeActive();
SDL_VideoDevice *_this = SDL_GetVideoDevice();
if (_this) {
SDL_Window *window;
for (window = _this->windows; window != nil; window = window->next) {
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_FOCUS_GAINED, 0, 0);
SDL_SendWindowEvent(window, SDL_WINDOWEVENT_RESTORED, 0, 0);
}
}
} }
- (void)sendDropFileForURL:(NSURL *)url - (void)sendDropFileForURL:(NSURL *)url