diff --git a/apple/common/setting_data.c b/apple/common/setting_data.c index 4a134a5076..e3b6b5ce10 100644 --- a/apple/common/setting_data.c +++ b/apple/common/setting_data.c @@ -243,49 +243,23 @@ rarch_setting_t setting_data_group_setting(enum setting_type type, const char* n return result; } -rarch_setting_t setting_data_bool_setting(const char* name, const char* description, bool* target, bool default_value) -{ - rarch_setting_t result = { ST_BOOL, name, sizeof(bool), description }; - result.value.boolean = target; - result.default_value.boolean = default_value; - return result; +#define DEFINE_BASIC_SETTING_TYPE(TAG, TYPE, VALUE, SETTING_TYPE) \ +rarch_setting_t setting_data_##TAG##_setting(const char* name, const char* description, TYPE* target, TYPE default_value) \ +{ \ + rarch_setting_t result = { SETTING_TYPE, name, sizeof(TYPE), description }; \ + result.value.VALUE = target; \ + result.default_value.VALUE = default_value; \ + return result; \ } -rarch_setting_t setting_data_int_setting(const char* name, const char* description, int* target, int default_value) -{ - rarch_setting_t result = { ST_INT, name, sizeof(bool), description }; - result.value.integer = target; - result.default_value.integer = default_value; - return result; -} +DEFINE_BASIC_SETTING_TYPE(bool, bool, boolean, ST_BOOL) +DEFINE_BASIC_SETTING_TYPE(int, int, integer, ST_INT) +DEFINE_BASIC_SETTING_TYPE(uint, unsigned int, unsigned_integer, ST_UINT) +DEFINE_BASIC_SETTING_TYPE(float, float, fraction, ST_FLOAT) -rarch_setting_t setting_data_uint_setting(const char* name, const char* description, unsigned int* target, unsigned int default_value) +rarch_setting_t setting_data_string_setting(enum setting_type type, const char* name, const char* description, char* target, unsigned size, char* default_value) { - rarch_setting_t result = { ST_UINT, name, sizeof(bool), description }; - result.value.unsigned_integer = target; - result.default_value.unsigned_integer = default_value; - return result; -} - -rarch_setting_t setting_data_float_setting(const char* name, const char* description, float* target, float default_value) -{ - rarch_setting_t result = { ST_FLOAT, name, sizeof(bool), description }; - result.value.fraction = target; - result.default_value.fraction = default_value; - return result; -} - -rarch_setting_t setting_data_path_setting(const char* name, const char* description, char* target, unsigned size, char* default_value) -{ - rarch_setting_t result = { ST_PATH, name, size, description }; - result.value.string = target; - result.default_value.string = default_value; - return result; -} - -rarch_setting_t setting_data_string_setting(const char* name, const char* description, char* target, unsigned size, char* default_value) -{ - rarch_setting_t result = { ST_STRING, name, size, description }; + rarch_setting_t result = { type, name, size, description }; result.value.string = target; result.default_value.string = default_value; return result; @@ -312,26 +286,36 @@ void setting_data_load_current() memcpy(&fake_extern, &g_extern, sizeof(struct global)); } +#ifdef IOS +static const uint32_t features = SD_FEATURE_SHADERS; +#elif defined(OSX) +static const uint32_t features = SD_FEATURE_VIDEO_MODE | SD_FEATURE_SHADERS | + SD_FEATURE_VSYNC | SD_FEATURE_AUDIO_DEVICE; +#endif + #define g_settings fake_settings #define g_extern fake_extern #define DEFAULT_ME_YO 0 #define NEXT (list[index++]) -#define START_GROUP(NAME) NEXT = setting_data_group_setting (ST_GROUP, NAME); -#define END_GROUP() NEXT = setting_data_group_setting (ST_END_GROUP, 0); -#define START_SUB_GROUP(NAME) NEXT = setting_data_group_setting (ST_SUB_GROUP, NAME); -#define END_SUB_GROUP() NEXT = setting_data_group_setting (ST_END_SUB_GROUP, 0); +#define WITH_FEATURE(FTS) if (!FTS || features & FTS) +#define START_GROUP(NAME) { NEXT = setting_data_group_setting (ST_GROUP, NAME); +#define END_GROUP() NEXT = setting_data_group_setting (ST_END_GROUP, 0); } +#define START_SUB_GROUP(NAME) { NEXT = setting_data_group_setting (ST_SUB_GROUP, NAME); +#define END_SUB_GROUP() NEXT = setting_data_group_setting (ST_END_SUB_GROUP, 0); } #define CONFIG_BOOL(TARGET, NAME, SHORT, DEF) NEXT = setting_data_bool_setting (NAME, SHORT, &TARGET, DEF); #define CONFIG_INT(TARGET, NAME, SHORT, DEF) NEXT = setting_data_int_setting (NAME, SHORT, &TARGET, DEF); #define CONFIG_UINT(TARGET, NAME, SHORT, DEF) NEXT = setting_data_uint_setting (NAME, SHORT, &TARGET, DEF); #define CONFIG_FLOAT(TARGET, NAME, SHORT, DEF) NEXT = setting_data_float_setting (NAME, SHORT, &TARGET, DEF); -#define CONFIG_PATH(TARGET, NAME, SHORT, DEF) NEXT = setting_data_path_setting (NAME, SHORT, TARGET, sizeof(TARGET), DEF); -#define CONFIG_STRING(TARGET, NAME, SHORT, DEF) NEXT = setting_data_string_setting(NAME, SHORT, TARGET, sizeof(TARGET), DEF); +#define CONFIG_PATH(TARGET, NAME, SHORT, DEF) NEXT = setting_data_string_setting(ST_PATH, NAME, SHORT, TARGET, sizeof(TARGET), DEF); +#define CONFIG_STRING(TARGET, NAME, SHORT, DEF) NEXT = setting_data_string_setting(ST_STRING, NAME, SHORT, TARGET, sizeof(TARGET), DEF); #define CONFIG_HEX(TARGET, NAME, SHORT) #define CONFIG_BIND(TARGET, PLAYER, NAME, SHORT, DEF) \ NEXT = setting_data_bind_setting (NAME, SHORT, &TARGET, PLAYER, DEF); +#define FLAGS(FLAGS) (list[index - 1]).flags = FLAGS; + // TODO: Add black_frame_insertion, swap_interval msg_color video.rotation audio.block_frames audio.in_rate fast_forward_ratio // rgui_show_start_screen @@ -346,8 +330,7 @@ const rarch_setting_t* setting_data_get_list() /***********/ /* DRIVERS */ /***********/ -#if 0 - START_GROUP("Drivers") + WITH_FEATURE(SD_FEATURE_MULTI_DRIVER) START_GROUP("Drivers") START_SUB_GROUP("Drivers") CONFIG_STRING(g_settings.video.driver, "video_driver", "Video Driver", "") CONFIG_STRING(g_settings.video.gl_context, "video_gl_context", "OpenGL Driver", "") @@ -356,7 +339,6 @@ const rarch_setting_t* setting_data_get_list() CONFIG_STRING(g_settings.input.joypad_driver, "input_joypad_driver", "Joypad Driver", "") END_SUB_GROUP() END_GROUP() -#endif /*********/ /* PATHS */ @@ -406,7 +388,7 @@ const rarch_setting_t* setting_data_get_list() /* VIDEO */ /*********/ START_GROUP("Video") - START_SUB_GROUP("Monitor") + WITH_FEATURE(SD_FEATURE_MULTI_DRIVER) START_SUB_GROUP("Monitor") CONFIG_UINT(g_settings.video.monitor_index, "video_monitor_index", "Monitor Index", monitor_index) CONFIG_BOOL(g_settings.video.fullscreen, "video_fullscreen", "Use Fullscreen mode", g_extern.force_fullscreen ? true : fullscreen) // if (!g_extern.force_fullscreen) CONFIG_BOOL(g_settings.video.windowed_fullscreen, "video_windowed_fullscreen", "Windowed Fullscreen Mode", windowed_fullscreen) @@ -415,12 +397,10 @@ const rarch_setting_t* setting_data_get_list() CONFIG_FLOAT(g_settings.video.refresh_rate, "video_refresh_rate", "Refresh Rate", refresh_rate) END_SUB_GROUP() -#if 0 /* Video: Window Manager */ - START_SUB_GROUP("Window Manager") + WITH_FEATURE(SD_FEATURE_WINDOW_MANAGER) START_SUB_GROUP("Window Manager") CONFIG_BOOL(g_settings.video.disable_composition, "video_disable_composition", "Disable WM Composition", disable_composition) END_SUB_GROUP() -#endif START_SUB_GROUP("Aspect") CONFIG_BOOL(g_settings.video.force_aspect, "video_force_aspect", "Force aspect ratio", force_aspect) @@ -442,13 +422,13 @@ const rarch_setting_t* setting_data_get_list() CONFIG_BOOL(g_settings.video.smooth, "video_smooth", "Use bilinear filtering", video_smooth) END_SUB_GROUP() - START_SUB_GROUP("Shader") + WITH_FEATURE(SD_FEATURE_SHADERS) START_SUB_GROUP("Shader") CONFIG_BOOL(g_settings.video.shader_enable, "video_shader_enable", "Enable Shaders", shader_enable) CONFIG_PATH(g_settings.video.shader_dir, "video_shader_dir", "Shader Directory", DEFAULT_ME_YO) CONFIG_PATH(g_settings.video.shader_path, "video_shader", "Shader", DEFAULT_ME_YO) END_SUB_GROUP() - START_SUB_GROUP("Sync") + WITH_FEATURE(SD_FEATURE_VSYNC) START_SUB_GROUP("Sync") CONFIG_BOOL(g_settings.video.threaded, "video_threaded", "Use threaded video", video_threaded) CONFIG_BOOL(g_settings.video.vsync, "video_vsync", "Use VSync", vsync) CONFIG_BOOL(g_settings.video.hard_sync, "video_hard_sync", "Use OpenGL Hard Sync", hard_sync) @@ -494,7 +474,7 @@ const rarch_setting_t* setting_data_get_list() CONFIG_FLOAT(g_settings.audio.rate_control_delta, "audio_rate_control_delta", "Rate Control Delta", rate_control_delta) END_SUB_GROUP() - START_SUB_GROUP("Misc") + WITH_FEATURE(SD_FEATURE_AUDIO_DEVICE) START_SUB_GROUP("Misc") CONFIG_STRING(g_settings.audio.device, "audio_device", "Device", DEFAULT_ME_YO) CONFIG_UINT(g_settings.audio.out_rate, "audio_out_rate", "Ouput Rate", out_rate) CONFIG_PATH(g_settings.audio.dsp_plugin, "audio_dsp_plugin", "DSP Plugin", DEFAULT_ME_YO) diff --git a/apple/common/setting_data.h b/apple/common/setting_data.h index 8d39970962..5a23eff685 100644 --- a/apple/common/setting_data.h +++ b/apple/common/setting_data.h @@ -20,6 +20,25 @@ enum setting_type { ST_NONE, ST_BOOL, ST_INT, ST_UINT, ST_FLOAT, ST_PATH, ST_STRING, ST_HEX, ST_BIND, ST_GROUP, ST_SUB_GROUP, ST_END_GROUP, ST_END_SUB_GROUP }; + +enum setting_features +{ + SD_FEATURE_ALWAYS = 0, + SD_FEATURE_MULTI_DRIVER = 1, + SD_FEATURE_VIDEO_MODE = 2, + SD_FEATURE_WINDOW_MANAGER = 4, + SD_FEATURE_SHADERS = 8, + SD_FEATURE_VSYNC = 16, + SD_FEATURE_AUDIO_DEVICE = 32 +}; + +enum setting_flags +{ + SD_FLAG_PATH_DIR = 1, + SD_FLAG_PATH_FILE = 2, + SD_FLAG_ALLOW_EMPTY = 4, + SD_FLAG_VALUE_DESC = 8 +}; typedef struct { @@ -34,7 +53,8 @@ typedef struct double min; double max; - bool allow_blank; + + uint64_t flags; union { @@ -78,8 +98,7 @@ rarch_setting_t setting_data_bool_setting(const char* name, const char* descript rarch_setting_t setting_data_int_setting(const char* name, const char* description, int* target, int default_value); rarch_setting_t setting_data_uint_setting(const char* name, const char* description, unsigned int* target, unsigned int default_value); rarch_setting_t setting_data_float_setting(const char* name, const char* description, float* target, float default_value); -rarch_setting_t setting_data_path_setting(const char* name, const char* description, char* target, unsigned size, char* default_value); -rarch_setting_t setting_data_string_setting(const char* name, const char* description, char* target, unsigned size, char* default_value); +rarch_setting_t setting_data_string_setting(enum setting_type type, const char* name, const char* description, char* target, unsigned size, char* default_value); rarch_setting_t setting_data_bind_setting(const char* name, const char* description, struct retro_keybind* target, uint32_t index, const struct retro_keybind* default_value); diff --git a/apple/iOS/menu.m b/apple/iOS/menu.m index ecdf5c41c3..d43ff1f3a4 100644 --- a/apple/iOS/menu.m +++ b/apple/iOS/menu.m @@ -374,7 +374,8 @@ detail:^{ return weakSelf.core ? apple_get_core_display_name(weakSelf.core) : @"Auto Detect"; }], [RAMenuItemBasic itemWithDescription:@"Load Content" action:^{ [weakSelf loadGame]; }], [RAMenuItemBasic itemWithDescription:@"Load Content (History)" action:^{ [weakSelf loadHistory]; }], - [RAMenuItemBasic itemWithDescription:@"Settings" action:^{ [[RetroArch_iOS get] showSystemSettings]; }] + [RAMenuItemBasic itemWithDescription:@"Settings" + action:^{ [weakSelf.navigationController pushViewController:[RAFrontendSettingsMenu new] animated:YES]; }] ] ]; } @@ -932,6 +933,7 @@ static const void* const associated_core_key = &associated_core_key; if ((self = [super initWithStyle:UITableViewStyleGrouped])) { RAPauseMenu* __weak weakSelf = self; + self.title = @"RetroArch Paused"; [self.sections addObject:@[@"Actions", [RAMenuItemBasic itemWithDescription:@"Reset Content" action:^{ [weakSelf performBasicAction:RESET]; }], @@ -945,8 +947,10 @@ static const void* const associated_core_key = &associated_core_key; ]]; [self.sections addObject:@[@"Settings", - [RAMenuItemBasic itemWithDescription:@"System Config" action:^{ [[RetroArch_iOS get] showSystemSettings]; }], - [RAMenuItemBasic itemWithDescription:@"Core Config" action:^{ [[RetroArch_iOS get] showSettings]; }] + [RAMenuItemBasic itemWithDescription:@"Frontend" + action:^{ [weakSelf.navigationController pushViewController:[RAFrontendSettingsMenu new] animated:YES]; }], + [RAMenuItemBasic itemWithDescription:@"Core" + action:^{ [weakSelf.navigationController pushViewController:[[RACoreSettingsMenu alloc] initWithCore:apple_core] animated:YES]; }] ]]; } diff --git a/apple/iOS/platform.h b/apple/iOS/platform.h index baf4fd4579..ac2cacbebd 100644 --- a/apple/iOS/platform.h +++ b/apple/iOS/platform.h @@ -34,9 +34,6 @@ - (void)refreshSystemConfig; -- (IBAction)showSettings; -- (IBAction)showSystemSettings; - @property (nonatomic) NSString* configDirectory; // e.g. /var/mobile/Documents/.RetroArch @property (nonatomic) NSString* globalConfigFile; // e.g. /var/mobile/Documents/.RetroArch/retroarch.cfg @property (nonatomic) NSString* coreDirectory; // e.g. /Applications/RetroArch.app/modules diff --git a/apple/iOS/platform.m b/apple/iOS/platform.m index aa1e772ec1..f7997d99c9 100644 --- a/apple/iOS/platform.m +++ b/apple/iOS/platform.m @@ -298,22 +298,11 @@ static void handle_touch_event(NSArray* touches) ios_set_logging_state([RetroArch_iOS get].logPath.UTF8String, apple_frontend_settings.logging_enabled); } -#pragma mark PAUSE MENU - (IBAction)showPauseMenu:(id)sender { [self pushViewController:[RAPauseMenu new] animated:YES]; } -- (IBAction)showSettings -{ - [self pushViewController:[[RACoreSettingsMenu alloc] initWithCore:apple_core] animated:YES]; -} - -- (IBAction)showSystemSettings -{ - [self pushViewController:[RAFrontendSettingsMenu new] animated:YES]; -} - @end int main(int argc, char *argv[]) diff --git a/frontend/platform/platform_apple.c b/frontend/platform/platform_apple.c index 01ff0e3569..d3b92b692d 100644 --- a/frontend/platform/platform_apple.c +++ b/frontend/platform/platform_apple.c @@ -193,7 +193,7 @@ const void* apple_get_frontend_settings(void) settings[4] = setting_data_group_setting(ST_END_SUB_GROUP, 0); settings[5] = setting_data_group_setting(ST_SUB_GROUP, "Bluetooth"); - settings[6] = setting_data_string_setting("ios_btmode", "Mode", apple_frontend_settings.bluetooth_mode, + settings[6] = setting_data_string_setting(ST_STRING, "ios_btmode", "Mode", apple_frontend_settings.bluetooth_mode, sizeof(apple_frontend_settings.bluetooth_mode), "keyboard"); settings[7] = setting_data_group_setting(ST_END_SUB_GROUP, 0);