Skip to content
Permalink
Browse files

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
  • Loading branch information
slouken committed May 9, 2017
1 parent 60f2848 commit 9ac3bb701189e51f5df13a44dbc254f5d0063e82
Showing with 68 additions and 31 deletions.
  1. +7 −0 src/video/SDL_sysvideo.h
  2. +47 −0 src/video/SDL_video.c
  3. +14 −31 src/video/uikit/SDL_uikitappdelegate.m
@@ -418,6 +418,13 @@ extern SDL_bool SDL_ShouldAllowTopmost(void);

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_ */

/* vi: set ts=4 sw=4 expandtab: */
@@ -3857,4 +3857,51 @@ SDL_ComputeDiagonalDPI(int hpix, int vpix, float hinches, float vinches)
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: */
@@ -442,16 +442,6 @@ - (void)setWindow:(UIWindow *)window
/* Do nothing. */
}

- (void)applicationWillTerminate:(UIApplication *)application
{
SDL_SendAppEvent(SDL_APP_TERMINATING);
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
SDL_SendAppEvent(SDL_APP_LOWMEMORY);
}

#if !TARGET_OS_TV
- (void)application:(UIApplication *)application didChangeStatusBarOrientation:(UIInterfaceOrientation)oldStatusBarOrientation
{
@@ -482,41 +472,34 @@ - (void)application:(UIApplication *)application didChangeStatusBarOrientation:(
}
#endif

- (void)applicationWillTerminate:(UIApplication *)application
{
SDL_OnApplicationWillTerminate();
}

- (void)applicationDidReceiveMemoryWarning:(UIApplication *)application
{
SDL_OnApplicationDidReceiveMemoryWarning();
}

- (void)applicationWillResignActive:(UIApplication*)application
{
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);
SDL_OnApplicationWillResignActive();
}

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

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

- (void)applicationDidBecomeActive:(UIApplication*)application
{
SDL_SendAppEvent(SDL_APP_DIDENTERFOREGROUND);

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);
}
}
SDL_OnApplicationDidBecomeActive();
}

- (void)sendDropFileForURL:(NSURL *)url

0 comments on commit 9ac3bb7

Please sign in to comment.