From 985c6a4ed28cc520e456a26fe06264a121edc104 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Sun, 22 Jan 2017 17:19:10 +0100 Subject: [PATCH] Create menu_driver_render --- menu/menu_driver.c | 83 ++++++++++++++++++++++++---------------------- menu/menu_driver.h | 3 +- runloop.c | 2 +- 3 files changed, 46 insertions(+), 42 deletions(-) diff --git a/menu/menu_driver.c b/menu/menu_driver.c index d5b3560979..d70b560968 100644 --- a/menu/menu_driver.c +++ b/menu/menu_driver.c @@ -252,7 +252,7 @@ static void menu_driver_toggle(bool on) runloop_ctl(RUNLOOP_CTL_FRONTEND_KEY_EVENT_GET, &frontend_key_event); runloop_ctl(RUNLOOP_CTL_KEY_EVENT_GET, &key_event); - if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL)) + if (menu_driver_alive) { bool refresh = false; menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); @@ -330,6 +330,48 @@ static void menu_update_libretro_info(void) command_event(CMD_EVENT_LOAD_CORE_PERSIST, NULL); } +bool menu_driver_render(bool is_idle) +{ + if (!menu_driver_data) + return false; + + if (BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_FRAMEBUFFER) + != BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_MESSAGEBOX)) + BIT64_SET(menu_driver_data->state, MENU_STATE_RENDER_FRAMEBUFFER); + + if (BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_FRAMEBUFFER)) + menu_display_set_framebuffer_dirty_flag(); + + if (BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_MESSAGEBOX) + && !string_is_empty(menu_driver_data->menu_state.msg)) + { + menu_driver_ctl(RARCH_MENU_CTL_RENDER_MESSAGEBOX, NULL); + + if (ui_companion_is_on_foreground()) + { + const ui_companion_driver_t *ui = ui_companion_get_ptr(); + if (ui->render_messagebox) + ui->render_messagebox(menu_driver_data->menu_state.msg); + } + } + + if (BIT64_GET(menu_driver_data->state, MENU_STATE_BLIT)) + { + settings_t *settings = config_get_ptr(); + menu_animation_update_time(settings->menu.timedate_enable); + menu_driver_ctl(RARCH_MENU_CTL_BLIT_RENDER, NULL); + } + + if (menu_driver_alive && !is_idle) + menu_display_libretro(); + + menu_driver_ctl(RARCH_MENU_CTL_SET_TEXTURE, NULL); + + menu_driver_data->state = 0; + + return true; +} + bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data) { switch (state) @@ -454,45 +496,6 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data) if (menu_driver_ctx->render) menu_driver_ctx->render(menu_userdata); break; - case RARCH_MENU_CTL_RENDER: - if (!menu_driver_data) - return false; - - if (BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_FRAMEBUFFER) - != BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_MESSAGEBOX)) - BIT64_SET(menu_driver_data->state, MENU_STATE_RENDER_FRAMEBUFFER); - - if (BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_FRAMEBUFFER)) - menu_display_set_framebuffer_dirty_flag(); - - if (BIT64_GET(menu_driver_data->state, MENU_STATE_RENDER_MESSAGEBOX) - && !string_is_empty(menu_driver_data->menu_state.msg)) - { - menu_driver_ctl(RARCH_MENU_CTL_RENDER_MESSAGEBOX, NULL); - - if (ui_companion_is_on_foreground()) - { - const ui_companion_driver_t *ui = ui_companion_get_ptr(); - if (ui->render_messagebox) - ui->render_messagebox(menu_driver_data->menu_state.msg); - } - } - - if (BIT64_GET(menu_driver_data->state, MENU_STATE_BLIT)) - { - settings_t *settings = config_get_ptr(); - menu_animation_update_time(settings->menu.timedate_enable); - menu_driver_ctl(RARCH_MENU_CTL_BLIT_RENDER, NULL); - } - - if (menu_driver_ctl(RARCH_MENU_CTL_IS_ALIVE, NULL) - && !runloop_ctl(RUNLOOP_CTL_IS_IDLE, NULL)) - menu_display_libretro(); - - menu_driver_ctl(RARCH_MENU_CTL_SET_TEXTURE, NULL); - - menu_driver_data->state = 0; - break; case RARCH_MENU_CTL_SET_PREVENT_POPULATE: menu_driver_prevent_populate = true; break; diff --git a/menu/menu_driver.h b/menu/menu_driver.h index bc1e836524..7970239bec 100644 --- a/menu/menu_driver.h +++ b/menu/menu_driver.h @@ -97,7 +97,6 @@ enum rarch_menu_ctl_state RARCH_MENU_CTL_DEINIT, RARCH_MENU_CTL_INIT, RARCH_MENU_CTL_BLIT_RENDER, - RARCH_MENU_CTL_RENDER, RARCH_MENU_CTL_RENDER_MESSAGEBOX, RARCH_MENU_CTL_SET_PREVENT_POPULATE, RARCH_MENU_CTL_UNSET_PREVENT_POPULATE, @@ -383,6 +382,8 @@ extern unsigned int rdb_entry_start_game_selection_ptr; const char *menu_driver_ident(void); +bool menu_driver_render(bool is_idle); + bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data); bool menu_driver_is_binding_state(void); diff --git a/runloop.c b/runloop.c index a35cc012d7..3947b4802c 100644 --- a/runloop.c +++ b/runloop.c @@ -778,7 +778,7 @@ static enum runloop_state runloop_check_state( rarch_ctl(RARCH_CTL_MENU_RUNNING_FINISHED, NULL); if (focused || !runloop_idle) - menu_driver_ctl(RARCH_MENU_CTL_RENDER, NULL); + menu_driver_render(runloop_idle); if (!focused) return RUNLOOP_STATE_SLEEP;