void st_uint_callback(void *userdata, const char *str) { menu_handle_t *menu = (menu_handle_t*)userdata; rarch_setting_t *current_setting = NULL; rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list(); if (str && *str && setting_data) { if ((current_setting = (rarch_setting_t*) setting_data_find_setting( setting_data, menu->keyboard.label_setting))) *current_setting->value.unsigned_integer = strtoul(str, NULL, 0); } menu_key_end_line(menu); }
void st_string_callback(void *userdata, const char *str) { menu_handle_t *menu = (menu_handle_t*)userdata; rarch_setting_t *current_setting = NULL; rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list(); if (str && *str && setting_data) { if ((current_setting = (rarch_setting_t*) setting_data_find_setting( setting_data, menu->keyboard.label_setting))) menu_action_setting_set_current_string(current_setting, str); else menu_action_set_current_string_based_on_label( menu->keyboard.label_setting, str); } menu_key_end_line(menu); }
int menu_shader_manager_setting_toggle( unsigned id, const char *label, unsigned action) { if (!driver.menu) { RARCH_ERR("Cannot toggle shader setting, menu handle is not initialized.\n"); return 0; } #if 0 RARCH_LOG("shader label: %s\n", label); #endif rarch_setting_t *current_setting = NULL; rarch_setting_t *setting_data = (rarch_setting_t *)setting_data_get_list(); if (!strcmp(label, "video_shader_default_filter")) { if ((current_setting = setting_data_find_setting( setting_data, "video_smooth"))) menu_action_setting_boolean(current_setting, action); } else if (id >= MENU_SETTINGS_SHADER_PARAMETER_0 && id <= MENU_SETTINGS_SHADER_PARAMETER_LAST) { bool apply_changes = false; struct gfx_shader *shader = NULL; struct gfx_shader_parameter *param = NULL; if (!(shader = (struct gfx_shader*)driver.menu->parameter_shader)) return 0; if (!(param = &shader->parameters[id - MENU_SETTINGS_SHADER_PARAMETER_0])) return 0; switch (action) { case MENU_ACTION_START: param->current = param->initial; apply_changes = true; break; case MENU_ACTION_LEFT: param->current -= param->step; apply_changes = true; break; case MENU_ACTION_RIGHT: param->current += param->step; apply_changes = true; break; default: break; } param->current = min(max(param->minimum, param->current), param->maximum); if (apply_changes && !strcmp(label, "video_shader_parameters")) rarch_main_command(RARCH_CMD_SHADERS_APPLY_CHANGES); } else if ((!strcmp(label, "video_shader_parameters") || !strcmp(label, "video_shader_preset_parameters")) && action == MENU_ACTION_OK) menu_entries_push(driver.menu->menu_stack, "", "video_shader_parameters", MENU_FILE_SWITCH, driver.menu->selection_ptr); else if (!strcmp(label, "shader_apply_changes") || !strcmp(label, "video_shader_num_passes")) { if (!strcmp(label, "video_shader_num_passes")) return handle_shader_pass_setting(driver.menu->shader, action); menu_action_setting_set(id, label, action); } else if (!strcmp(label, "video_shader_preset")) { switch (action) { case MENU_ACTION_OK: menu_entries_push(driver.menu->menu_stack, g_settings.video.shader_dir, "video_shader_preset", id, driver.menu->selection_ptr); break; case MENU_ACTION_START: break; default: break; } } else if (!strcmp(label, "video_shader_pass")) { hack_shader_pass = id - MENU_SETTINGS_SHADER_PASS_0; struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; struct gfx_shader_pass *shader_pass = NULL; if (shader) shader_pass = (struct gfx_shader_pass*)&shader->pass[hack_shader_pass]; switch (action) { case MENU_ACTION_OK: menu_entries_push(driver.menu->menu_stack, g_settings.video.shader_dir, "video_shader_pass", id, driver.menu->selection_ptr); break; case MENU_ACTION_START: if (shader_pass) *shader_pass->source.path = '\0'; break; default: break; } } else if (!strcmp(label, "video_shader_filter_pass")) { unsigned pass = id - MENU_SETTINGS_SHADER_PASS_FILTER_0; struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; struct gfx_shader_pass *shader_pass = (struct gfx_shader_pass*) &shader->pass[pass]; switch (action) { case MENU_ACTION_START: if (shader) shader->pass[pass].filter = RARCH_FILTER_UNSPEC; break; case MENU_ACTION_LEFT: case MENU_ACTION_RIGHT: case MENU_ACTION_OK: { unsigned delta = (action == MENU_ACTION_LEFT) ? 2 : 1; if (shader_pass) shader_pass->filter = ((shader_pass->filter + delta) % 3); break; } default: break; } } else if (!strcmp(label, "video_shader_scale_pass")) { unsigned pass = id - MENU_SETTINGS_SHADER_PASS_SCALE_0; struct gfx_shader *shader = (struct gfx_shader*)driver.menu->shader; struct gfx_shader_pass *shader_pass = (struct gfx_shader_pass*) &shader->pass[pass]; switch (action) { case MENU_ACTION_START: if (shader) { shader_pass->fbo.scale_x = shader_pass->fbo.scale_y = 0; shader_pass->fbo.valid = false; } break; case MENU_ACTION_LEFT: case MENU_ACTION_RIGHT: case MENU_ACTION_OK: { unsigned current_scale = shader_pass->fbo.scale_x; unsigned delta = action == MENU_ACTION_LEFT ? 5 : 1; current_scale = (current_scale + delta) % 6; if (shader_pass) { shader_pass->fbo.valid = current_scale; shader_pass->fbo.scale_x = shader_pass->fbo.scale_y = current_scale; } break; } default: break; } } return 0; }