diff options
author | Dees_Troy <dees_troy@teamw.in> | 2013-01-18 18:00:54 +0100 |
---|---|---|
committer | Dees_Troy <dees_troy@teamw.in> | 2013-01-18 18:07:31 +0100 |
commit | 4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540 (patch) | |
tree | 222331d15467e2167212fee37ce1eecf3107986f /gui/gui.cpp | |
parent | Save version to cache (diff) | |
download | android_bootable_recovery-4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540.tar android_bootable_recovery-4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540.tar.gz android_bootable_recovery-4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540.tar.bz2 android_bootable_recovery-4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540.tar.lz android_bootable_recovery-4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540.tar.xz android_bootable_recovery-4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540.tar.zst android_bootable_recovery-4bc09ae4361b6fc1f1a5044ea102e3fe6f3ce540.zip |
Diffstat (limited to 'gui/gui.cpp')
-rw-r--r-- | gui/gui.cpp | 80 |
1 files changed, 77 insertions, 3 deletions
diff --git a/gui/gui.cpp b/gui/gui.cpp index e128337b5..c431d8fe0 100644 --- a/gui/gui.cpp +++ b/gui/gui.cpp @@ -60,6 +60,7 @@ static int gGuiConsoleRunning = 0; static int gGuiConsoleTerminate = 0; static int gForceRender = 0; static int gNoAnimation = 1; +static int gGuiInputRunning = 0; // Needed by pages.cpp too int gGuiRunning = 0; @@ -391,6 +392,56 @@ static int runPages(void) return 0; } +static int runPage(const char* page_name) +{ + gui_changePage(page_name); + + // Raise the curtain + if (gCurtain != NULL) + { + gr_surface surface; + + PageManager::Render(); + gr_get_surface(&surface); + curtainRaise(surface); + gr_free_surface(surface); + } + + gGuiRunning = 1; + + DataManager::SetValue("tw_loaded", 1); + + for (;;) + { + loopTimer(); + + if (!gForceRender) + { + int ret; + + ret = PageManager::Update(); + if (ret > 1) + PageManager::Render(); + + if (ret > 0) + flip(); + } + else + { + gForceRender = 0; + PageManager::Render(); + flip(); + } + if (DataManager::GetIntValue("tw_page_done") != 0) { + gui_changePage("main"); + break; + } + } + + gGuiRunning = 0; + return 0; +} + int gui_forceRender(void) { gForceRender = 1; @@ -537,13 +588,36 @@ extern "C" int gui_start() // Set the default package PageManager::SelectPackage("TWRP"); - // Start by spinning off an input handler. - pthread_t t; - pthread_create(&t, NULL, input_thread, NULL); + if (!gGuiInputRunning) { + // Start by spinning off an input handler. + pthread_t t; + pthread_create(&t, NULL, input_thread, NULL); + gGuiInputRunning = 1; + } return runPages(); } +extern "C" int gui_startPage(const char* page_name) +{ + if (!gGuiInitialized) return -1; + + gGuiConsoleTerminate = 1; + while (gGuiConsoleRunning) loopTimer(); + + // Set the default package + PageManager::SelectPackage("TWRP"); + + if (!gGuiInputRunning) { + // Start by spinning off an input handler. + pthread_t t; + pthread_create(&t, NULL, input_thread, NULL); + gGuiInputRunning = 1; + } + + return runPage(page_name); +} + static void *console_thread(void *cookie) { PageManager::SwitchToConsole(); |