(Menu) Simplifications

This commit is contained in:
libretroadmin 2023-05-06 22:10:55 +02:00
parent 02a849d440
commit 099f33e0b3
14 changed files with 207 additions and 258 deletions

View File

@ -6359,12 +6359,12 @@ void input_keyboard_event(bool down, unsigned code,
(code == RETROK_DELETE) || /* RETRO_DEVICE_ID_JOYPAD_Y */ (code == RETROK_DELETE) || /* RETRO_DEVICE_ID_JOYPAD_Y */
BIT512_GET(input_st->keyboard_mapping_bits, code)))) BIT512_GET(input_st->keyboard_mapping_bits, code))))
{ {
menu_ctx_environment_t menu_environ; struct menu_state *menu_st = menu_state_get_ptr();
menu_environ.type = MENU_ENVIRON_DISABLE_SCREENSAVER;
menu_environ.data = NULL;
menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE; menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE;
menu_st->input_last_time_us = menu_st->current_time_us; menu_st->input_last_time_us = menu_st->current_time_us;
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ); if (menu_st->driver_ctx->environ_cb)
menu_st->driver_ctx->environ_cb(MENU_ENVIRON_DISABLE_SCREENSAVER,
NULL, menu_st->userdata);
} }
return; return;
} }

View File

@ -227,32 +227,28 @@ static int action_left_input_desc_kbd(unsigned type, const char *label,
static int action_left_scroll(unsigned type, const char *label, static int action_left_scroll(unsigned type, const char *label,
bool wraparound) bool wraparound)
{ {
size_t scroll_accel = 0; struct menu_state *menu_st = menu_state_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr(); size_t selection = menu_st->selection_ptr;
size_t selection = menu_st->selection_ptr; size_t scroll_accel = menu_st->scroll.acceleration;
unsigned scroll_speed = (unsigned)((MAX(scroll_accel, 2) - 2) / 4 + 1);
unsigned fast_scroll_speed = 10 * scroll_speed;
if (menu_driver_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL, &scroll_accel)) if (selection > fast_scroll_speed)
{ {
unsigned scroll_speed = (unsigned)((MAX(scroll_accel, 2) - 2) / 4 + 1); size_t idx = selection - fast_scroll_speed;
unsigned fast_scroll_speed = 10 * scroll_speed; menu_st->selection_ptr = idx;
if (menu_st->driver_ctx->navigation_set)
if (selection > fast_scroll_speed) menu_st->driver_ctx->navigation_set(menu_st->userdata, true);
{
size_t idx = selection - fast_scroll_speed;
menu_st->selection_ptr = idx;
if (menu_st->driver_ctx->navigation_set)
menu_st->driver_ctx->navigation_set(menu_st->userdata, true);
}
else
{
bool pending_push = false;
menu_driver_ctl(MENU_NAVIGATION_CTL_CLEAR, &pending_push);
}
#ifdef HAVE_AUDIOMIXER
if (selection != menu_st->selection_ptr) /* Changed? */
audio_driver_mixer_play_scroll_sound(true);
#endif
} }
else
{
bool pending_push = false;
menu_driver_ctl(MENU_NAVIGATION_CTL_CLEAR, &pending_push);
}
#ifdef HAVE_AUDIOMIXER
if (selection != menu_st->selection_ptr) /* Changed? */
audio_driver_mixer_play_scroll_sound(true);
#endif
return 0; return 0;
} }

View File

@ -7802,22 +7802,19 @@ static int action_ok_core_delete(const char *path,
static int action_ok_delete_playlist(const char *path, static int action_ok_delete_playlist(const char *path,
const char *label, unsigned type, size_t idx, size_t entry_idx) const char *label, unsigned type, size_t idx, size_t entry_idx)
{ {
playlist_t *playlist = playlist_get_cached(); playlist_t *playlist = playlist_get_cached();
menu_ctx_environment_t menu_environ; struct menu_state *menu_st = menu_state_get_ptr();
if (!playlist) if (!playlist)
return -1; return -1;
menu_environ.type = MENU_ENVIRON_NONE;
menu_environ.data = NULL;
path = playlist_get_conf_path(playlist); path = playlist_get_conf_path(playlist);
filestream_delete(path); filestream_delete(path);
menu_environ.type = MENU_ENVIRON_RESET_HORIZONTAL_LIST; if (menu_st->driver_ctx->environ_cb)
menu_st->driver_ctx->environ_cb(MENU_ENVIRON_RESET_HORIZONTAL_LIST,
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ); NULL, menu_st->userdata);
return action_cancel_pop_default(NULL, NULL, 0, 0); return action_cancel_pop_default(NULL, NULL, 0, 0);
} }

View File

@ -234,34 +234,38 @@ static int action_right_input_desc(unsigned type, const char *label,
static int action_right_scroll(unsigned type, const char *label, static int action_right_scroll(unsigned type, const char *label,
bool wraparound) bool wraparound)
{ {
size_t scroll_accel = 0; struct menu_state *menu_st = menu_state_get_ptr();
size_t scroll_accel = menu_st->scroll.acceleration;
menu_list_t *menu_list = menu_st->entries.list;
size_t selection = menu_st->selection_ptr;
unsigned scroll_speed = (unsigned)((MAX(scroll_accel, 2) - 2) / 4 + 1);
unsigned fast_scroll_speed = 10 * scroll_speed;
size_t entries_end = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
if (menu_driver_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL, &scroll_accel)) if (selection + fast_scroll_speed < entries_end)
{ {
struct menu_state *menu_st = menu_state_get_ptr(); size_t idx = selection + fast_scroll_speed;
menu_list_t *menu_list = menu_st->entries.list; menu_st->selection_ptr = idx;
size_t selection = menu_st->selection_ptr; if (menu_st->driver_ctx->navigation_set)
unsigned scroll_speed = (unsigned)((MAX(scroll_accel, 2) - 2) / 4 + 1); menu_st->driver_ctx->navigation_set(menu_st->userdata, true);
unsigned fast_scroll_speed = 10 * scroll_speed;
size_t entries_end = MENU_LIST_GET_SELECTION(menu_list, 0)->size;
if (selection + fast_scroll_speed < entries_end)
{
size_t idx = selection + fast_scroll_speed;
menu_st->selection_ptr = idx;
if (menu_st->driver_ctx->navigation_set)
menu_st->driver_ctx->navigation_set(menu_st->userdata, true);
}
else
{
if (entries_end > 0)
menu_driver_ctl(MENU_NAVIGATION_CTL_SET_LAST, NULL);
}
#ifdef HAVE_AUDIOMIXER
if (selection != menu_st->selection_ptr)
audio_driver_mixer_play_scroll_sound(false);
#endif
} }
else
{
if (entries_end > 0)
{
size_t menu_list_size = menu_st->entries.list ? MENU_LIST_GET_SELECTION(menu_st->entries.list, 0)->size : 0;
size_t new_selection = menu_list_size - 1;
menu_st->selection_ptr = new_selection;
if (menu_st->driver_ctx->navigation_set_last)
menu_st->driver_ctx->navigation_set_last(menu_st->userdata);
}
}
#ifdef HAVE_AUDIOMIXER
if (selection != menu_st->selection_ptr)
audio_driver_mixer_play_scroll_sound(false);
#endif
return 0; return 0;
} }

View File

@ -39,11 +39,10 @@
void handle_dbscan_finished(retro_task_t *task, void handle_dbscan_finished(retro_task_t *task,
void *task_data, void *user_data, const char *err) void *task_data, void *user_data, const char *err)
{ {
menu_ctx_environment_t menu_environ; struct menu_state *menu_st = menu_state_get_ptr();
menu_environ.type = MENU_ENVIRON_RESET_HORIZONTAL_LIST; if (menu_st->driver_ctx->environ_cb)
menu_environ.data = NULL; menu_st->driver_ctx->environ_cb(MENU_ENVIRON_RESET_HORIZONTAL_LIST,
NULL, menu_st->userdata);
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ);
} }
int action_scan_file(const char *path, int action_scan_file(const char *path,
@ -101,14 +100,15 @@ int action_scan_directory(const char *path,
int action_switch_thumbnail(const char *path, int action_switch_thumbnail(const char *path,
const char *label, unsigned type, size_t idx) const char *label, unsigned type, size_t idx)
{ {
const char *menu_ident = menu_driver_ident(); struct menu_state *menu_st = menu_state_get_ptr();
settings_t *settings = config_get_ptr(); const char *menu_ident = menu_driver_ident();
bool switch_enabled = true; settings_t *settings = config_get_ptr();
bool switch_enabled = true;
#ifdef HAVE_RGUI #ifdef HAVE_RGUI
switch_enabled = !string_is_equal(menu_ident, "rgui"); switch_enabled = !string_is_equal(menu_ident, "rgui");
#endif #endif
#ifdef HAVE_MATERIALUI #ifdef HAVE_MATERIALUI
switch_enabled = switch_enabled && !string_is_equal(menu_ident, "glui"); switch_enabled = switch_enabled && !string_is_equal(menu_ident, "glui");
#endif #endif
if (!settings) if (!settings)
@ -164,7 +164,8 @@ int action_switch_thumbnail(const char *path,
} }
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL); menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, NULL);
menu_driver_ctl(RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE, NULL); if (menu_st->driver_ctx && menu_st->driver_ctx->update_thumbnail_image)
menu_st->driver_ctx->update_thumbnail_image(menu_st->userdata);
} }
return 0; return 0;

View File

@ -9161,14 +9161,11 @@ static enum menu_action materialui_parse_menu_entry_action(
(materialui_list_get_size(mui, MENU_LIST_PLAIN) == 1)) (materialui_list_get_size(mui, MENU_LIST_PLAIN) == 1))
{ {
retro_time_t current_time = menu_driver_get_current_time(); retro_time_t current_time = menu_driver_get_current_time();
size_t scroll_accel = 0;
/* Determine whether in put repeat is /* Determine whether in put repeat is
* currently active * currently active
* > This is always true when scroll * > This is always true when scroll
* acceleration is greater than zero */ * acceleration is greater than zero */
menu_driver_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL, size_t scroll_accel = menu_st->scroll.acceleration;
&scroll_accel);
#ifdef HAVE_AUDIOMIXER #ifdef HAVE_AUDIOMIXER
if ((current_time - mui->last_tab_switch_time) >= MUI_TAB_SWITCH_REPEAT_DELAY || if ((current_time - mui->last_tab_switch_time) >= MUI_TAB_SWITCH_REPEAT_DELAY ||
scroll_accel <= 0) scroll_accel <= 0)

View File

@ -4544,31 +4544,26 @@ static enum menu_action xmb_parse_menu_entry_action(
if (xmb->depth == 1) if (xmb->depth == 1)
{ {
retro_time_t current_time = menu_driver_get_current_time(); retro_time_t current_time = menu_driver_get_current_time();
size_t scroll_accel = 0;
/* Determine whether input repeat is /* Determine whether input repeat is
* currently active * currently active
* > This is always true when scroll * > This is always true when scroll
* acceleration is greater than zero */ * acceleration is greater than zero */
menu_driver_ctl(MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL, size_t scroll_accel = menu_st->scroll.acceleration;
&scroll_accel);
#ifdef HAVE_AUDIOMIXER #ifdef HAVE_AUDIOMIXER
{ settings_t *settings = config_get_ptr();
settings_t *settings = config_get_ptr(); size_t category = xmb->categories_selection_ptr;
size_t category = xmb->categories_selection_ptr; size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL) + xmb->system_tab_end;
size_t list_size = xmb_list_get_size(xmb, MENU_LIST_HORIZONTAL) + xmb->system_tab_end; /* We only want the scrolling sound to play if any of the following are true:
/* We only want the scrolling sound to play if any of the following are true: * 1. Wraparound is enabled (since the category is guaranteed to change)
* 1. Wraparound is enabled (since the category is guaranteed to change) * 2. We're scrolling right, but we aren't on the last category
* 2. We're scrolling right, but we aren't on the last category * 3. We're scrolling left, but we aren't on the first category */
* 3. We're scrolling left, but we aren't on the first category */ bool fail_condition = ((action == MENU_ACTION_RIGHT)
bool fail_condition = ((action == MENU_ACTION_RIGHT) ? (category == list_size) ? (category == list_size)
: (category == 0)) && !(settings->bools.menu_navigation_wraparound_enable); : (category == 0)) && !(settings->bools.menu_navigation_wraparound_enable);
if (((current_time - xmb->last_tab_switch_time) >= XMB_TAB_SWITCH_REPEAT_DELAY || if (((current_time - xmb->last_tab_switch_time) >= XMB_TAB_SWITCH_REPEAT_DELAY ||
scroll_accel <= 0) && !fail_condition) scroll_accel <= 0) && !fail_condition)
audio_driver_mixer_play_scroll_sound(action == MENU_ACTION_RIGHT); audio_driver_mixer_play_scroll_sound(action == MENU_ACTION_RIGHT);
}
#endif #endif
if (scroll_accel > 0) if (scroll_accel > 0)
{ {
@ -8300,7 +8295,15 @@ static int xmb_pointer_up(void *userdata,
xmb_navigation_set(xmb, true); xmb_navigation_set(xmb, true);
} }
else else
menu_driver_ctl(MENU_NAVIGATION_CTL_SET_LAST, NULL); {
size_t menu_list_size = menu_st->entries.list ? MENU_LIST_GET_SELECTION(menu_st->entries.list, 0)->size : 0;
size_t new_selection = menu_list_size - 1;
menu_st->selection_ptr = new_selection;
if (menu_st->driver_ctx->navigation_set_last)
menu_st->driver_ctx->navigation_set_last(menu_st->userdata);
}
} }
break; break;
case MENU_INPUT_GESTURE_SWIPE_DOWN: case MENU_INPUT_GESTURE_SWIPE_DOWN:

View File

@ -62,19 +62,15 @@ enum rarch_menu_ctl_state
RARCH_MENU_CTL_SET_PREVENT_POPULATE, RARCH_MENU_CTL_SET_PREVENT_POPULATE,
RARCH_MENU_CTL_UNSET_PREVENT_POPULATE, RARCH_MENU_CTL_UNSET_PREVENT_POPULATE,
RARCH_MENU_CTL_IS_PREVENT_POPULATE, RARCH_MENU_CTL_IS_PREVENT_POPULATE,
RARCH_MENU_CTL_ENVIRONMENT,
RARCH_MENU_CTL_POINTER_DOWN, RARCH_MENU_CTL_POINTER_DOWN,
RARCH_MENU_CTL_POINTER_UP, RARCH_MENU_CTL_POINTER_UP,
RARCH_MENU_CTL_OSK_PTR_AT_POS, RARCH_MENU_CTL_OSK_PTR_AT_POS,
RARCH_MENU_CTL_BIND_INIT, RARCH_MENU_CTL_BIND_INIT,
RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH, RARCH_MENU_CTL_UPDATE_THUMBNAIL_PATH,
RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE,
RARCH_MENU_CTL_REFRESH_THUMBNAIL_IMAGE, RARCH_MENU_CTL_REFRESH_THUMBNAIL_IMAGE,
RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_PATH, RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_PATH,
RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_IMAGE, RARCH_MENU_CTL_UPDATE_SAVESTATE_THUMBNAIL_IMAGE,
MENU_NAVIGATION_CTL_CLEAR, MENU_NAVIGATION_CTL_CLEAR
MENU_NAVIGATION_CTL_SET_LAST,
MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL
}; };
enum menu_timedate_style_type enum menu_timedate_style_type

View File

@ -3788,9 +3788,10 @@ static void menu_input_set_pointer_visibility(
menu_input_t *menu_input, menu_input_t *menu_input,
retro_time_t current_time) retro_time_t current_time)
{ {
static bool cursor_shown = false; static bool cursor_shown = false;
static bool cursor_hidden = false; static bool cursor_hidden = false;
static retro_time_t end_time = 0; static retro_time_t end_time = 0;
struct menu_state *menu_st = &menu_driver_state;
/* Ensure that mouse cursor is hidden when not in use */ /* Ensure that mouse cursor is hidden when not in use */
if ((menu_input->pointer.type == MENU_POINTER_MOUSE) if ((menu_input->pointer.type == MENU_POINTER_MOUSE)
@ -3799,11 +3800,9 @@ static void menu_input_set_pointer_visibility(
/* Show cursor */ /* Show cursor */
if ((current_time > end_time) && !cursor_shown) if ((current_time > end_time) && !cursor_shown)
{ {
menu_ctx_environment_t menu_environ; if (menu_st->driver_ctx->environ_cb)
menu_environ.type = MENU_ENVIRON_ENABLE_MOUSE_CURSOR; menu_st->driver_ctx->environ_cb(MENU_ENVIRON_ENABLE_MOUSE_CURSOR,
menu_environ.data = NULL; NULL, menu_st->userdata);
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ);
cursor_shown = true; cursor_shown = true;
cursor_hidden = false; cursor_hidden = false;
} }
@ -3815,11 +3814,9 @@ static void menu_input_set_pointer_visibility(
/* Hide cursor */ /* Hide cursor */
if ((current_time > end_time) && !cursor_hidden) if ((current_time > end_time) && !cursor_hidden)
{ {
menu_ctx_environment_t menu_environ; if (menu_st->driver_ctx->environ_cb)
menu_environ.type = MENU_ENVIRON_DISABLE_MOUSE_CURSOR; menu_st->driver_ctx->environ_cb(MENU_ENVIRON_DISABLE_MOUSE_CURSOR,
menu_environ.data = NULL; NULL, menu_st->userdata);
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ);
cursor_shown = false; cursor_shown = false;
cursor_hidden = true; cursor_hidden = true;
} }
@ -4974,7 +4971,6 @@ static bool menu_driver_init_internal(
settings_t *settings, settings_t *settings,
bool video_is_threaded) bool video_is_threaded)
{ {
menu_ctx_environment_t menu_environ;
struct menu_state *menu_st = &menu_driver_state;; struct menu_state *menu_st = &menu_driver_state;;
if (menu_st->driver_ctx) if (menu_st->driver_ctx)
@ -5023,11 +5019,11 @@ static bool menu_driver_init_internal(
generic_menu_init_list(menu_st, settings); generic_menu_init_list(menu_st, settings);
/* Initialise menu screensaver */ /* Initialise menu screensaver */
menu_environ.type = MENU_ENVIRON_DISABLE_SCREENSAVER;
menu_environ.data = NULL;
menu_st->input_last_time_us = cpu_features_get_time_usec(); menu_st->input_last_time_us = cpu_features_get_time_usec();
menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE; menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE;
if (menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ)) if ( menu_st->driver_ctx->environ_cb
&& (menu_st->driver_ctx->environ_cb(MENU_ENVIRON_DISABLE_SCREENSAVER,
NULL, menu_st->userdata) == 0))
menu_st->flags |= MENU_ST_FLAG_SCREENSAVER_SUPPORTED; menu_st->flags |= MENU_ST_FLAG_SCREENSAVER_SUPPORTED;
else else
menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_SUPPORTED; menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_SUPPORTED;
@ -5655,12 +5651,11 @@ unsigned menu_event(
/* Disable screensaver if required */ /* Disable screensaver if required */
if (input_active) if (input_active)
{ {
menu_ctx_environment_t menu_environ;
menu_environ.type = MENU_ENVIRON_DISABLE_SCREENSAVER;
menu_environ.data = NULL;
menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE; menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE;
menu_st->input_last_time_us = menu_st->current_time_us; menu_st->input_last_time_us = menu_st->current_time_us;
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ); if (menu_st->driver_ctx->environ_cb)
menu_st->driver_ctx->environ_cb(MENU_ENVIRON_DISABLE_SCREENSAVER,
NULL, menu_st->userdata);
} }
/* Annul received input */ /* Annul received input */
@ -6726,11 +6721,10 @@ void retroarch_menu_running(void)
* first switching to the menu */ * first switching to the menu */
if (menu_st->flags & MENU_ST_FLAG_SCREENSAVER_ACTIVE) if (menu_st->flags & MENU_ST_FLAG_SCREENSAVER_ACTIVE)
{ {
menu_ctx_environment_t menu_environ;
menu_environ.type = MENU_ENVIRON_DISABLE_SCREENSAVER;
menu_environ.data = NULL;
menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE; menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE;
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ); if (menu_st->driver_ctx->environ_cb)
menu_st->driver_ctx->environ_cb(MENU_ENVIRON_DISABLE_SCREENSAVER,
NULL, menu_st->userdata);
} }
menu_st->input_last_time_us = cpu_features_get_time_usec(); menu_st->input_last_time_us = cpu_features_get_time_usec();
@ -6815,11 +6809,10 @@ void retroarch_menu_running_finished(bool quit)
* switching off the menu */ * switching off the menu */
if (menu_st->flags & MENU_ST_FLAG_SCREENSAVER_ACTIVE) if (menu_st->flags & MENU_ST_FLAG_SCREENSAVER_ACTIVE)
{ {
menu_ctx_environment_t menu_environ;
menu_environ.type = MENU_ENVIRON_DISABLE_SCREENSAVER;
menu_environ.data = NULL;
menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE; menu_st->flags &= ~MENU_ST_FLAG_SCREENSAVER_ACTIVE;
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ); if (menu_st->driver_ctx->environ_cb)
menu_st->driver_ctx->environ_cb(MENU_ENVIRON_DISABLE_SCREENSAVER,
NULL, menu_st->userdata);
} }
video_driver_set_texture_enable(false, false); video_driver_set_texture_enable(false, false);
#ifdef HAVE_OVERLAY #ifdef HAVE_OVERLAY
@ -6944,19 +6937,6 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
} }
menu_st->driver_data = NULL; menu_st->driver_data = NULL;
break; break;
case RARCH_MENU_CTL_ENVIRONMENT:
{
menu_ctx_environment_t *menu_environ =
(menu_ctx_environment_t*)data;
if (menu_st->driver_ctx->environ_cb)
{
if (menu_st->driver_ctx->environ_cb(menu_environ->type,
menu_environ->data, menu_st->userdata) == 0)
return true;
}
}
return false;
case RARCH_MENU_CTL_POINTER_DOWN: case RARCH_MENU_CTL_POINTER_DOWN:
{ {
menu_ctx_pointer_t *point = (menu_ctx_pointer_t*)data; menu_ctx_pointer_t *point = (menu_ctx_pointer_t*)data;
@ -7015,13 +6995,6 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
menu_st->userdata, (unsigned)selection, 'R'); menu_st->userdata, (unsigned)selection, 'R');
} }
break; break;
case RARCH_MENU_CTL_UPDATE_THUMBNAIL_IMAGE:
{
if (!menu_st->driver_ctx || !menu_st->driver_ctx->update_thumbnail_image)
return false;
menu_st->driver_ctx->update_thumbnail_image(menu_st->userdata);
}
break;
case RARCH_MENU_CTL_REFRESH_THUMBNAIL_IMAGE: case RARCH_MENU_CTL_REFRESH_THUMBNAIL_IMAGE:
{ {
unsigned *i = (unsigned*)data; unsigned *i = (unsigned*)data;
@ -7071,25 +7044,6 @@ bool menu_driver_ctl(enum rarch_menu_ctl_state state, void *data)
} }
} }
break; break;
case MENU_NAVIGATION_CTL_SET_LAST:
{
size_t menu_list_size = menu_st->entries.list ? MENU_LIST_GET_SELECTION(menu_st->entries.list, 0)->size : 0;
size_t new_selection = menu_list_size - 1;
menu_st->selection_ptr = new_selection;
if (menu_st->driver_ctx->navigation_set_last)
menu_st->driver_ctx->navigation_set_last(menu_st->userdata);
}
break;
case MENU_NAVIGATION_CTL_GET_SCROLL_ACCEL:
{
size_t *sel = (size_t*)data;
if (!sel)
return false;
*sel = menu_st->scroll.acceleration;
}
break;
default: default:
case RARCH_MENU_CTL_NONE: case RARCH_MENU_CTL_NONE:
break; break;
@ -7125,19 +7079,17 @@ void menu_shader_manager_free(void)
**/ **/
bool menu_shader_manager_init(void) bool menu_shader_manager_init(void)
{ {
video_driver_state_t video_driver_state_t *video_st = video_state_get_ptr();
*video_st = video_state_get_ptr();
enum rarch_shader_type type = RARCH_SHADER_NONE; enum rarch_shader_type type = RARCH_SHADER_NONE;
bool ret = true; bool ret = true;
bool is_preset = false; bool is_preset = false;
const char *path_shader = NULL; const char *path_shader = NULL;
struct video_shader *menu_shader = NULL; struct video_shader *menu_shader = NULL;
/* We get the shader preset directly from the video driver, so that /* We get the shader preset directly from the video driver, so that
* we are in sync with it (it could fail loading an auto-shader) * we are in sync with it (it could fail loading an auto-shader)
* If we can't (e.g. get_current_shader is not implemented), * If we can't (e.g. get_current_shader is not implemented),
* we'll load video_shader_get_current_shader_preset() like always */ * we'll load video_shader_get_current_shader_preset() like always */
video_shader_ctx_t shader_info = {0}; video_shader_ctx_t shader_info = {0};
video_shader_driver_get_current_shader(&shader_info); video_shader_driver_get_current_shader(&shader_info);
@ -7222,8 +7174,8 @@ bool menu_shader_manager_set_preset(struct video_shader *menu_shader,
* Used when a preset is directly loaded. * Used when a preset is directly loaded.
* No point in updating when the Preset was * No point in updating when the Preset was
* created from the menu itself. */ * created from the menu itself. */
if ( !menu_shader || if ( !menu_shader
!(video_shader_load_preset_into_shader(preset_path, menu_shader))) || !(video_shader_load_preset_into_shader(preset_path, menu_shader)))
goto end; goto end;
/* TODO/FIXME - localize */ /* TODO/FIXME - localize */
@ -7792,7 +7744,15 @@ int generic_menu_entry_action(
menu_driver_ctl(MENU_NAVIGATION_CTL_CLEAR, &pending_push); menu_driver_ctl(MENU_NAVIGATION_CTL_CLEAR, &pending_push);
} }
else else
menu_driver_ctl(MENU_NAVIGATION_CTL_SET_LAST, NULL); {
size_t menu_list_size = menu_st->entries.list ? MENU_LIST_GET_SELECTION(menu_st->entries.list, 0)->size : 0;
size_t new_selection = menu_list_size - 1;
menu_st->selection_ptr = new_selection;
if (menu_st->driver_ctx->navigation_set_last)
menu_st->driver_ctx->navigation_set_last(menu_st->userdata);
}
} }
if (menu_driver_ctx->navigation_increment) if (menu_driver_ctx->navigation_increment)
@ -7880,7 +7840,15 @@ int generic_menu_entry_action(
menu_st->driver_ctx->navigation_set(menu_st->userdata, true); menu_st->driver_ctx->navigation_set(menu_st->userdata, true);
} }
else else
menu_driver_ctl(MENU_NAVIGATION_CTL_SET_LAST, NULL); {
size_t menu_list_size = menu_st->entries.list ? MENU_LIST_GET_SELECTION(menu_st->entries.list, 0)->size : 0;
size_t new_selection = menu_list_size - 1;
menu_st->selection_ptr = new_selection;
if (menu_st->driver_ctx->navigation_set_last)
menu_st->driver_ctx->navigation_set_last(menu_st->userdata);
}
if (menu_driver_ctx->navigation_increment) if (menu_driver_ctx->navigation_increment)
menu_driver_ctx->navigation_increment(menu_userdata); menu_driver_ctx->navigation_increment(menu_userdata);

View File

@ -255,7 +255,8 @@ static int explore_qsort_func_entries(const void *a_, const void *b_)
const char *a = ((const explore_entry_t*)a_)->playlist_entry->label; const char *a = ((const explore_entry_t*)a_)->playlist_entry->label;
const char *b = ((const explore_entry_t*)b_)->playlist_entry->label; const char *b = ((const explore_entry_t*)b_)->playlist_entry->label;
int a0 = TOLOWER(a[0]), b0 = TOLOWER(b[0]); int a0 = TOLOWER(a[0]), b0 = TOLOWER(b[0]);
if (a0 != b0) return a0 - b0; if (a0 != b0)
return a0 - b0;
return strcasecmp(a, b); return strcasecmp(a, b);
} }
@ -1020,11 +1021,10 @@ static const char* explore_get_view_path(void)
static void explore_on_edit_views(enum msg_hash_enums msg) static void explore_on_edit_views(enum msg_hash_enums msg)
{ {
menu_ctx_environment_t menu_environ; struct menu_state *menu_st = menu_state_get_ptr();
menu_environ.type = MENU_ENVIRON_NONE; if (menu_st->driver_ctx->environ_cb)
menu_environ.data = NULL; menu_st->driver_ctx->environ_cb(MENU_ENVIRON_RESET_HORIZONTAL_LIST,
menu_environ.type = MENU_ENVIRON_RESET_HORIZONTAL_LIST; NULL, menu_st->userdata);
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ);
runloop_msg_queue_push(msg_hash_to_str(msg), runloop_msg_queue_push(msg_hash_to_str(msg),
1, 180, true, NULL, 1, 180, true, NULL,
@ -1056,7 +1056,8 @@ static void explore_action_saveview_complete(void *userdata, const char *name)
explore_state_t *state = explore_state; explore_state_t *state = explore_state;
menu_input_dialog_end(); menu_input_dialog_end();
if (!name || !*name) return; if (!name || !*name)
return;
fill_pathname_join_special(lvwpath, fill_pathname_join_special(lvwpath,
config_get_ptr()->paths.directory_playlist, name, sizeof(lvwpath)); config_get_ptr()->paths.directory_playlist, name, sizeof(lvwpath));
@ -1098,14 +1099,16 @@ static void explore_action_saveview_complete(void *userdata, const char *name)
unsigned i, n; unsigned i, n;
for (i = n = 0; i != state->view_levels; i++) for (i = n = 0; i != state->view_levels; i++)
{ {
uint8_t vop = state->view_op[i]; uint8_t vop = state->view_op[i];
unsigned vcat = state->view_cats[i]; unsigned vcat = state->view_cats[i];
explore_string_t **by = state->by[vcat]; explore_string_t **by = state->by[vcat];
if (vop != op && (vop != EXPLORE_OP_RANGE || op == EXPLORE_OP_EQUAL)) if (vop != op && (vop != EXPLORE_OP_RANGE || op == EXPLORE_OP_EQUAL))
continue; continue;
if (n++ == 0) if (n++ == 0)
{ {
if (count++) rjsonwriter_add_comma(w); if (count++)
rjsonwriter_add_comma(w);
rjsonwriter_add_newline(w); rjsonwriter_add_newline(w);
rjsonwriter_add_tabs(w, 1); rjsonwriter_add_tabs(w, 1);
rjsonwriter_add_string(w, rjsonwriter_add_string(w,
@ -1116,7 +1119,8 @@ static void explore_action_saveview_complete(void *userdata, const char *name)
rjsonwriter_add_space(w); rjsonwriter_add_space(w);
rjsonwriter_add_start_object(w); rjsonwriter_add_start_object(w);
} }
if (n > 1) rjsonwriter_add_comma(w); if (n > 1)
rjsonwriter_add_comma(w);
rjsonwriter_add_newline(w); rjsonwriter_add_newline(w);
rjsonwriter_add_tabs(w, 2); rjsonwriter_add_tabs(w, 2);
rjsonwriter_add_string(w, explore_by_info[vcat].rdbkey); rjsonwriter_add_string(w, explore_by_info[vcat].rdbkey);

View File

@ -787,41 +787,33 @@ int setting_bool_action_right_with_refresh(
int setting_uint_action_right_with_refresh( int setting_uint_action_right_with_refresh(
rarch_setting_t *setting, size_t idx, bool wraparound) rarch_setting_t *setting, size_t idx, bool wraparound)
{ {
int retval = setting_uint_action_right_default(setting, idx, wraparound); int retval = setting_uint_action_right_default(setting, idx, wraparound);
bool refresh = false; struct menu_state *menu_st = menu_state_get_ptr();
menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
return retval; return retval;
} }
int setting_bool_action_left_with_refresh( int setting_bool_action_left_with_refresh(
rarch_setting_t *setting, size_t idx, bool wraparound) rarch_setting_t *setting, size_t idx, bool wraparound)
{ {
bool refresh = false; struct menu_state *menu_st = menu_state_get_ptr();
setting_set_with_string_representation(setting, setting_set_with_string_representation(setting,
*setting->value.target.boolean ? "false" : "true"); *setting->value.target.boolean ? "false" : "true");
menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
return 0; return 0;
} }
int setting_uint_action_left_with_refresh( int setting_uint_action_left_with_refresh(
rarch_setting_t *setting, size_t idx, bool wraparound) rarch_setting_t *setting, size_t idx, bool wraparound)
{ {
int retval = setting_uint_action_left_default( struct menu_state *menu_st = menu_state_get_ptr();
setting, idx, wraparound); int retval = setting_uint_action_left_default(
bool refresh = false; setting, idx, wraparound);
menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
return retval; return retval;
} }
static int setting_size_action_left_default( static int setting_size_action_left_default(
@ -1157,14 +1149,12 @@ static void setting_reset_setting(rarch_setting_t* setting)
int setting_generic_action_start_default(rarch_setting_t *setting) int setting_generic_action_start_default(rarch_setting_t *setting)
{ {
bool refresh = false; struct menu_state *menu_st = menu_state_get_ptr();
if (!setting) if (!setting)
return -1; return -1;
setting_reset_setting(setting); setting_reset_setting(setting);
menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL);
return 0; return 0;
} }
@ -5383,10 +5373,10 @@ unsigned libretro_device_get_size(unsigned *devices, size_t devices_size, unsign
static int setting_action_left_libretro_device_type( static int setting_action_left_libretro_device_type(
rarch_setting_t *setting, size_t idx, bool wraparound) rarch_setting_t *setting, size_t idx, bool wraparound)
{ {
bool refresh = false;
retro_ctx_controller_info_t pad; retro_ctx_controller_info_t pad;
unsigned current_device, current_idx, i, devices[128], unsigned current_device, current_idx, i, devices[128],
types = 0, port = 0; types = 0, port = 0;
struct menu_state *menu_st = menu_state_get_ptr();
if (!setting) if (!setting)
return -1; return -1;
@ -5414,17 +5404,17 @@ static int setting_action_left_libretro_device_type(
core_set_controller_port_device(&pad); core_set_controller_port_device(&pad);
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
return 0; return 0;
} }
static int setting_action_left_input_remap_port( static int setting_action_left_input_remap_port(
rarch_setting_t *setting, size_t idx, bool wraparound) rarch_setting_t *setting, size_t idx, bool wraparound)
{ {
bool refresh = false; struct menu_state *menu_st = menu_state_get_ptr();
unsigned port = 0; unsigned port = 0;
settings_t *settings = config_get_ptr(); settings_t *settings = config_get_ptr();
if (!setting) if (!setting)
return -1; return -1;
@ -5445,8 +5435,8 @@ static int setting_action_left_input_remap_port(
* ports are set to 'RETRO_DEVICE_NONE' */ * ports are set to 'RETRO_DEVICE_NONE' */
command_event(CMD_EVENT_CONTROLLER_INIT, NULL); command_event(CMD_EVENT_CONTROLLER_INIT, NULL);
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
return 0; return 0;
} }
@ -7335,9 +7325,9 @@ static int setting_action_start_libretro_device_type(rarch_setting_t *setting)
static int setting_action_start_input_remap_port(rarch_setting_t *setting) static int setting_action_start_input_remap_port(rarch_setting_t *setting)
{ {
bool refresh = false;
settings_t *settings = config_get_ptr();
unsigned port; unsigned port;
settings_t *settings = config_get_ptr();
struct menu_state *menu_st = menu_state_get_ptr();
if (!setting) if (!setting)
return -1; return -1;
@ -7354,16 +7344,14 @@ static int setting_action_start_input_remap_port(rarch_setting_t *setting)
* ports are set to 'RETRO_DEVICE_NONE' */ * ports are set to 'RETRO_DEVICE_NONE' */
command_event(CMD_EVENT_CONTROLLER_INIT, NULL); command_event(CMD_EVENT_CONTROLLER_INIT, NULL);
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
return 0; return 0;
} }
static int setting_action_start_video_refresh_rate_auto( static int setting_action_start_video_refresh_rate_auto(
rarch_setting_t *setting) rarch_setting_t *setting)
{ {
(void)setting;
video_driver_monitor_reset(); video_driver_monitor_reset();
return 0; return 0;
} }
@ -7414,10 +7402,10 @@ static int setting_action_right_analog_dpad_mode(
static int setting_action_right_libretro_device_type( static int setting_action_right_libretro_device_type(
rarch_setting_t *setting, size_t idx, bool wraparound) rarch_setting_t *setting, size_t idx, bool wraparound)
{ {
bool refresh = false;
retro_ctx_controller_info_t pad; retro_ctx_controller_info_t pad;
unsigned current_device, current_idx, i, devices[128], unsigned current_device, current_idx, i, devices[128],
types = 0, port = 0; types = 0, port = 0;
struct menu_state *menu_st = menu_state_get_ptr();
if (!setting) if (!setting)
return -1; return -1;
@ -7445,8 +7433,8 @@ static int setting_action_right_libretro_device_type(
core_set_controller_port_device(&pad); core_set_controller_port_device(&pad);
menu_entries_ctl(MENU_ENTRIES_CTL_SET_REFRESH, &refresh); menu_st->flags |= MENU_ST_FLAG_PREVENT_POPULATE
menu_driver_ctl(RARCH_MENU_CTL_SET_PREVENT_POPULATE, NULL); | MENU_ST_FLAG_ENTRIES_NEED_REFRESH;
return 0; return 0;
} }

View File

@ -5706,13 +5706,12 @@ static enum runloop_state_enum runloop_check_state(
&& (menu_st->flags & MENU_ST_FLAG_SCREENSAVER_SUPPORTED) && (menu_st->flags & MENU_ST_FLAG_SCREENSAVER_SUPPORTED)
&& (!(menu_st->flags & MENU_ST_FLAG_SCREENSAVER_ACTIVE)) && (!(menu_st->flags & MENU_ST_FLAG_SCREENSAVER_ACTIVE))
&& ((menu_st->current_time_us - menu_st->input_last_time_us) && ((menu_st->current_time_us - menu_st->input_last_time_us)
> ((retro_time_t)screensaver_timeout * 1000000))) > ((retro_time_t)screensaver_timeout * 1000000)))
{ {
menu_ctx_environment_t menu_environ;
menu_environ.type = MENU_ENVIRON_ENABLE_SCREENSAVER;
menu_environ.data = NULL;
menu_st->flags |= MENU_ST_FLAG_SCREENSAVER_ACTIVE; menu_st->flags |= MENU_ST_FLAG_SCREENSAVER_ACTIVE;
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ); if (menu_st->driver_ctx->environ_cb)
menu_st->driver_ctx->environ_cb(MENU_ENVIRON_ENABLE_SCREENSAVER,
NULL, menu_st->userdata);
} }
/* Iterate the menu driver for one frame. */ /* Iterate the menu driver for one frame. */

View File

@ -119,7 +119,7 @@ static void cb_task_manual_content_scan(
manual_scan_handle_t *manual_scan = NULL; manual_scan_handle_t *manual_scan = NULL;
playlist_t *cached_playlist = playlist_get_cached(); playlist_t *cached_playlist = playlist_get_cached();
#if defined(RARCH_INTERNAL) && defined(HAVE_MENU) #if defined(RARCH_INTERNAL) && defined(HAVE_MENU)
menu_ctx_environment_t menu_environ; struct menu_state *menu_st = menu_state_get_ptr();
if (!task) if (!task)
goto end; goto end;
#else #else
@ -127,9 +127,7 @@ static void cb_task_manual_content_scan(
return; return;
#endif #endif
manual_scan = (manual_scan_handle_t*)task->state; if (!(manual_scan = (manual_scan_handle_t*)task->state))
if (!manual_scan)
{ {
#if defined(RARCH_INTERNAL) && defined(HAVE_MENU) #if defined(RARCH_INTERNAL) && defined(HAVE_MENU)
goto end; goto end;
@ -169,10 +167,9 @@ static void cb_task_manual_content_scan(
end: end:
/* When creating playlists, the playlist tabs of /* When creating playlists, the playlist tabs of
* any active menu driver must be refreshed */ * any active menu driver must be refreshed */
menu_environ.type = MENU_ENVIRON_RESET_HORIZONTAL_LIST; if (menu_st->driver_ctx->environ_cb)
menu_environ.data = NULL; menu_st->driver_ctx->environ_cb(MENU_ENVIRON_RESET_HORIZONTAL_LIST,
NULL, menu_st->userdata);
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ);
#endif #endif
} }

View File

@ -1000,14 +1000,13 @@ static const QPixmap getInvader(void)
static void scan_finished_handler(retro_task_t *task, static void scan_finished_handler(retro_task_t *task,
void *task_data, void *user_data, const char *err) void *task_data, void *user_data, const char *err)
{ {
bool dont_ask = false; bool dont_ask = false;
bool answer = false; bool answer = false;
#ifdef HAVE_MENU #ifdef HAVE_MENU
menu_ctx_environment_t menu_environ; struct menu_state *menu_st = menu_state_get_ptr();
menu_environ.type = MENU_ENVIRON_RESET_HORIZONTAL_LIST; if (menu_st->driver_ctx->environ_cb)
menu_environ.data = NULL; menu_st->driver_ctx->environ_cb(MENU_ENVIRON_RESET_HORIZONTAL_LIST,
NULL, menu_st->userdata);
menu_driver_ctl(RARCH_MENU_CTL_ENVIRONMENT, &menu_environ);
#endif #endif
if (!ui_window.qtWindow->settings()->value( if (!ui_window.qtWindow->settings()->value(
"scan_finish_confirm", true).toBool()) "scan_finish_confirm", true).toBool())
@ -1023,14 +1022,14 @@ static void scan_finished_handler(retro_task_t *task,
#endif #endif
/* https://stackoverflow.com/questions/7246622/how-to-create-a-slider-with-a-non-linear-scale */ /* https://stackoverflow.com/questions/7246622/how-to-create-a-slider-with-a-non-linear-scale */
static double exp_scale(double inputValue, double midValue, double maxValue) static double exp_scale(double input_val, double mid_val, double max_val)
{ {
double M = maxValue / midValue; double M = max_val / mid_val;
double base = M - 1; double base = M - 1;
double C = log(base * base); double C = log(base * base);
double B = maxValue / (exp(C) - 1); double B = max_val / (exp(C) - 1);
double A = -1 * B; double A = -1 * B;
double ret = A + B * exp(C * inputValue); double ret = A + B * exp(C * input_val);
return ret; return ret;
} }