From 978dd06ee8820a347566ee1d9c88f59fe03aaa2c Mon Sep 17 00:00:00 2001 From: Joshua Granick Date: Fri, 20 Mar 2015 07:22:02 -0700 Subject: [PATCH] Working on iOS --- include.xml | 7 --- project/src/backend/sdl/SDLApplication.cpp | 50 ++++++++++++---------- project/src/backend/sdl/SDLApplication.h | 9 ++-- project/src/backend/sdl/SDLWindow.cpp | 3 ++ 4 files changed, 36 insertions(+), 33 deletions(-) diff --git a/include.xml b/include.xml index 4b24795bd..a07bd5234 100644 --- a/include.xml +++ b/include.xml @@ -33,13 +33,6 @@ - - - - - - - diff --git a/project/src/backend/sdl/SDLApplication.cpp b/project/src/backend/sdl/SDLApplication.cpp index 2b0a362b2..04aea7186 100644 --- a/project/src/backend/sdl/SDLApplication.cpp +++ b/project/src/backend/sdl/SDLApplication.cpp @@ -14,24 +14,18 @@ namespace lime { AutoGCRoot* Application::callback = 0; - - - double Application::GetTicks () { - - return SDL_GetTicks (); - - } + SDLApplication* SDLApplication::currentApplication = 0; SDLApplication::SDLApplication () { SDL_Init (SDL_INIT_VIDEO | SDL_INIT_GAMECONTROLLER | SDL_INIT_TIMER); - #ifdef EMSCRIPTEN currentApplication = this; + #ifdef EMSCRIPTEN emscripten_cancel_main_loop (); - emscripten_set_main_loop (EmscriptenUpdate, 0, 0); + emscripten_set_main_loop (UpdateFrame, 0, 0); emscripten_set_main_loop_timing (EM_TIMING_RAF, 1); #endif @@ -194,7 +188,7 @@ namespace lime { } - void SDLApplication::Init() { + void SDLApplication::Init () { framePeriod = 1000.0 / 60.0; active = true; @@ -380,6 +374,15 @@ namespace lime { } + void SDLApplication::RegisterWindow (SDLWindow *window) { + + #ifdef IPHONE + SDL_iPhoneSetAnimationCallback (window->sdlWindow, 1, UpdateFrame, NULL); + #endif + + } + + static SDL_TimerID timerID = 0; bool timerActive = false; bool firstTime = true; @@ -410,7 +413,7 @@ namespace lime { SDL_Event event; event.type = -1; - #ifndef EMSCRIPTEN + #if (!defined (EMSCRIPTEN) && !defined (IPHONE)) if (active && (firstTime || SDL_WaitEvent (&event))) { @@ -464,6 +467,20 @@ namespace lime { } + void SDLApplication::UpdateFrame (void*) { + + currentApplication->Update (); + + } + + + double Application::GetTicks () { + + return SDL_GetTicks (); + + } + + Application* CreateApplication () { return new SDLApplication (); @@ -471,17 +488,6 @@ namespace lime { } - #ifdef EMSCRIPTEN - SDLApplication* SDLApplication::currentApplication = 0; - - void SDLApplication::EmscriptenUpdate () { - - currentApplication->Update (); - - } - #endif - - } diff --git a/project/src/backend/sdl/SDLApplication.h b/project/src/backend/sdl/SDLApplication.h index caf79ce68..05ede7060 100644 --- a/project/src/backend/sdl/SDLApplication.h +++ b/project/src/backend/sdl/SDLApplication.h @@ -11,6 +11,7 @@ #include #include #include +#include "SDLWindow.h" namespace lime { @@ -28,10 +29,7 @@ namespace lime { virtual int Quit (); virtual bool Update (); - #ifdef EMSCRIPTEN - static SDLApplication *currentApplication; - static void EmscriptenUpdate (); - #endif + void RegisterWindow (SDLWindow *window); private: @@ -42,6 +40,9 @@ namespace lime { void ProcessTouchEvent (SDL_Event* event); void ProcessWindowEvent (SDL_Event* event); + static void UpdateFrame (void*); + static SDLApplication* currentApplication; + bool active; Uint32 currentUpdate; double framePeriod; diff --git a/project/src/backend/sdl/SDLWindow.cpp b/project/src/backend/sdl/SDLWindow.cpp index 7ca2f358d..e10f51e3e 100644 --- a/project/src/backend/sdl/SDLWindow.cpp +++ b/project/src/backend/sdl/SDLWindow.cpp @@ -1,4 +1,5 @@ #include "SDLWindow.h" +#include "SDLApplication.h" #ifdef HX_WINDOWS #include @@ -35,6 +36,8 @@ namespace lime { sdlWindow = SDL_CreateWindow (title, SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, width, height, sdlFlags); + ((SDLApplication*)currentApplication)->RegisterWindow (this); + #ifdef HX_WINDOWS HINSTANCE handle = ::GetModuleHandle (nullptr);