Refactor overlay init/free

This commit is contained in:
twinaphex 2014-08-02 12:36:48 +02:00
parent 53ae4cd72c
commit 7d4b6b23c5
5 changed files with 35 additions and 29 deletions

View File

@ -1197,18 +1197,8 @@ void init_video_input(void)
}
#ifdef HAVE_OVERLAY
if (driver.overlay)
{
input_overlay_free(driver.overlay);
driver.overlay = NULL;
}
if (*g_settings.input.overlay)
{
driver.overlay = input_overlay_new(g_settings.input.overlay);
if (!driver.overlay)
RARCH_ERR("Failed to load overlay.\n");
}
rarch_main_command(RARCH_CMD_OVERLAY_FREE);
rarch_main_command(RARCH_CMD_OVERLAY_INIT);
#endif
g_extern.measure_data.frame_time_samples_count = 0;
@ -1217,12 +1207,7 @@ void init_video_input(void)
void uninit_video_input(void)
{
#ifdef HAVE_OVERLAY
if (driver.overlay)
{
input_overlay_free(driver.overlay);
driver.overlay = NULL;
memset(&driver.overlay_state, 0, sizeof(driver.overlay_state));
}
rarch_main_command(RARCH_CMD_OVERLAY_FREE);
#endif
if (!driver.input_data_own && driver.input_data != driver.video_data && driver.input && driver.input->free)

View File

@ -3704,9 +3704,7 @@ static int menu_common_setting_set(unsigned setting, unsigned action)
menu_common_setting_push_current_menu(driver.menu->menu_stack, g_extern.overlay_dir, setting, driver.menu->selection_ptr, action);
break;
case MENU_ACTION_START:
if (driver.overlay)
input_overlay_free(driver.overlay);
driver.overlay = NULL;
rarch_main_command(RARCH_CMD_OVERLAY_FREE);
*g_settings.input.overlay = '\0';
break;
default:

View File

@ -104,6 +104,8 @@ enum basic_event
RARCH_CMD_AUTOSAVE,
RARCH_CMD_AUDIO_STOP,
RARCH_CMD_AUDIO_START,
RARCH_CMD_OVERLAY_INIT,
RARCH_CMD_OVERLAY_FREE,
};
enum menu_enums

View File

@ -3211,6 +3211,24 @@ void rarch_main_command(unsigned action)
g_extern.audio_active = false;
}
break;
case RARCH_CMD_OVERLAY_INIT:
#ifdef HAVE_OVERLAY
if (*g_settings.input.overlay && g_settings.input.overlay[0] != '\0')
{
driver.overlay = input_overlay_new(g_settings.input.overlay);
if (!driver.overlay)
RARCH_ERR("Failed to load overlay.\n");
}
#endif
break;
case RARCH_CMD_OVERLAY_FREE:
#ifdef HAVE_OVERLAY
if (driver.overlay)
input_overlay_free(driver.overlay);
driver.overlay = NULL;
memset(&driver.overlay_state, 0, sizeof(driver.overlay_state));
#endif
break;
}
}

View File

@ -980,6 +980,8 @@ static void general_write_handler(const void *data)
bool has_set_reinit = false;
bool has_set_rewind = false;
bool has_set_autosave = false;
bool has_set_overlay_init = false;
bool has_set_overlay_free = false;
const rarch_setting_t *setting = (const rarch_setting_t*)data;
if (!setting)
@ -1144,11 +1146,8 @@ static void general_write_handler(const void *data)
{
strlcpy(g_settings.input.overlay, setting->value.string, sizeof(g_settings.input.overlay));
if (driver.overlay)
input_overlay_free(driver.overlay);
if (g_settings.input.overlay && g_settings.input.overlay[0] != '\0')
driver.overlay = input_overlay_new(g_settings.input.overlay);
has_set_overlay_free = false;
has_set_overlay_init = true;
}
else if (!strcmp(setting->name, "input_overlay_scale"))
{
@ -1338,6 +1337,10 @@ static void general_write_handler(const void *data)
rarch_main_command(RARCH_CMD_REWIND);
if (has_set_autosave)
rarch_main_command(RARCH_CMD_AUTOSAVE);
if (has_set_overlay_free)
rarch_main_command(RARCH_CMD_OVERLAY_FREE);
if (has_set_overlay_init)
rarch_main_command(RARCH_CMD_OVERLAY_INIT);
}
#define NEXT (list[index++])