mirror of
https://github.com/libretro/RetroArch.git
synced 2025-02-13 21:49:42 +00:00
Merge git://github.com/ToadKing/RetroArch-Rpi
This commit is contained in:
commit
050441741b
@ -87,6 +87,7 @@ static bool get_rom_path(rgui_handle_t *rgui)
|
||||
{
|
||||
uint16_t old_input_state = 0;
|
||||
bool can_quit = false;
|
||||
bool first = true;
|
||||
|
||||
for (;;)
|
||||
{
|
||||
@ -118,6 +119,8 @@ static bool get_rom_path(rgui_handle_t *rgui)
|
||||
action = RGUI_ACTION_UP;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_DOWN))
|
||||
action = RGUI_ACTION_DOWN;
|
||||
else if (trigger_state & (1 << RETRO_DEVICE_ID_JOYPAD_SELECT) && !first) // don't catch start+select+l+r when exiting
|
||||
action = RGUI_ACTION_SETTINGS;
|
||||
|
||||
const char *ret = rgui_iterate(rgui, action);
|
||||
video_wii.frame(NULL, menu_framebuf,
|
||||
@ -133,6 +136,7 @@ static bool get_rom_path(rgui_handle_t *rgui)
|
||||
}
|
||||
|
||||
old_input_state = input_state;
|
||||
first = false;
|
||||
rarch_sleep(10);
|
||||
}
|
||||
}
|
||||
|
@ -44,6 +44,7 @@ struct rgui_handle
|
||||
rgui_list_t *folder_buf;
|
||||
size_t directory_ptr;
|
||||
bool need_refresh;
|
||||
rgui_mode_t mode;
|
||||
|
||||
char path_buf[PATH_MAX];
|
||||
|
||||
@ -163,7 +164,7 @@ static void blit_line(rgui_handle_t *rgui,
|
||||
}
|
||||
}
|
||||
|
||||
static void render_text(rgui_handle_t *rgui, size_t begin, size_t end)
|
||||
static void render_background(rgui_handle_t *rgui)
|
||||
{
|
||||
fill_rect(rgui->frame_buf, rgui->frame_buf_pitch,
|
||||
0, 0, RGUI_WIDTH, RGUI_HEIGHT, gray_filler);
|
||||
@ -179,11 +180,23 @@ static void render_text(rgui_handle_t *rgui, size_t begin, size_t end)
|
||||
|
||||
fill_rect(rgui->frame_buf, rgui->frame_buf_pitch,
|
||||
RGUI_WIDTH - 10, 5, 5, RGUI_HEIGHT - 10, green_filler);
|
||||
}
|
||||
|
||||
char title[TERM_WIDTH - 1];
|
||||
const char *dir;
|
||||
rgui_list_back(rgui->path_stack, &dir, NULL, NULL);
|
||||
snprintf(title, sizeof(title), "FILE BROWSER: %s", dir);
|
||||
static void render_text(rgui_handle_t *rgui, size_t begin, size_t end)
|
||||
{
|
||||
render_background(rgui);
|
||||
|
||||
char title[TERM_WIDTH];
|
||||
if (rgui->mode == RGUI_FILEBROWSER)
|
||||
{
|
||||
const char *dir;
|
||||
rgui_list_back(rgui->path_stack, &dir, NULL, NULL);
|
||||
snprintf(title, sizeof(title), "FILE BROWSER: %s", dir);
|
||||
}
|
||||
else
|
||||
{
|
||||
snprintf(title, sizeof(title), "SETTINGS");
|
||||
}
|
||||
blit_line(rgui, TERM_START_X + 15, 15, title, true);
|
||||
|
||||
unsigned x = TERM_START_X;
|
||||
@ -197,22 +210,35 @@ static void render_text(rgui_handle_t *rgui, size_t begin, size_t end)
|
||||
|
||||
char message[TERM_WIDTH + 1];
|
||||
char *type_str;
|
||||
int w;
|
||||
switch (type)
|
||||
{
|
||||
case RGUI_FILE_PLAIN:
|
||||
type_str = "(FILE)";
|
||||
w = 6;
|
||||
break;
|
||||
case RGUI_FILE_DIRECTORY:
|
||||
type_str = "(DIR)";
|
||||
w = 5;
|
||||
break;
|
||||
case RGUI_FILE_DEVICE:
|
||||
type_str = "(DEV)";
|
||||
w = 5;
|
||||
break;
|
||||
case RGUI_SETTINGS_VIDEO_FILTER:
|
||||
type_str = g_settings.video.smooth ? "Bilinear" : "None";
|
||||
w = 8;
|
||||
break;
|
||||
default:
|
||||
type_str = "";
|
||||
w = 0;
|
||||
break;
|
||||
}
|
||||
snprintf(message, sizeof(message), "%c %-*s %6s\n",
|
||||
snprintf(message, sizeof(message), "%c %-*s %-*s\n",
|
||||
i == rgui->directory_ptr ? '>' : ' ',
|
||||
TERM_WIDTH - (6 + 1 + 2),
|
||||
TERM_WIDTH - (w + 1 + 2),
|
||||
path,
|
||||
w,
|
||||
type_str);
|
||||
|
||||
blit_line(rgui, x, y, message, i == rgui->directory_ptr);
|
||||
@ -257,8 +283,102 @@ static void render_messagebox(rgui_handle_t *rgui, const char *message)
|
||||
free(msg);
|
||||
}
|
||||
|
||||
static void rgui_settings_toggle_setting(rgui_file_type_t setting)
|
||||
{
|
||||
switch (setting)
|
||||
{
|
||||
/*case RGUI_SETTINGS_VIDEO_STRETCH:
|
||||
|
||||
break;*/
|
||||
|
||||
case RGUI_SETTINGS_VIDEO_FILTER:
|
||||
g_settings.video.smooth = !g_settings.video.smooth;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
static void rgui_settings_populate_entries(rgui_handle_t *rgui)
|
||||
{
|
||||
rgui_list_clear(rgui->folder_buf);
|
||||
|
||||
rgui_list_push(rgui->folder_buf, "Filter", RGUI_SETTINGS_VIDEO_FILTER, 0);
|
||||
}
|
||||
|
||||
static bool rgui_settings_iterate(rgui_handle_t *rgui, rgui_action_t action)
|
||||
{
|
||||
switch (action)
|
||||
{
|
||||
case RGUI_ACTION_UP:
|
||||
if (rgui->directory_ptr > 0)
|
||||
rgui->directory_ptr--;
|
||||
else
|
||||
rgui->directory_ptr = rgui_list_size(rgui->folder_buf) - 1;
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_DOWN:
|
||||
if (rgui->directory_ptr + 1 < rgui_list_size(rgui->folder_buf))
|
||||
rgui->directory_ptr++;
|
||||
else
|
||||
rgui->directory_ptr = 0;
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_LEFT:
|
||||
case RGUI_ACTION_CANCEL:
|
||||
case RGUI_ACTION_SETTINGS:
|
||||
rgui->mode = RGUI_FILEBROWSER;
|
||||
return true;
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_RIGHT:
|
||||
case RGUI_ACTION_OK:
|
||||
{
|
||||
rgui_file_type_t type;
|
||||
rgui_list_at(rgui->folder_buf, rgui->directory_ptr, NULL, &type, NULL);
|
||||
rgui_settings_toggle_setting(type);
|
||||
break;
|
||||
}
|
||||
|
||||
case RGUI_ACTION_REFRESH:
|
||||
rgui_settings_populate_entries(rgui);
|
||||
rgui->directory_ptr = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
size_t begin = rgui->directory_ptr >= TERM_HEIGHT / 2 ?
|
||||
rgui->directory_ptr - TERM_HEIGHT / 2 : 0;
|
||||
size_t end = rgui->directory_ptr + TERM_HEIGHT <= rgui_list_size(rgui->folder_buf) ?
|
||||
rgui->directory_ptr + TERM_HEIGHT : rgui_list_size(rgui->folder_buf);
|
||||
|
||||
if (end - begin > TERM_HEIGHT)
|
||||
end = begin + TERM_HEIGHT;
|
||||
|
||||
render_text(rgui, begin, end);
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
const char *rgui_iterate(rgui_handle_t *rgui, rgui_action_t action)
|
||||
{
|
||||
start:
|
||||
if (rgui->mode == RGUI_SETTINGS)
|
||||
{
|
||||
if (rgui_settings_iterate(rgui, action))
|
||||
{
|
||||
action = RGUI_ACTION_REFRESH;
|
||||
goto start;
|
||||
}
|
||||
else
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
||||
bool found = false;
|
||||
switch (action)
|
||||
{
|
||||
@ -340,6 +460,11 @@ const char *rgui_iterate(rgui_handle_t *rgui, rgui_action_t action)
|
||||
rgui->need_refresh = true;
|
||||
break;
|
||||
|
||||
case RGUI_ACTION_SETTINGS:
|
||||
rgui->mode = RGUI_SETTINGS;
|
||||
action = RGUI_ACTION_REFRESH;
|
||||
goto start;
|
||||
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
@ -29,7 +29,11 @@ typedef enum
|
||||
{
|
||||
RGUI_FILE_PLAIN,
|
||||
RGUI_FILE_DIRECTORY,
|
||||
RGUI_FILE_DEVICE
|
||||
RGUI_FILE_DEVICE,
|
||||
|
||||
// settings options are done here too
|
||||
//RGUI_SETTINGS_VIDEO_STRETCH,
|
||||
RGUI_SETTINGS_VIDEO_FILTER
|
||||
} rgui_file_type_t;
|
||||
|
||||
typedef enum
|
||||
@ -41,11 +45,18 @@ typedef enum
|
||||
RGUI_ACTION_OK,
|
||||
RGUI_ACTION_CANCEL,
|
||||
RGUI_ACTION_REFRESH,
|
||||
RGUI_ACTION_SETTINGS,
|
||||
RGUI_ACTION_NOOP
|
||||
} rgui_action_t;
|
||||
|
||||
typedef struct rgui_handle rgui_handle_t;
|
||||
|
||||
typedef enum
|
||||
{
|
||||
RGUI_FILEBROWSER = 0,
|
||||
RGUI_SETTINGS
|
||||
} rgui_mode_t;
|
||||
|
||||
typedef void (*rgui_file_enum_cb_t)(void *ctx,
|
||||
const char *path, rgui_file_type_t file_type, size_t directory_ptr);
|
||||
typedef bool (*rgui_folder_enum_cb_t)(const char *directory,
|
||||
|
36
wii/input.c
36
wii/input.c
@ -42,7 +42,11 @@ static int16_t wii_input_state(void *data, const struct retro_keybind **binds,
|
||||
|
||||
unsigned player = port;
|
||||
|
||||
return pad_state[player][id] || wpad_state[player][id];
|
||||
return pad_state[player][id]
|
||||
#ifdef HW_RVL
|
||||
|| wpad_state[player][id]
|
||||
#endif
|
||||
;
|
||||
}
|
||||
|
||||
static void wii_free_input(void *data)
|
||||
@ -102,18 +106,22 @@ static void wii_input_poll(void *data)
|
||||
uint32_t down = WPAD_ButtonsHeld(i) | WPAD_ButtonsDown(i);
|
||||
down &= ~WPAD_ButtonsUp(i);
|
||||
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_B] = down & WPAD_CLASSIC_BUTTON_B;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_B] = down & (WPAD_BUTTON_B | WPAD_CLASSIC_BUTTON_B);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_Y] = down & WPAD_CLASSIC_BUTTON_Y;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_SELECT] = down & WPAD_CLASSIC_BUTTON_MINUS;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_START] = down & WPAD_CLASSIC_BUTTON_PLUS;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_UP] = down & WPAD_CLASSIC_BUTTON_UP;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_DOWN] = down & WPAD_CLASSIC_BUTTON_DOWN;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_LEFT] = down & WPAD_CLASSIC_BUTTON_LEFT;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_RIGHT] = down & WPAD_CLASSIC_BUTTON_RIGHT;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_A] = down & WPAD_CLASSIC_BUTTON_A;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_SELECT] = down & (WPAD_BUTTON_MINUS | WPAD_CLASSIC_BUTTON_MINUS);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_START] = down & (WPAD_BUTTON_PLUS | WPAD_CLASSIC_BUTTON_PLUS);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_UP] = down & (WPAD_BUTTON_UP | WPAD_CLASSIC_BUTTON_UP);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_DOWN] = down & (WPAD_BUTTON_DOWN | WPAD_CLASSIC_BUTTON_DOWN);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_LEFT] = down & (WPAD_BUTTON_LEFT | WPAD_CLASSIC_BUTTON_LEFT);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_RIGHT] = down & (WPAD_BUTTON_RIGHT | WPAD_CLASSIC_BUTTON_RIGHT);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_A] = down & (WPAD_BUTTON_A | WPAD_CLASSIC_BUTTON_A);
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_X] = down & WPAD_CLASSIC_BUTTON_X;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_L] = down & WPAD_CLASSIC_BUTTON_FULL_L;
|
||||
wpad_state[i][RETRO_DEVICE_ID_JOYPAD_R] = down & WPAD_CLASSIC_BUTTON_FULL_R;
|
||||
|
||||
if (down & (WPAD_BUTTON_HOME | WPAD_CLASSIC_BUTTON_HOME) && i == 0)
|
||||
wpad_state[0][RETRO_DEVICE_ID_JOYPAD_L] = wpad_state[0][RETRO_DEVICE_ID_JOYPAD_R] =
|
||||
wpad_state[0][RETRO_DEVICE_ID_JOYPAD_START] = wpad_state[0][RETRO_DEVICE_ID_JOYPAD_SELECT] = true;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
@ -124,19 +132,23 @@ static bool wii_key_pressed(void *data, int key)
|
||||
switch (key)
|
||||
{
|
||||
case RARCH_QUIT_KEY:
|
||||
return g_quit ||
|
||||
{
|
||||
bool r = g_quit ||
|
||||
(pad_state[0][RETRO_DEVICE_ID_JOYPAD_SELECT] &&
|
||||
pad_state[0][RETRO_DEVICE_ID_JOYPAD_START] &&
|
||||
pad_state[0][RETRO_DEVICE_ID_JOYPAD_L] &&
|
||||
pad_state[0][RETRO_DEVICE_ID_JOYPAD_R])
|
||||
#ifdef HW_RVL
|
||||
||
|
||||
||
|
||||
(wpad_state[0][RETRO_DEVICE_ID_JOYPAD_SELECT] &&
|
||||
wpad_state[0][RETRO_DEVICE_ID_JOYPAD_START] &&
|
||||
wpad_state[0][RETRO_DEVICE_ID_JOYPAD_L] &&
|
||||
wpad_state[0][RETRO_DEVICE_ID_JOYPAD_R])
|
||||
#endif
|
||||
;
|
||||
;
|
||||
g_quit = false;
|
||||
return r;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user