From 9ade7b5245e40dda3746abbd3884d441731b6414 Mon Sep 17 00:00:00 2001 From: twinaphex Date: Wed, 15 Oct 2014 00:56:20 +0200 Subject: [PATCH] Add action OK fraction callbacks --- frontend/menu/menu_action.c | 63 +--------------------------- settings_data.c | 83 +++++++++++++++++++++++++++++++++++++ 2 files changed, 85 insertions(+), 61 deletions(-) diff --git a/frontend/menu/menu_action.c b/frontend/menu/menu_action.c index 2581ee0ec0..45b0bc9baf 100644 --- a/frontend/menu/menu_action.c +++ b/frontend/menu/menu_action.c @@ -57,67 +57,8 @@ int menu_action_setting_unsigned_integer( int menu_action_setting_fraction( rarch_setting_t *setting, unsigned action) { - if (!strcmp(setting->name, "video_refresh_rate_auto")) - { - switch (action) - { - case MENU_ACTION_START: - g_extern.measure_data.frame_time_samples_count = 0; - break; - case MENU_ACTION_OK: - { - double video_refresh_rate, deviation = 0.0; - unsigned sample_points = 0; - - if (driver_monitor_fps_statistics(&video_refresh_rate, - &deviation, &sample_points)) - { - driver_set_monitor_refresh_rate(video_refresh_rate); - /* Incase refresh rate update forced non-block video. */ - rarch_main_command(RARCH_CMD_VIDEO_SET_BLOCKING_STATE); - } - - if (setting->cmd_trigger.idx != RARCH_CMD_NONE) - setting->cmd_trigger.triggered = true; - } - break; - } - } - else - { - switch (action) - { - case MENU_ACTION_LEFT: - *setting->value.fraction = - *setting->value.fraction - setting->step; - - if (setting->enforce_minrange) - { - if (*setting->value.fraction < setting->min) - *setting->value.fraction = setting->min; - } - break; - - case MENU_ACTION_OK: - if (setting->cmd_trigger.idx != RARCH_CMD_NONE) - setting->cmd_trigger.triggered = true; - /* fall-through */ - case MENU_ACTION_RIGHT: - *setting->value.fraction = - *setting->value.fraction + setting->step; - - if (setting->enforce_maxrange) - { - if (*setting->value.fraction > setting->max) - *setting->value.fraction = setting->max; - } - break; - - case MENU_ACTION_START: - *setting->value.fraction = setting->default_value.fraction; - break; - } - } + if (setting->action_ok) + setting->action_ok(setting, action); return menu_action_setting_apply(setting); } diff --git a/settings_data.c b/settings_data.c index 0b23ed850a..178e3f38c8 100644 --- a/settings_data.c +++ b/settings_data.c @@ -775,6 +775,85 @@ static int setting_data_uint_action_ok_default(void *data, unsigned action) return 0; } +static int setting_data_fraction_action_ok_video_refresh_rate_auto( + void *data, unsigned action) +{ + rarch_setting_t *setting = (rarch_setting_t*)data; + + if (!setting) + return -1; + + switch (action) + { + case MENU_ACTION_START: + g_extern.measure_data.frame_time_samples_count = 0; + break; + case MENU_ACTION_OK: + { + double video_refresh_rate, deviation = 0.0; + unsigned sample_points = 0; + + if (driver_monitor_fps_statistics(&video_refresh_rate, + &deviation, &sample_points)) + { + driver_set_monitor_refresh_rate(video_refresh_rate); + /* Incase refresh rate update forced non-block video. */ + rarch_main_command(RARCH_CMD_VIDEO_SET_BLOCKING_STATE); + } + + if (setting->cmd_trigger.idx != RARCH_CMD_NONE) + setting->cmd_trigger.triggered = true; + } + break; + } + + return 0; +} + +static int setting_data_fraction_action_ok_default( + void *data, unsigned action) +{ + rarch_setting_t *setting = (rarch_setting_t*)data; + + if (!setting) + return -1; + + switch (action) + { + case MENU_ACTION_LEFT: + *setting->value.fraction = + *setting->value.fraction - setting->step; + + if (setting->enforce_minrange) + { + if (*setting->value.fraction < setting->min) + *setting->value.fraction = setting->min; + } + break; + + case MENU_ACTION_OK: + if (setting->cmd_trigger.idx != RARCH_CMD_NONE) + setting->cmd_trigger.triggered = true; + /* fall-through */ + case MENU_ACTION_RIGHT: + *setting->value.fraction = + *setting->value.fraction + setting->step; + + if (setting->enforce_maxrange) + { + if (*setting->value.fraction > setting->max) + *setting->value.fraction = setting->max; + } + break; + + case MENU_ACTION_START: + *setting->value.fraction = setting->default_value.fraction; + break; + } + + return 0; +} + static int setting_data_uint_action_ok_linefeed(void *data, unsigned action) { rarch_setting_t *setting = (rarch_setting_t*)data; @@ -829,6 +908,8 @@ rarch_setting_t setting_data_float_setting(const char* name, result.value.fraction = target; result.original_value.fraction = *target; result.default_value.fraction = default_value; + + result.action_ok = setting_data_fraction_action_ok_default; return result; } @@ -3157,6 +3238,8 @@ static bool setting_data_append_list_video_options( subgroup_info.name, general_write_handler, general_read_handler); + (*list)[list_info->index - 1].action_ok = + &setting_data_fraction_action_ok_video_refresh_rate_auto; CONFIG_BOOL( g_settings.video.force_srgb_disable,