diff --git a/frontend/menu/backend/menu_common_backend.c b/frontend/menu/backend/menu_common_backend.c index bc8e876060..946ef4e835 100644 --- a/frontend/menu/backend/menu_common_backend.c +++ b/frontend/menu/backend/menu_common_backend.c @@ -171,7 +171,11 @@ static void menu_common_entries_init(void *data, unsigned menu_type) file_list_push(menu->selection_buf, current_setting->short_description, MENU_SETTINGS_REWIND_ENABLE, 0); } - file_list_push(menu->selection_buf, "Rewind Granularity", MENU_SETTINGS_REWIND_GRANULARITY, 0); + if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "rewind_granularity"))) + { + *current_setting->value.unsigned_integer = g_settings.rewind_granularity; + file_list_push(menu->selection_buf, current_setting->short_description, MENU_SETTINGS_REWIND_GRANULARITY, 0); + } if ((current_setting = setting_data_find_setting(setting_data, "block_sram_overwrite"))) { *current_setting->value.boolean = g_settings.block_sram_overwrite; @@ -3471,23 +3475,30 @@ static void menu_common_setting_set_current_boolean(rarch_setting_t *setting, un setting->change_handler(setting); } -static void menu_common_setting_set_current_fraction(rarch_setting_t *setting, float step, unsigned action) +static void menu_common_setting_set_current_fraction(rarch_setting_t *setting, float step, unsigned action, + bool enforce_min_check, bool enforce_max_check) { switch (action) { case MENU_ACTION_LEFT: *setting->value.fraction = *setting->value.fraction - step; - if (*setting->value.fraction < setting->min) - *setting->value.fraction = setting->min; + if (enforce_min_check) + { + if (*setting->value.fraction < setting->min) + *setting->value.fraction = setting->min; + } break; case MENU_ACTION_RIGHT: case MENU_ACTION_OK: *setting->value.fraction = *setting->value.fraction + step; - if (*setting->value.fraction > setting->max) - *setting->value.fraction = setting->max; + if (enforce_max_check) + { + if (*setting->value.fraction > setting->max) + *setting->value.fraction = setting->max; + } break; case MENU_ACTION_START: @@ -3499,6 +3510,42 @@ static void menu_common_setting_set_current_fraction(rarch_setting_t *setting, f setting->change_handler(setting); } +static void menu_common_setting_set_current_unsigned_integer(rarch_setting_t *setting, unsigned step, unsigned action, + bool enforce_min_check, bool enforce_max_check) +{ + switch (action) + { + case MENU_ACTION_LEFT: + if (*setting->value.unsigned_integer != setting->min) + *setting->value.unsigned_integer = *setting->value.unsigned_integer - step; + + if (enforce_min_check) + { + if (*setting->value.unsigned_integer < setting->min) + *setting->value.unsigned_integer = setting->min; + } + break; + + case MENU_ACTION_RIGHT: + case MENU_ACTION_OK: + *setting->value.unsigned_integer = *setting->value.unsigned_integer + step; + + if (enforce_max_check) + { + if (*setting->value.unsigned_integer > setting->max) + *setting->value.unsigned_integer = setting->max; + } + break; + + case MENU_ACTION_START: + *setting->value.unsigned_integer = setting->default_value.unsigned_integer; + break; + } + + if (setting->change_handler) + setting->change_handler(setting); +} + static int menu_common_setting_set(unsigned setting, unsigned action) { rarch_setting_t *setting_data, *current_setting; @@ -3586,15 +3633,8 @@ static int menu_common_setting_set(unsigned setting, unsigned action) menu_common_setting_set_current_boolean(current_setting, action); break; case MENU_SETTINGS_REWIND_GRANULARITY: - if (action == MENU_ACTION_OK || action == MENU_ACTION_RIGHT) - g_settings.rewind_granularity++; - else if (action == MENU_ACTION_LEFT) - { - if (g_settings.rewind_granularity > 1) - g_settings.rewind_granularity--; - } - else if (action == MENU_ACTION_START) - g_settings.rewind_granularity = 1; + if ((current_setting = (rarch_setting_t*)setting_data_find_setting(setting_data, "rewind_granularity"))) + menu_common_setting_set_current_unsigned_integer(current_setting, 1, action, true, false); break; case MENU_SETTINGS_LIBRETRO_LOG_LEVEL: if (action == MENU_ACTION_LEFT) @@ -3980,11 +4020,11 @@ static int menu_common_setting_set(unsigned setting, unsigned action) #ifdef HAVE_OVERLAY case MENU_SETTINGS_OVERLAY_OPACITY: if ((current_setting = setting_data_find_setting(setting_data, "input_overlay_opacity"))) - menu_common_setting_set_current_fraction(current_setting, 0.01f, action); + menu_common_setting_set_current_fraction(current_setting, 0.01f, action, true, true); break; case MENU_SETTINGS_OVERLAY_SCALE: if ((current_setting = setting_data_find_setting(setting_data, "input_overlay_scale"))) - menu_common_setting_set_current_fraction(current_setting, 0.01f, action); + menu_common_setting_set_current_fraction(current_setting, 0.01f, action, true, true); break; #endif // controllers @@ -4276,23 +4316,7 @@ static int menu_common_setting_set(unsigned setting, unsigned action) break; case MENU_SETTINGS_VIDEO_ROTATION: if ((current_setting = setting_data_find_setting(setting_data, "video_rotation"))) - { - if (action == MENU_ACTION_START) - *current_setting->value.unsigned_integer = ORIENTATION_NORMAL; - else if (action == MENU_ACTION_LEFT) - { - if (*current_setting->value.unsigned_integer > 0) - *current_setting->value.unsigned_integer = *current_setting->value.unsigned_integer - 1; - } - else if (action == MENU_ACTION_RIGHT) - { - if (*current_setting->value.unsigned_integer < LAST_ORIENTATION) - *current_setting->value.unsigned_integer = *current_setting->value.unsigned_integer + 1; - } - - if (current_setting->change_handler) - current_setting->change_handler(current_setting); - } + menu_common_setting_set_current_unsigned_integer(current_setting, 1, action, true, true); break; case MENU_SETTINGS_VIDEO_FILTER: diff --git a/settings_data.c b/settings_data.c index 4e7b4fc892..104e3aa807 100644 --- a/settings_data.c +++ b/settings_data.c @@ -825,7 +825,7 @@ rarch_setting_t* setting_data_get_list(void) CONFIG_BOOL(g_settings.fps_show, "fps_show", "Show Framerate", fps_show, GROUP_NAME, SUBGROUP_NAME, general_change_handler) CONFIG_BOOL(g_settings.rewind_enable, "rewind_enable", "Rewind", rewind_enable, GROUP_NAME, SUBGROUP_NAME, general_change_handler) //CONFIG_SIZE(g_settings.rewind_buffer_size, "rewind_buffer_size", "Rewind Buffer Size", rewind_buffer_size, GROUP_NAME, SUBGROUP_NAME, general_change_handler) - CONFIG_UINT(g_settings.rewind_granularity, "rewind_granularity", "Rewind Granularity", rewind_granularity, GROUP_NAME, SUBGROUP_NAME, general_change_handler) + CONFIG_UINT(g_settings.rewind_granularity, "rewind_granularity", "Rewind Granularity", rewind_granularity, GROUP_NAME, SUBGROUP_NAME, general_change_handler) WITH_RANGE(1, 32768) CONFIG_BOOL(g_settings.block_sram_overwrite, "block_sram_overwrite", "SRAM Block overwrite", block_sram_overwrite, GROUP_NAME, SUBGROUP_NAME, general_change_handler) #ifdef HAVE_THREADS CONFIG_UINT(g_settings.autosave_interval, "autosave_interval", "SRAM Autosave", autosave_interval, GROUP_NAME, SUBGROUP_NAME, general_change_handler) @@ -881,7 +881,7 @@ rarch_setting_t* setting_data_get_list(void) CONFIG_UINT(g_extern.console.screen.viewports.custom_vp.height, "custom_viewport_height", "Custom Viewport Height", 0, GROUP_NAME, SUBGROUP_NAME, NULL) CONFIG_BOOL(g_settings.video.smooth, "video_smooth", "Use bilinear filtering", video_smooth, GROUP_NAME, SUBGROUP_NAME, general_change_handler) - CONFIG_UINT(g_settings.video.rotation, "video_rotation", "Rotation", 0, GROUP_NAME, SUBGROUP_NAME, general_change_handler) + CONFIG_UINT(g_settings.video.rotation, "video_rotation", "Rotation", 0, GROUP_NAME, SUBGROUP_NAME, general_change_handler) WITH_RANGE(0, 3) END_SUB_GROUP()