Merge git://github.com/ToadKing/RetroArch-Rpi

This commit is contained in:
Twinaphex 2012-07-16 23:51:36 +02:00
commit 050441741b
4 changed files with 172 additions and 20 deletions

View File

@ -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);
}
}

View File

@ -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;
}

View File

@ -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,

View File

@ -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;
}