fixes for cores without custom controls or options
This commit is contained in:
parent
8aa50fe2ec
commit
e6f6652e59
1 changed files with 41 additions and 30 deletions
|
|
@ -618,6 +618,13 @@ static struct Config {
|
||||||
[FE_OPT_COUNT] = {NULL}
|
[FE_OPT_COUNT] = {NULL}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
.core = (OptionList){
|
||||||
|
.count = 0,
|
||||||
|
.options = (Option[]){
|
||||||
|
{NULL},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
.controls = default_button_mapping,
|
||||||
.shortcuts = (ButtonMapping[]){
|
.shortcuts = (ButtonMapping[]){
|
||||||
[SHORTCUT_SAVE_STATE] = {"Save State", -1, BTN_ID_NONE, 0},
|
[SHORTCUT_SAVE_STATE] = {"Save State", -1, BTN_ID_NONE, 0},
|
||||||
[SHORTCUT_LOAD_STATE] = {"Load State", -1, BTN_ID_NONE, 0},
|
[SHORTCUT_LOAD_STATE] = {"Load State", -1, BTN_ID_NONE, 0},
|
||||||
|
|
@ -1089,13 +1096,6 @@ static void input_poll_callback(void) {
|
||||||
ignore_menu = 1;
|
ignore_menu = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: tmp?
|
|
||||||
// if ((PAD_isPressed(BTN_L2) && PAD_justPressed(BTN_R2)) || PAD_isPressed(BTN_R2) && PAD_justPressed(BTN_L2)) {
|
|
||||||
// show_debug = !show_debug;
|
|
||||||
// config.frontend.options[FE_OPT_DEBUG].value = show_debug; // TODO: standardize this for all config.frontend?
|
|
||||||
// }
|
|
||||||
|
|
||||||
// TODO: test fast_forward once implemented
|
|
||||||
static int toggled_ff_on = 0; // this logic only works because TOGGLE_FF is before HOLD_FF in the menu...
|
static int toggled_ff_on = 0; // this logic only works because TOGGLE_FF is before HOLD_FF in the menu...
|
||||||
for (int i=0; i<SHORTCUT_COUNT; i++) {
|
for (int i=0; i<SHORTCUT_COUNT; i++) {
|
||||||
ButtonMapping* mapping = &config.shortcuts[i];
|
ButtonMapping* mapping = &config.shortcuts[i];
|
||||||
|
|
@ -1212,7 +1212,7 @@ static bool environment_callback(unsigned cmd, void *data) { // copied from pico
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS: { /* 11 */
|
case RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS: { /* 11 */
|
||||||
// puts("RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS");
|
// LOG_info("RETRO_ENVIRONMENT_SET_INPUT_DESCRIPTORS\n");
|
||||||
// TODO: this is useless
|
// TODO: this is useless
|
||||||
// (some? all?) cores don't sort these in any logical way
|
// (some? all?) cores don't sort these in any logical way
|
||||||
// which explains why picoarch didn't implement this...
|
// which explains why picoarch didn't implement this...
|
||||||
|
|
@ -2660,6 +2660,28 @@ typedef struct MenuList {
|
||||||
static void Menu_detail(MenuItem* item) {
|
static void Menu_detail(MenuItem* item) {
|
||||||
// TODO: name
|
// TODO: name
|
||||||
}
|
}
|
||||||
|
static int Menu_message(char* message) {
|
||||||
|
GFX_setMode(MODE_MAIN);
|
||||||
|
int dirty = 1;
|
||||||
|
while (1) {
|
||||||
|
GFX_startFrame();
|
||||||
|
PAD_poll();
|
||||||
|
|
||||||
|
if (PAD_justPressed(BTN_A) || PAD_justPressed(BTN_B)) break;
|
||||||
|
|
||||||
|
POW_update(&dirty, NULL, Menu_beforeSleep, Menu_afterSleep);
|
||||||
|
if (dirty) {
|
||||||
|
dirty = 0;
|
||||||
|
GFX_clear(screen);
|
||||||
|
GFX_blitMessage(message, screen, NULL);
|
||||||
|
GFX_blitButtonGroup((char*[]){ "A","OKAY", NULL }, screen, 1);
|
||||||
|
GFX_flip(screen);
|
||||||
|
}
|
||||||
|
else GFX_sync();
|
||||||
|
}
|
||||||
|
GFX_setMode(MODE_MENU);
|
||||||
|
return MENU_CALLBACK_NOP; // TODO: this should probably be an arg
|
||||||
|
}
|
||||||
|
|
||||||
#define OPTION_PADDING 8
|
#define OPTION_PADDING 8
|
||||||
#define MAX_VISIBLE_OPTIONS 7
|
#define MAX_VISIBLE_OPTIONS 7
|
||||||
|
|
@ -2745,7 +2767,16 @@ static int OptionEmulator_openMenu(MenuList* list, int i) {
|
||||||
item->value = option->value;
|
item->value = option->value;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// try to handle no options
|
||||||
|
// TODO: show a message
|
||||||
|
if (OptionEmulator_menu.items[0].name) {
|
||||||
Menu_options(&OptionEmulator_menu);
|
Menu_options(&OptionEmulator_menu);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
Menu_message("This core doesn't have any options.");
|
||||||
|
}
|
||||||
|
|
||||||
return MENU_CALLBACK_NOP;
|
return MENU_CALLBACK_NOP;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2911,27 +2942,7 @@ static int OptionSaveChanges_onConfirm(MenuList* list, int i) {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Menu_message(message);
|
||||||
GFX_setMode(MODE_MAIN);
|
|
||||||
|
|
||||||
int dirty = 1;
|
|
||||||
while (1) {
|
|
||||||
GFX_startFrame();
|
|
||||||
PAD_poll();
|
|
||||||
|
|
||||||
if (PAD_justPressed(BTN_A) || PAD_justPressed(BTN_B)) break;
|
|
||||||
|
|
||||||
POW_update(&dirty, NULL, Menu_beforeSleep, Menu_afterSleep);
|
|
||||||
if (dirty) {
|
|
||||||
dirty = 0;
|
|
||||||
GFX_clear(screen);
|
|
||||||
GFX_blitMessage(message, screen, NULL);
|
|
||||||
GFX_blitButtonGroup((char*[]){ "A","OKAY", NULL }, screen, 1);
|
|
||||||
GFX_flip(screen);
|
|
||||||
}
|
|
||||||
else GFX_sync();
|
|
||||||
}
|
|
||||||
GFX_setMode(MODE_MENU);
|
|
||||||
OptionSaveChanges_updateDesc();
|
OptionSaveChanges_updateDesc();
|
||||||
return MENU_CALLBACK_EXIT;
|
return MENU_CALLBACK_EXIT;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue