(RMenu/RGUI) Fast L/R scrolling

This commit is contained in:
twinaphex 2013-09-26 15:49:17 +02:00
parent 1c5a11c900
commit 0039ade630
4 changed files with 42 additions and 28 deletions

View File

@ -265,9 +265,9 @@ void filebrowser_update(void *data, uint64_t input, const char *extensions)
action = FILEBROWSER_ACTION_RIGHT;
else if (input & (1ULL << DEVICE_NAV_LEFT))
action = FILEBROWSER_ACTION_LEFT;
else if (input & (1ULL << DEVICE_NAV_R2))
else if (input & (1ULL << DEVICE_NAV_R1))
action = FILEBROWSER_ACTION_SCROLL_DOWN;
else if (input & (1ULL << DEVICE_NAV_L2))
else if (input & (1ULL << DEVICE_NAV_L1))
action = FILEBROWSER_ACTION_SCROLL_UP;
else if (input & (1ULL << DEVICE_NAV_A))
{
@ -717,6 +717,8 @@ static uint64_t rgui_input(void)
RETRO_DEVICE_ID_JOYPAD_RIGHT, DEVICE_NAV_RIGHT,
RETRO_DEVICE_ID_JOYPAD_A, DEVICE_NAV_A,
RETRO_DEVICE_ID_JOYPAD_B, DEVICE_NAV_B,
RETRO_DEVICE_ID_JOYPAD_L, DEVICE_NAV_L,
RETRO_DEVICE_ID_JOYPAD_R, DEVICE_NAV_R,
RETRO_DEVICE_ID_JOYPAD_START, DEVICE_NAV_START,
RETRO_DEVICE_ID_JOYPAD_SELECT, DEVICE_NAV_SELECT,
};
@ -737,31 +739,24 @@ static uint64_t rgui_input(void)
rgui->trigger_state = input_state & ~rgui->old_input_state;
#if defined(HAVE_RGUI)
rgui->do_held = (input_state & (
(1ULL << DEVICE_NAV_UP) |
(1ULL << DEVICE_NAV_DOWN) |
(1ULL << DEVICE_NAV_LEFT) |
(1ULL << DEVICE_NAV_RIGHT))) &&
!(input_state & (1ULL << DEVICE_NAV_MENU));
#elif defined(HAVE_RMENU)
rgui->do_held = (input_state & (
(1ULL << DEVICE_NAV_LEFT) |
(1ULL << DEVICE_NAV_RIGHT) |
(1ULL << DEVICE_NAV_UP) |
(1ULL << DEVICE_NAV_DOWN) |
(1ULL << RARCH_ANALOG_LEFT_Y_DPAD_UP) |
(1ULL << RARCH_ANALOG_LEFT_Y_DPAD_DOWN) |
(1ULL << RARCH_ANALOG_LEFT_X_DPAD_LEFT) |
(1ULL << RARCH_ANALOG_LEFT_X_DPAD_RIGHT) |
(1ULL << RARCH_ANALOG_RIGHT_Y_DPAD_UP) |
(1ULL << RARCH_ANALOG_RIGHT_Y_DPAD_DOWN) |
(1ULL << RARCH_ANALOG_RIGHT_X_DPAD_LEFT) |
(1ULL << RARCH_ANALOG_RIGHT_X_DPAD_RIGHT) |
(1ULL << DEVICE_NAV_L2) |
(1ULL << DEVICE_NAV_R2)
)) && !(input_state & (1ULL << DEVICE_NAV_MENU));
(1ULL << DEVICE_NAV_LEFT)
| (1ULL << DEVICE_NAV_RIGHT)
| (1ULL << DEVICE_NAV_UP)
| (1ULL << DEVICE_NAV_DOWN)
| (1ULL << DEVICE_NAV_L1)
| (1ULL << DEVICE_NAV_R1)
#if defined(HAVE_RMENU)
| (1ULL << RARCH_ANALOG_LEFT_Y_DPAD_UP)
| (1ULL << RARCH_ANALOG_LEFT_Y_DPAD_DOWN)
| (1ULL << RARCH_ANALOG_LEFT_X_DPAD_LEFT)
| (1ULL << RARCH_ANALOG_LEFT_X_DPAD_RIGHT)
| (1ULL << RARCH_ANALOG_RIGHT_Y_DPAD_UP)
| (1ULL << RARCH_ANALOG_RIGHT_Y_DPAD_DOWN)
| (1ULL << RARCH_ANALOG_RIGHT_X_DPAD_LEFT)
| (1ULL << RARCH_ANALOG_RIGHT_X_DPAD_RIGHT)
#endif
)) && !(input_state & (1ULL << DEVICE_NAV_MENU));
return input_state;
}

View File

@ -87,6 +87,8 @@ enum
DEVICE_NAV_RIGHT,
DEVICE_NAV_A,
DEVICE_NAV_B,
DEVICE_NAV_L,
DEVICE_NAV_R,
DEVICE_NAV_START,
DEVICE_NAV_SELECT,
DEVICE_NAV_MENU,
@ -222,6 +224,8 @@ typedef enum
RGUI_ACTION_SETTINGS,
RGUI_ACTION_START,
RGUI_ACTION_MESSAGE,
RGUI_ACTION_SCROLL_DOWN,
RGUI_ACTION_SCROLL_UP,
RGUI_ACTION_NOOP
} rgui_action_t;

View File

@ -2657,6 +2657,10 @@ static int rgui_iterate(void *data)
action = RGUI_ACTION_LEFT;
else if (rgui->trigger_state & (1ULL << DEVICE_NAV_RIGHT))
action = RGUI_ACTION_RIGHT;
else if (rgui->trigger_state & (1ULL << DEVICE_NAV_L))
action = RGUI_ACTION_SCROLL_UP;
else if (rgui->trigger_state & (1ULL << DEVICE_NAV_R))
action = RGUI_ACTION_SCROLL_DOWN;
else if (rgui->trigger_state & (1ULL << DEVICE_NAV_B))
action = RGUI_ACTION_CANCEL;
else if (rgui->trigger_state & (1ULL << DEVICE_NAV_A))
@ -2711,6 +2715,18 @@ static int rgui_iterate(void *data)
else
rgui->selection_ptr = rgui->selection_buf->size - 1;
break;
case RGUI_ACTION_SCROLL_UP:
if (rgui->selection_ptr > 16)
rgui->selection_ptr -= 16;
else
rgui->selection_ptr = 0;
break;
case RGUI_ACTION_SCROLL_DOWN:
if (rgui->selection_ptr + 16 < rgui->selection_buf->size)
rgui->selection_ptr += 16;
else
rgui->selection_ptr = rgui->selection_buf->size - 1;
break;
case RGUI_ACTION_CANCEL:
if (rgui->menu_stack->size > 1)

View File

@ -2311,13 +2311,13 @@ static int select_rom(void *data, uint64_t input)
return -1;
}
}
else if (input & (1ULL << DEVICE_NAV_L1))
else if (input & (1ULL << DEVICE_NAV_L2))
{
const char * drive_map = menu_drive_mapping_previous();
if (drive_map != NULL)
filebrowser_set_root_and_ext(rgui->browser, rgui->browser->current_dir.extensions, drive_map);
}
else if (input & (1ULL << DEVICE_NAV_R1))
else if (input & (1ULL << DEVICE_NAV_R2))
{
const char * drive_map = menu_drive_mapping_next();
if (drive_map != NULL)
@ -2985,7 +2985,6 @@ static void* rgui_init(void)
static void rgui_free(void *data)
{
rgui_handle_t *rgui = (rgui_handle_t*)data;
#ifdef _XBOX1
#ifdef HAVE_MENU_PANEL
if (menu_panel->vertex_buf)