diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index 4afe6ce851..60ddb1e38e 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -396,8 +396,16 @@ static void menu_common_entries_init(void *data, unsigned menu_type) file_list_clear(menu->selection_buf); file_list_push(menu->selection_buf, "Overlay Enable", MENU_SETTINGS_OVERLAY_ENABLE, 0); file_list_push(menu->selection_buf, "Overlay Preset", MENU_SETTINGS_OVERLAY_PRESET, 0); - file_list_push(menu->selection_buf, "Overlay Opacity", MENU_SETTINGS_OVERLAY_OPACITY, 0); - file_list_push(menu->selection_buf, "Overlay Scale", MENU_SETTINGS_OVERLAY_SCALE, 0); + if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "input_overlay_opacity"))) + { + *current_setting->value.fraction = g_settings.input.overlay_opacity; + file_list_push(menu->selection_buf, current_setting->short_description, MENU_SETTINGS_OVERLAY_OPACITY, 0); + } + if ((current_setting = setting_data_find_setting(setting_data, "input_overlay_scale"))) + { + *current_setting->value.fraction = g_settings.input.overlay_scale; + file_list_push(menu->selection_buf, current_setting->short_description, MENU_SETTINGS_OVERLAY_SCALE, 0); + } break; #ifdef HAVE_NETPLAY case MENU_SETTINGS_NETPLAY_OPTIONS: @@ -3930,72 +3938,62 @@ static int menu_common_setting_set(unsigned setting, unsigned action) break; #ifdef HAVE_OVERLAY case MENU_SETTINGS_OVERLAY_OPACITY: + if ((current_setting = setting_data_find_setting(setting_data, "input_overlay_opacity"))) { - bool changed = true; switch (action) { case MENU_ACTION_LEFT: - g_settings.input.overlay_opacity -= 0.01f; + *current_setting->value.fraction = *current_setting->value.fraction - 0.01f; - if (g_settings.input.overlay_opacity < 0.0f) - g_settings.input.overlay_opacity = 0.0f; + if (*current_setting->value.fraction < current_setting->min) + *current_setting->value.fraction = current_setting->min; break; case MENU_ACTION_RIGHT: case MENU_ACTION_OK: - g_settings.input.overlay_opacity += 0.01f; + *current_setting->value.fraction = *current_setting->value.fraction + 0.01f; - if (g_settings.input.overlay_opacity > 1.0f) - g_settings.input.overlay_opacity = 1.0f; + if (*current_setting->value.fraction > current_setting->max) + *current_setting->value.fraction = current_setting->max; break; case MENU_ACTION_START: - g_settings.input.overlay_opacity = 0.7f; - break; - - default: - changed = false; + *current_setting->value.fraction = current_setting->default_value.fraction; break; } - if (changed && driver.overlay) - input_overlay_set_alpha_mod(driver.overlay, - g_settings.input.overlay_opacity); + if (current_setting->change_handler) + current_setting->change_handler(current_setting); break; } case MENU_SETTINGS_OVERLAY_SCALE: + if ((current_setting = setting_data_find_setting(setting_data, "input_overlay_scale"))) { - bool changed = true; switch (action) { case MENU_ACTION_LEFT: - g_settings.input.overlay_scale -= 0.01f; + *current_setting->value.fraction = *current_setting->value.fraction - 0.01f; - if (g_settings.input.overlay_scale < 0.01f) // Avoid potential divide by zero. - g_settings.input.overlay_scale = 0.01f; + if (*current_setting->value.fraction < current_setting->min) + *current_setting->value.fraction = current_setting->min; break; case MENU_ACTION_RIGHT: case MENU_ACTION_OK: - g_settings.input.overlay_scale += 0.01f; + *current_setting->value.fraction = *current_setting->value.fraction + 0.01f; - if (g_settings.input.overlay_scale > 2.0f) - g_settings.input.overlay_scale = 2.0f; + if (*current_setting->value.fraction > current_setting->max) + *current_setting->value.fraction = current_setting->max; break; case MENU_ACTION_START: - g_settings.input.overlay_scale = 1.0f; - break; - - default: - changed = false; + *current_setting->value.fraction = current_setting->default_value.fraction; break; } - if (changed && driver.overlay) - input_overlay_set_scale_factor(driver.overlay, - g_settings.input.overlay_scale); + if (current_setting->change_handler) + current_setting->change_handler(current_setting); break; } #endif diff --git a/settings_data.c b/settings_data.c index 86645e2441..4e7b4fc892 100644 --- a/settings_data.c +++ b/settings_data.c @@ -501,7 +501,12 @@ static void general_change_handler(const void *data) } } else if (!strcmp(setting->name, "input_overlay_opacity")) + { g_settings.input.overlay_opacity = *setting->value.fraction; + if (driver.overlay) + input_overlay_set_alpha_mod(driver.overlay, + g_settings.input.overlay_opacity); + } else if (!strcmp(setting->name, "audio_enable")) g_settings.audio.enable = *setting->value.boolean; else if (!strcmp(setting->name, "audio_sync")) @@ -598,12 +603,16 @@ static void general_change_handler(const void *data) } else if (!strcmp(setting->name, "input_overlay_scale")) { - if (*setting->value.fraction < 0.01f) // Avoid potential divide by zero. - g_settings.input.overlay_scale = 0.01f; - else if (*setting->value.fraction > 2.0f) - g_settings.input.overlay_scale = 2.0f; + if (*setting->value.fraction < setting->min) // Avoid potential divide by zero. + g_settings.input.overlay_scale = setting->min; + else if (*setting->value.fraction > setting->max) + g_settings.input.overlay_scale = setting->max; else g_settings.input.overlay_scale = *setting->value.fraction; + + if (driver.overlay) + input_overlay_set_scale_factor(driver.overlay, + g_settings.input.overlay_scale); } else if (!strcmp(setting->name, "video_allow_rotate")) g_settings.video.allow_rotate = *setting->value.boolean; @@ -1007,7 +1016,7 @@ rarch_setting_t* setting_data_get_list(void) CONFIG_BOOL(g_settings.input.overlay_enable, "input_overlay_enable", "Overlay Enable", default_overlay_enable, GROUP_NAME, SUBGROUP_NAME, general_change_handler) CONFIG_PATH(g_settings.input.overlay, "input_overlay", "Overlay Preset", "", GROUP_NAME, SUBGROUP_NAME, general_change_handler) WITH_FLAGS(SD_FLAG_ALLOW_EMPTY) WITH_VALUES("cfg") CONFIG_FLOAT(g_settings.input.overlay_opacity, "input_overlay_opacity", "Overlay Opacity", 0.7f, GROUP_NAME, SUBGROUP_NAME, general_change_handler) WITH_RANGE(0, 1) - CONFIG_FLOAT(g_settings.input.overlay_scale, "input_overlay_scale", "Overlay Scale", 1.0f, GROUP_NAME, SUBGROUP_NAME, general_change_handler) + CONFIG_FLOAT(g_settings.input.overlay_scale, "input_overlay_scale", "Overlay Scale", 1.0f, GROUP_NAME, SUBGROUP_NAME, general_change_handler) WITH_RANGE(0, 2) END_SUB_GROUP() END_GROUP() #endif