X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=e2f3f27f1367ba986a40c7d490257091dd3b035b;hb=439b24a7e57f7af4081ef917fabe6b3cb78d902d;hp=3c9d2386f165c1d4166f1f00360ff314ea245db9;hpb=b06464b4dc26c0e31ef0bca48b31a4dfbdd549e6;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 3c9d2386..e2f3f27f 100644 --- a/src/screens.c +++ b/src/screens.c @@ -38,6 +38,8 @@ #define MAX_INFO_MODES 8 /* screens on the setup screen */ +/* (must match GFX_SPECIAL_ARG_SETUP_* values as defined in src/main.h) */ +/* (should also match corresponding entries in src/conf_gfx.c) */ #define SETUP_MODE_MAIN 0 #define SETUP_MODE_GAME 1 #define SETUP_MODE_EDITOR 2 @@ -58,17 +60,18 @@ /* sub-screens on the setup screen (specific) */ #define SETUP_MODE_CHOOSE_GAME_SPEED 15 -#define SETUP_MODE_CHOOSE_SCREEN_MODE 16 -#define SETUP_MODE_CHOOSE_WINDOW_SIZE 17 -#define SETUP_MODE_CHOOSE_SCROLL_DELAY 18 -#define SETUP_MODE_CHOOSE_GRAPHICS 19 -#define SETUP_MODE_CHOOSE_SOUNDS 20 -#define SETUP_MODE_CHOOSE_MUSIC 21 -#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 22 -#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 23 -#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 24 - -#define MAX_SETUP_MODES 25 +#define SETUP_MODE_CHOOSE_SCROLL_DELAY 16 +#define SETUP_MODE_CHOOSE_SCREEN_MODE 17 +#define SETUP_MODE_CHOOSE_WINDOW_SIZE 18 +#define SETUP_MODE_CHOOSE_SCALING_TYPE 19 +#define SETUP_MODE_CHOOSE_GRAPHICS 20 +#define SETUP_MODE_CHOOSE_SOUNDS 21 +#define SETUP_MODE_CHOOSE_MUSIC 22 +#define SETUP_MODE_CHOOSE_VOLUME_SIMPLE 23 +#define SETUP_MODE_CHOOSE_VOLUME_LOOPS 24 +#define SETUP_MODE_CHOOSE_VOLUME_MUSIC 25 + +#define MAX_SETUP_MODES 26 /* for input setup functions */ #define SETUPINPUT_SCREEN_POS_START 0 @@ -178,6 +181,9 @@ static TreeInfo *screen_mode_current = NULL; static TreeInfo *window_sizes = NULL; static TreeInfo *window_size_current = NULL; +static TreeInfo *scaling_types = NULL; +static TreeInfo *scaling_type_current = NULL; + static TreeInfo *scroll_delays = NULL; static TreeInfo *scroll_delay_current = NULL; @@ -218,6 +224,19 @@ static struct { -1, NULL }, }; +static struct +{ + char *value; + char *text; +} scaling_types_list[] = +{ + { SCALING_QUALITY_NEAREST, "None" }, + { SCALING_QUALITY_LINEAR, "Linear" }, + { SCALING_QUALITY_BEST, "Anisotropic" }, + + { NULL, NULL }, +}; + static struct { int value; @@ -1315,6 +1334,8 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading) static LevelDirTree *leveldir_last_valid = NULL; boolean levelset_has_changed = FALSE; + LimitScreenUpdates(FALSE); + FadeSetLeaveScreen(); /* do not fade out here -- function may continue and fade on editor screen */ @@ -1342,7 +1363,8 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading) } /* needed if last screen was the setup screen and fullscreen state changed */ - ToggleFullscreenIfNeeded(); + // (moved to "execSetupGraphics()" to change fullscreen state directly) + // ToggleFullscreenOrChangeWindowScalingIfNeeded(); /* leveldir_current may be invalid (level group, parent link) */ if (!validLevelSeries(leveldir_current)) @@ -1416,7 +1438,7 @@ void DrawMainMenuExt(int fade_mask, boolean do_fading) InitializeMainControls(); DrawCursorAndText_Main(-1, FALSE); - DrawPreviewLevel(TRUE); + DrawPreviewLevelInitial(); HandleMainMenu(0, 0, 0, 0, MB_MENU_INITIALIZE); @@ -1733,7 +1755,7 @@ void HandleMainMenu_SelectLevel(int step, int direction) { /* skipping levels is only allowed when trying to skip single level */ if (setup.skip_levels && step == 1 && - Request("Level still unsolved ! Skip despite handicap ?", REQ_ASK)) + Request("Level still unsolved! Skip despite handicap?", REQ_ASK)) { leveldir_current->handicap_level++; SaveLevelSetup_SeriesInfo(); @@ -1755,13 +1777,13 @@ void HandleMainMenu_SelectLevel(int step, int direction) mci->pos_text->font); LoadLevel(level_nr); - DrawPreviewLevel(TRUE); + DrawPreviewLevelInitial(); TapeErase(); LoadTape(level_nr); DrawCompleteVideoDisplay(); - /* needed because DrawPreviewLevel() takes some time */ + /* needed because DrawPreviewLevelInitial() takes some time */ BackToFront(); SyncDisplay(); } @@ -1882,7 +1904,7 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) { if (leveldir_current->readonly && !strEqual(setup.player_name, "Artsoft")) - Request("This level is read only !", REQ_CONFIRM); + Request("This level is read only!", REQ_CONFIRM); game_status = GAME_MODE_EDITOR; @@ -1918,17 +1940,19 @@ void HandleMainMenu(int mx, int my, int dx, int dy, int button) SaveLevelSetup_LastSeries(); SaveLevelSetup_SeriesInfo(); - if (Request("Do you really want to quit ?", REQ_ASK | REQ_STAY_CLOSED)) + if (Request("Do you really want to quit?", REQ_ASK | REQ_STAY_CLOSED)) game_status = GAME_MODE_QUIT; } } } +#if 0 if (game_status == GAME_MODE_MAIN) { - DrawPreviewLevel(FALSE); + DrawPreviewLevelAnimation(); DoAnimation(); } +#endif } @@ -2990,19 +3014,17 @@ void DrawInfoScreen_Version() int ystart1 = mSY - SY + 100; int ystart2 = mSY - SY + 150; int ybottom = mSY - SY + SYSIZE - 20; - int xstart1 = mSX + 2 * xstep; - int xstart2 = mSX + 19 * xstep; + int xstart1 = mSX - SX + 2 * xstep; + int xstart2 = mSX - SX + 18 * xstep; #if defined(TARGET_SDL) - int xstart3 = mSX + 29 * xstep; + int xstart3 = mSX - SX + 28 * xstep; SDL_version sdl_version_compiled; -#if defined(TARGET_SDL2) - SDL_version sdl_version_linked_ext; -#endif const SDL_version *sdl_version_linked; + int driver_name_len = 10; #if defined(TARGET_SDL2) + SDL_version sdl_version_linked_ext; const char *driver_name = NULL; #else - int driver_name_len = 8; char driver_name[driver_name_len]; #endif #endif @@ -3110,7 +3132,7 @@ void DrawInfoScreen_Version() DrawTextF(xstart3, ystart2, font_header, "Used"); #if defined(TARGET_SDL2) - driver_name = SDL_GetVideoDriver(0); + driver_name = getStringCopyNStatic(SDL_GetVideoDriver(0), driver_name_len); #else SDL_VideoDriverName(driver_name, driver_name_len); #endif @@ -3121,7 +3143,7 @@ void DrawInfoScreen_Version() DrawTextF(xstart3, ystart2, font_text, "%s", driver_name); #if defined(TARGET_SDL2) - driver_name = SDL_GetAudioDriver(0); + driver_name = getStringCopyNStatic(SDL_GetAudioDriver(0), driver_name_len); #else SDL_AudioDriverName(driver_name, driver_name_len); #endif @@ -3303,7 +3325,9 @@ void HandleInfoScreen(int mx, int my, int dx, int dy, int button) else HandleInfoScreen_Main(mx, my, dx, dy, button); +#if 0 DoAnimation(); +#endif } @@ -3613,11 +3637,12 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else if (game_status == GAME_MODE_SETUP) { - if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED) + if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED || + setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) execSetupGame(); else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE || setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || - setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) + setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE) execSetupGraphics(); else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE || setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS || @@ -3787,7 +3812,11 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, } else { +#if 1 + FadeSetEnterMenu(); +#else FadeSetEnterScreen(); +#endif node_cursor->cl_first = ti->cl_first; node_cursor->cl_cursor = ti->cl_cursor; @@ -3804,11 +3833,12 @@ static void HandleChooseTree(int mx, int my, int dx, int dy, int button, if (game_status == GAME_MODE_SETUP) { - if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED) + if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED || + setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) execSetupGame(); else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE || setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE || - setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) + setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE) execSetupGraphics(); else if (setup_mode == SETUP_MODE_CHOOSE_VOLUME_SIMPLE || setup_mode == SETUP_MODE_CHOOSE_VOLUME_LOOPS || @@ -3845,7 +3875,9 @@ void HandleChooseLevelSet(int mx, int my, int dx, int dy, int button) { HandleChooseTree(mx, my, dx, dy, button, &leveldir_current); +#if 0 DoAnimation(); +#endif } void DrawChooseLevelNr() @@ -3916,7 +3948,9 @@ void HandleChooseLevelNr(int mx, int my, int dx, int dy, int button) HandleChooseTree(mx, my, dx, dy, button, &leveldir_current); #endif +#if 0 DoAnimation(); +#endif } void DrawHallOfFame(int highlight_position) @@ -4062,7 +4096,9 @@ void HandleHallOfFame(int mx, int my, int dx, int dy, int button) if (game_status == GAME_MODE_SCORES) PlayMenuSoundIfLoop(); +#if 0 DoAnimation(); +#endif } @@ -4075,6 +4111,7 @@ static int num_setup_info; static char *screen_mode_text; static char *window_size_text; +static char *scaling_type_text; static char *scroll_delay_text; static char *game_speed_text; static char *graphics_set_name; @@ -4091,7 +4128,7 @@ static void execSetupMain() DrawSetupScreen(); } -static void execSetupGame() +static void execSetupGame_setGameSpeeds() { if (game_speeds == NULL) { @@ -4139,6 +4176,62 @@ static void execSetupGame() /* needed for displaying game speed text instead of identifier */ game_speed_text = game_speed_current->name; +} + +static void execSetupGame_setScrollDelays() +{ + if (scroll_delays == NULL) + { + int i; + + for (i = 0; scroll_delays_list[i].value != -1; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int value = scroll_delays_list[i].value; + char *text = scroll_delays_list[i].text; + + ti->node_top = &scroll_delays; + ti->sort_priority = value; + + sprintf(identifier, "%d", value); + sprintf(name, "%s", text); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Scaling Type"); + + pushTreeInfo(&scroll_delays, ti); + } + + /* sort scaling type values to start with lowest scaling type value */ + sortTreeInfo(&scroll_delays); + + /* set current scaling type value to configured scaling type value */ + scroll_delay_current = + getTreeInfoFromIdentifier(scroll_delays,i_to_a(setup.scroll_delay_value)); + + /* if that fails, set current scaling type to reliable default value */ + if (scroll_delay_current == NULL) + scroll_delay_current = + getTreeInfoFromIdentifier(scroll_delays, i_to_a(STD_SCROLL_DELAY)); + + /* if that also fails, set current scaling type to first available value */ + if (scroll_delay_current == NULL) + scroll_delay_current = scroll_delays; + } + + setup.scroll_delay_value = atoi(scroll_delay_current->identifier); + + /* needed for displaying scaling type text instead of identifier */ + scroll_delay_text = scroll_delay_current->name; +} + +static void execSetupGame() +{ + execSetupGame_setGameSpeeds(); + execSetupGame_setScrollDelays(); setup_mode = SETUP_MODE_GAME; @@ -4152,6 +4245,13 @@ static void execSetupChooseGameSpeed() DrawSetupScreen(); } +static void execSetupChooseScrollDelay() +{ + setup_mode = SETUP_MODE_CHOOSE_SCROLL_DELAY; + + DrawSetupScreen(); +} + static void execSetupEditor() { setup_mode = SETUP_MODE_EDITOR; @@ -4159,82 +4259,57 @@ static void execSetupEditor() DrawSetupScreen(); } -static void execSetupGraphics() +static void execSetupGraphics_setWindowSizes(boolean update_list) { - // if (screen_modes == NULL && video.fullscreen_available) - if (screen_modes == NULL && video.fullscreen_modes != NULL) + if (window_sizes != NULL && update_list) + { + freeTreeInfo(window_sizes); + + window_sizes = NULL; + } + + if (window_sizes == NULL) { + boolean current_window_size_found = FALSE; int i; - for (i = 0; video.fullscreen_modes[i].width != -1; i++) + for (i = 0; window_sizes_list[i].value != -1; i++) { TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); char identifier[32], name[32]; - int x = video.fullscreen_modes[i].width; - int y = video.fullscreen_modes[i].height; - int xx, yy; - - get_aspect_ratio_from_screen_mode(&video.fullscreen_modes[i], &xx, &yy); + int value = window_sizes_list[i].value; + char *text = window_sizes_list[i].text; - ti->node_top = &screen_modes; - ti->sort_priority = x * 10000 + y; + ti->node_top = &window_sizes; + ti->sort_priority = value; - sprintf(identifier, "%dx%d", x, y); - sprintf(name, "%d x %d [%d:%d]", x, y, xx, yy); + sprintf(identifier, "%d", value); + sprintf(name, "%s", text); setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Fullscreen Mode"); - - pushTreeInfo(&screen_modes, ti); - } - - /* sort fullscreen modes to start with lowest available screen resolution */ - sortTreeInfo(&screen_modes); - - /* set current screen mode for fullscreen mode to configured setup value */ - screen_mode_current = getTreeInfoFromIdentifier(screen_modes, - setup.fullscreen_mode); - - /* if that fails, set current screen mode to reliable default value */ - if (screen_mode_current == NULL) - screen_mode_current = getTreeInfoFromIdentifier(screen_modes, - DEFAULT_FULLSCREEN_MODE); - - /* if that also fails, set current screen mode to first available mode */ - if (screen_mode_current == NULL) - screen_mode_current = screen_modes; - - if (screen_mode_current == NULL) - video.fullscreen_available = FALSE; - } - - // if (video.fullscreen_available) - if (screen_mode_current != NULL) - { - setup.fullscreen_mode = screen_mode_current->identifier; + setString(&ti->infotext, "Window Scaling"); - /* needed for displaying screen mode name instead of identifier */ - screen_mode_text = screen_mode_current->name; - } + pushTreeInfo(&window_sizes, ti); - if (window_sizes == NULL) - { - int i; + if (value == setup.window_scaling_percent) + current_window_size_found = TRUE; + } - for (i = 0; window_sizes_list[i].value != -1; i++) + if (!current_window_size_found) { + // add entry for non-preset window scaling value + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); char identifier[32], name[32]; - int value = window_sizes_list[i].value; - char *text = window_sizes_list[i].text; + int value = setup.window_scaling_percent; ti->node_top = &window_sizes; ti->sort_priority = value; sprintf(identifier, "%d", value); - sprintf(name, "%s", text); + sprintf(name, "%d %% (Current)", value); setString(&ti->identifier, identifier); setString(&ti->name, name); @@ -4267,59 +4342,147 @@ static void execSetupGraphics() /* needed for displaying window size text instead of identifier */ window_size_text = window_size_current->name; +} -#if 1 - if (scroll_delays == NULL) +static void execSetupGraphics_setScalingTypes() +{ + if (scaling_types == NULL) { int i; - for (i = 0; scroll_delays_list[i].value != -1; i++) + for (i = 0; scaling_types_list[i].value != NULL; i++) { TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); char identifier[32], name[32]; - int value = scroll_delays_list[i].value; - char *text = scroll_delays_list[i].text; + char *value = scaling_types_list[i].value; + char *text = scaling_types_list[i].text; - ti->node_top = &scroll_delays; - ti->sort_priority = value; + ti->node_top = &scaling_types; + ti->sort_priority = i; - sprintf(identifier, "%d", value); + sprintf(identifier, "%s", value); sprintf(name, "%s", text); setString(&ti->identifier, identifier); setString(&ti->name, name); setString(&ti->name_sorting, name); - setString(&ti->infotext, "Scroll Delay"); + setString(&ti->infotext, "Anti-Aliasing"); - pushTreeInfo(&scroll_delays, ti); + pushTreeInfo(&scaling_types, ti); } - /* sort scroll delay values to start with lowest scroll delay value */ - sortTreeInfo(&scroll_delays); + /* sort scaling type values to start with lowest scaling type value */ + sortTreeInfo(&scaling_types); - /* set current scroll delay value to configured scroll delay value */ - scroll_delay_current = - getTreeInfoFromIdentifier(scroll_delays,i_to_a(setup.scroll_delay_value)); + /* set current scaling type value to configured scaling type value */ + scaling_type_current = + getTreeInfoFromIdentifier(scaling_types, setup.window_scaling_quality); - /* if that fails, set current scroll delay to reliable default value */ - if (scroll_delay_current == NULL) - scroll_delay_current = - getTreeInfoFromIdentifier(scroll_delays, i_to_a(STD_SCROLL_DELAY)); + /* if that fails, set current scaling type to reliable default value */ + if (scaling_type_current == NULL) + scaling_type_current = + getTreeInfoFromIdentifier(scaling_types, SCALING_QUALITY_DEFAULT); - /* if that also fails, set current scroll delay to first available value */ - if (scroll_delay_current == NULL) - scroll_delay_current = scroll_delays; + /* if that also fails, set current scaling type to first available value */ + if (scaling_type_current == NULL) + scaling_type_current = scaling_types; } - setup.scroll_delay_value = atoi(scroll_delay_current->identifier); + setup.window_scaling_quality = scaling_type_current->identifier; - /* needed for displaying scroll delay text instead of identifier */ - scroll_delay_text = scroll_delay_current->name; -#endif + /* needed for displaying scaling type text instead of identifier */ + scaling_type_text = scaling_type_current->name; +} + +static void execSetupGraphics_setScreenModes() +{ + // if (screen_modes == NULL && video.fullscreen_available) + if (screen_modes == NULL && video.fullscreen_modes != NULL) + { + int i; + + for (i = 0; video.fullscreen_modes[i].width != -1; i++) + { + TreeInfo *ti = newTreeInfo_setDefaults(TREE_TYPE_UNDEFINED); + char identifier[32], name[32]; + int x = video.fullscreen_modes[i].width; + int y = video.fullscreen_modes[i].height; + int xx, yy; + + get_aspect_ratio_from_screen_mode(&video.fullscreen_modes[i], &xx, &yy); + + ti->node_top = &screen_modes; + ti->sort_priority = x * 10000 + y; + + sprintf(identifier, "%dx%d", x, y); + sprintf(name, "%d x %d [%d:%d]", x, y, xx, yy); + + setString(&ti->identifier, identifier); + setString(&ti->name, name); + setString(&ti->name_sorting, name); + setString(&ti->infotext, "Fullscreen Mode"); + + pushTreeInfo(&screen_modes, ti); + } + + /* sort fullscreen modes to start with lowest available screen resolution */ + sortTreeInfo(&screen_modes); + + /* set current screen mode for fullscreen mode to configured setup value */ + screen_mode_current = getTreeInfoFromIdentifier(screen_modes, + setup.fullscreen_mode); + + /* if that fails, set current screen mode to reliable default value */ + if (screen_mode_current == NULL) + screen_mode_current = getTreeInfoFromIdentifier(screen_modes, + DEFAULT_FULLSCREEN_MODE); + + /* if that also fails, set current screen mode to first available mode */ + if (screen_mode_current == NULL) + screen_mode_current = screen_modes; + + if (screen_mode_current == NULL) + video.fullscreen_available = FALSE; + } + + // if (video.fullscreen_available) + if (screen_mode_current != NULL) + { + setup.fullscreen_mode = screen_mode_current->identifier; + + /* needed for displaying screen mode name instead of identifier */ + screen_mode_text = screen_mode_current->name; + } +} + +static void execSetupGraphics() +{ + if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) + { + // update "setup.window_scaling_percent" from list selection + execSetupGraphics_setWindowSizes(FALSE); + } + else + { + // update list selection from "setup.window_scaling_percent" + execSetupGraphics_setWindowSizes(TRUE); + } + + execSetupGraphics_setScalingTypes(); + execSetupGraphics_setScreenModes(); setup_mode = SETUP_MODE_GRAPHICS; DrawSetupScreen(); + +#if defined(TARGET_SDL2) + // window scaling may have changed at this point + ToggleFullscreenOrChangeWindowScalingIfNeeded(); + + // window scaling quality may have changed at this point + if (!strEqual(setup.window_scaling_quality, video.window_scaling_quality)) + SDLSetWindowScalingQuality(setup.window_scaling_quality); +#endif } #if !defined(PLATFORM_ANDROID) @@ -4335,6 +4498,13 @@ static void execSetupChooseWindowSize() DrawSetupScreen(); } + +static void execSetupChooseScalingType() +{ + setup_mode = SETUP_MODE_CHOOSE_SCALING_TYPE; + + DrawSetupScreen(); +} #else static void execSetupChooseScreenMode() { @@ -4348,13 +4518,6 @@ static void execSetupChooseScreenMode() #endif #endif -static void execSetupChooseScrollDelay() -{ - setup_mode = SETUP_MODE_CHOOSE_SCROLL_DELAY; - - DrawSetupScreen(); -} - static void execSetupChooseVolumeSimple() { setup_mode = SETUP_MODE_CHOOSE_VOLUME_SIMPLE; @@ -4655,6 +4818,10 @@ static struct TokenInfo setup_info_game[] = { TYPE_SWITCH, &setup.autorecord, "Auto-Record Tapes:" }, { TYPE_ENTER_LIST, execSetupChooseGameSpeed, "Game Speed:" }, { TYPE_STRING, &game_speed_text, "" }, +#if 1 + { TYPE_ENTER_LIST, execSetupChooseScrollDelay, "Scroll Delay:" }, + { TYPE_STRING, &scroll_delay_text, "" }, +#endif { TYPE_EMPTY, NULL, "" }, { TYPE_LEAVE_MENU, execSetupMain, "Back" }, @@ -4701,6 +4868,10 @@ static struct TokenInfo setup_info_graphics[] = #if defined(TARGET_SDL2) { TYPE_ENTER_LIST, execSetupChooseWindowSize, "Window Scaling:" }, { TYPE_STRING, &window_size_text, "" }, +#if 1 + { TYPE_ENTER_LIST, execSetupChooseScalingType, "Anti-Aliasing:" }, + { TYPE_STRING, &scaling_type_text, "" }, +#endif #else { TYPE_ENTER_LIST, execSetupChooseScreenMode, "Fullscreen Mode:" }, { TYPE_STRING, &screen_mode_text, "" }, @@ -4709,8 +4880,10 @@ static struct TokenInfo setup_info_graphics[] = #if 0 { TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" }, #endif +#if 0 { TYPE_ENTER_LIST, execSetupChooseScrollDelay, "Scroll Delay Value:" }, { TYPE_STRING, &scroll_delay_text, "" }, +#endif #if 0 { TYPE_SWITCH, &setup.soft_scrolling, "Soft Scrolling:" }, #endif @@ -5102,6 +5275,10 @@ static void changeSetupValue(int pos, int dx) } drawSetupValue(pos); + + // fullscreen state may have changed at this point + if (setup_info[pos].value == &setup.fullscreen) + ToggleFullscreenOrChangeWindowScalingIfNeeded(); } static void DrawCursorAndText_Setup(int pos, boolean active) @@ -5227,7 +5404,8 @@ static void DrawSetupScreen_Generic() (value_ptr == &setup.sound_music && !audio.music_available) || (value_ptr == &setup.fullscreen && !video.fullscreen_available) || (value_ptr == &screen_mode_text && !video.fullscreen_available) || - (value_ptr == &window_size_text && !video.window_scaling_available)) + (value_ptr == &window_size_text && !video.window_scaling_available) || + (value_ptr == &scaling_type_text && !video.window_scaling_available)) setup_info[i].type |= TYPE_GHOSTED; if (setup_info[i].type & (TYPE_ENTER_MENU|TYPE_ENTER_LIST)) @@ -5292,7 +5470,8 @@ void HandleSetupScreen_Generic(int mx, int my, int dx, int dy, int button) { PlaySound(SND_MENU_ITEM_SELECTING); - for (y = 0; y < num_setup_info; y++) + // for (y = 0; y < num_setup_info; y++) + for (y = 0; setup_info[y].type != 0; y++) { if (setup_info[y].type & TYPE_LEAVE_MENU) { @@ -6061,12 +6240,14 @@ void DrawSetupScreen() DrawSetupScreen_Input(); else if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED) DrawChooseTree(&game_speed_current); + else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) + DrawChooseTree(&scroll_delay_current); else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE) DrawChooseTree(&screen_mode_current); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) DrawChooseTree(&window_size_current); - else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) - DrawChooseTree(&scroll_delay_current); + else if (setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE) + DrawChooseTree(&scaling_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS) DrawChooseTree(&artwork.gfx_current); else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS) @@ -6088,8 +6269,19 @@ void DrawSetupScreen() void RedrawSetupScreenAfterFullscreenToggle() { +#if 1 + if (setup_mode == SETUP_MODE_GRAPHICS || + setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) + { + // update list selection from "setup.window_scaling_percent" + execSetupGraphics_setWindowSizes(TRUE); + + DrawSetupScreen(); + } +#else if (setup_mode == SETUP_MODE_GRAPHICS) DrawSetupScreen(); +#endif } void HandleSetupScreen(int mx, int my, int dx, int dy, int button) @@ -6098,12 +6290,14 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) HandleSetupScreen_Input(mx, my, dx, dy, button); else if (setup_mode == SETUP_MODE_CHOOSE_GAME_SPEED) HandleChooseTree(mx, my, dx, dy, button, &game_speed_current); + else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) + HandleChooseTree(mx, my, dx, dy, button, &scroll_delay_current); else if (setup_mode == SETUP_MODE_CHOOSE_SCREEN_MODE) HandleChooseTree(mx, my, dx, dy, button, &screen_mode_current); else if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) HandleChooseTree(mx, my, dx, dy, button, &window_size_current); - else if (setup_mode == SETUP_MODE_CHOOSE_SCROLL_DELAY) - HandleChooseTree(mx, my, dx, dy, button, &scroll_delay_current); + else if (setup_mode == SETUP_MODE_CHOOSE_SCALING_TYPE) + HandleChooseTree(mx, my, dx, dy, button, &scaling_type_current); else if (setup_mode == SETUP_MODE_CHOOSE_GRAPHICS) HandleChooseTree(mx, my, dx, dy, button, &artwork.gfx_current); else if (setup_mode == SETUP_MODE_CHOOSE_SOUNDS) @@ -6119,7 +6313,9 @@ void HandleSetupScreen(int mx, int my, int dx, int dy, int button) else HandleSetupScreen_Generic(mx, my, dx, dy, button); +#if 0 DoAnimation(); +#endif } void HandleGameActions()