Only carry one input overlay state

This commit is contained in:
twinaphex 2015-01-29 22:54:42 +01:00
parent 0ea6a28b6b
commit d327863d0f
8 changed files with 22 additions and 77 deletions

View File

@ -283,7 +283,6 @@ typedef struct driver
#ifdef HAVE_OVERLAY
input_overlay_t *overlay;
input_overlay_t *osk_overlay;
input_overlay_state_t overlay_state;
#endif

View File

@ -850,6 +850,7 @@ void input_overlay_poll_clear(input_overlay_t *ol, float opacity)
size_t i;
ol->blocked = false;
input_overlay_set_alpha_mod(ol, opacity);
for (i = 0; i < ol->active->size; i++)

View File

@ -51,7 +51,8 @@ void input_keyboard_line_free(input_keyboard_line_t *state)
free(state->buffer);
free(state);
rarch_main_command(RARCH_CMD_OSK_OVERLAY_STOP);
rarch_main_command(RARCH_CMD_OVERLAY_DEINIT);
driver.osk_active = false;
}
/**
@ -76,7 +77,8 @@ input_keyboard_line_t *input_keyboard_line_new(void *userdata,
state->cb = cb;
state->userdata = userdata;
rarch_main_command(RARCH_CMD_OSK_OVERLAY_START);
driver.osk_active = true;
rarch_main_command(RARCH_CMD_OVERLAY_INIT);
return state;
}

View File

@ -602,19 +602,15 @@ static inline void input_poll_overlay(input_overlay_t *overlay_device, float opa
static void input_poll(void)
{
#ifdef HAVE_OVERLAY
input_overlay_t *overlay_device = driver.overlay;
float opacity = g_settings.input.overlay_opacity;
if (driver.osk_active)
{
overlay_device = driver.osk_overlay;
opacity = g_settings.osk.opacity;
}
#endif
driver.input->poll(driver.input_data);
#ifdef HAVE_OVERLAY
if (overlay_device)
input_poll_overlay(overlay_device, opacity);
if (driver.overlay)
input_poll_overlay(driver.overlay, opacity);
#endif
#ifdef HAVE_COMMAND

View File

@ -2676,53 +2676,23 @@ bool rarch_main_command(unsigned cmd)
case RARCH_CMD_OVERLAY_INIT:
rarch_main_command(RARCH_CMD_OVERLAY_DEINIT);
#ifdef HAVE_OVERLAY
if (!*g_settings.input.overlay)
break;
if (driver.osk_active)
{
if (!*g_settings.osk.overlay)
break;
}
else
{
if (!*g_settings.input.overlay)
break;
}
driver.overlay = input_overlay_new(g_settings.input.overlay, g_settings.input.overlay_enable,
g_settings.input.overlay_opacity, g_settings.input.overlay_scale);
driver.overlay = input_overlay_new(driver.osk_active ? g_settings.osk.overlay : g_settings.input.overlay,
driver.osk_active ? g_settings.osk.enable : g_settings.input.overlay_enable,
driver.osk_active ? g_settings.osk.opacity : g_settings.input.overlay_opacity,
driver.osk_active ? g_settings.osk.scale : g_settings.input.overlay_scale);
if (!driver.overlay)
RARCH_ERR("Failed to load overlay.\n");
#endif
break;
case RARCH_CMD_OSK_OVERLAY_STOP:
#ifdef HAVE_OVERLAY
driver.osk_active = false;
rarch_main_command(RARCH_CMD_OSK_OVERLAY_DEINIT);
if (g_settings.input.overlay_enable)
rarch_main_command(RARCH_CMD_OSK_OVERLAY_INIT);
#endif
break;
case RARCH_CMD_OSK_OVERLAY_START:
#ifdef HAVE_OVERLAY
if (!g_settings.osk.enable)
return false;
rarch_main_command(RARCH_CMD_OVERLAY_DEINIT);
rarch_main_command(RARCH_CMD_OSK_OVERLAY_INIT);
driver.osk_active = true;
#endif
break;
case RARCH_CMD_OSK_OVERLAY_DEINIT:
#ifdef HAVE_OVERLAY
if (driver.osk_overlay)
input_overlay_free(driver.osk_overlay);
driver.osk_overlay = NULL;
#endif
break;
case RARCH_CMD_OSK_OVERLAY_INIT:
#ifdef HAVE_OVERLAY
rarch_main_command(RARCH_CMD_OSK_OVERLAY_DEINIT);
driver.osk_overlay = input_overlay_new(g_settings.osk.overlay, g_settings.osk.enable,
100, g_settings.osk.scale);
if (!driver.osk_overlay)
RARCH_ERR("Failed to load OSK overlay.\n");
#endif
break;
case RARCH_CMD_OVERLAY_NEXT:

View File

@ -70,14 +70,6 @@ enum basic_event
RARCH_CMD_OVERLAY_SET_ALPHA_MOD,
/* Cycle to next overlay. */
RARCH_CMD_OVERLAY_NEXT,
/* Start OSK overlay. */
RARCH_CMD_OSK_OVERLAY_START,
/* Stops OSK overlay. */
RARCH_CMD_OSK_OVERLAY_STOP,
/* Initializes graphics filter. */
RARCH_CMD_OSK_OVERLAY_INIT,
/* Initializes overlay. */
RARCH_CMD_OSK_OVERLAY_DEINIT,
/* Deinitializes overlay. */
RARCH_CMD_DSP_FILTER_INIT,
/* Deinitializes graphics filter. */

View File

@ -1984,7 +1984,7 @@ bool config_save_file(const char *path)
config_set_path(conf, "osk_overlay_directory",
*g_extern.osk_overlay_dir ? g_extern.osk_overlay_dir : "default");
config_set_path(conf, "input_osk_overlay", g_settings.input.overlay);
config_set_path(conf, "input_osk_overlay", g_settings.osk.overlay);
config_set_bool(conf, "input_osk_overlay_enable", g_settings.osk.enable);
#endif

View File

@ -3311,19 +3311,6 @@ static void load_content_change_handler(void *data)
rarch_main_command(RARCH_CMD_LOAD_CONTENT);
}
static void osk_overlay_enable_toggle_change_handler(void *data)
{
rarch_setting_t *setting = (rarch_setting_t *)data;
if (!setting)
return;
if (setting->value.boolean)
rarch_main_command(RARCH_CMD_OSK_OVERLAY_INIT);
else
rarch_main_command(RARCH_CMD_OSK_OVERLAY_DEINIT);
}
static void overlay_enable_toggle_change_handler(void *data)
{
rarch_setting_t *setting = (rarch_setting_t *)data;
@ -5249,7 +5236,6 @@ static bool setting_data_append_list_osk_overlay_options(
subgroup_info.name,
general_write_handler,
general_read_handler);
(*list)[list_info->index - 1].change_handler = osk_overlay_enable_toggle_change_handler;
CONFIG_PATH(
g_settings.osk.overlay,
@ -5261,7 +5247,6 @@ static bool setting_data_append_list_osk_overlay_options(
general_write_handler,
general_read_handler);
settings_list_current_add_values(list, list_info, "cfg");
settings_list_current_add_cmd(list, list_info, RARCH_CMD_OSK_OVERLAY_INIT);
settings_data_list_current_add_flags(list, list_info, SD_FLAG_ALLOW_EMPTY);
END_SUB_GROUP(list, list_info);