X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=fe814ec765b5ddeea6e2e19e25f03cc21369a1e4;hb=3cecf0052abef6ada34ec8daa5639e7ceae4d36e;hp=4b8921c26929f9cca9c302b52d6676e8aa538962;hpb=2d298d8e6d16600c4ea7cdbdc08508098f0218ef;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 4b8921c2..fe814ec7 100644 --- a/src/screens.c +++ b/src/screens.c @@ -1580,10 +1580,6 @@ void DrawMainMenu(void) return; } - // needed if last screen was the setup screen and fullscreen state changed - // (moved to "execSetupGraphics()" to change fullscreen state directly) - // ToggleFullscreenOrChangeWindowScalingIfNeeded(); - // leveldir_current may be invalid (level group, parent link) if (!validLevelSeries(leveldir_current)) leveldir_current = getFirstValidTreeInfoEntry(leveldir_last_valid); @@ -5302,13 +5298,21 @@ static void execSetupGraphics(void) if (setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) execSetupGraphics_setWindowSizes(FALSE); + // update "setup.vsync_mode" from list selection + // (in this case, vsync mode was changed on setup screen) + if (setup_mode == SETUP_MODE_CHOOSE_VSYNC) + execSetupGraphics_setVsyncModes(FALSE); + // update list selection from "setup.window_scaling_percent" // (window scaling may have changed by resizing the window) execSetupGraphics_setWindowSizes(TRUE); + // update list selection from "setup.vsync_mode" + // (vsync_mode may have changed by re-creating the renderer) + execSetupGraphics_setVsyncModes(TRUE); + execSetupGraphics_setScalingTypes(); execSetupGraphics_setRenderingModes(); - execSetupGraphics_setVsyncModes(FALSE); setup_mode = SETUP_MODE_GRAPHICS; @@ -5319,7 +5323,7 @@ static void execSetupGraphics(void) ModifyGameSpeedIfNeeded(); // window scaling may have changed at this point - ToggleFullscreenOrChangeWindowScalingIfNeeded(); + ChangeWindowScalingIfNeeded(); // window scaling quality may have changed at this point if (!strEqual(setup.window_scaling_quality, video.window_scaling_quality)) @@ -5328,8 +5332,23 @@ static void execSetupGraphics(void) // screen rendering mode may have changed at this point SDLSetScreenRenderingMode(setup.screen_rendering_mode); + int setup_vsync_mode = VSYNC_MODE_STR_TO_INT(setup.vsync_mode); + int video_vsync_mode = video.vsync_mode; + // screen vsync mode may have changed at this point ChangeVsyncModeIfNeeded(); + + // check if setting vsync mode to selected value failed + if (setup_vsync_mode != video_vsync_mode && + setup_vsync_mode != video.vsync_mode) + { + // changing vsync mode to selected value failed -- reset displayed value + execSetupGraphics_setVsyncModes(TRUE); + + Request("Setting VSync failed!", REQ_CONFIRM); + + DrawSetupScreen(); + } } static void execSetupChooseWindowSize(void) @@ -6853,7 +6872,7 @@ static void changeSetupValue(int screen_pos, int setup_info_pos_raw, int dx) // fullscreen state may have changed at this point if (si->value == &setup.fullscreen) - ToggleFullscreenOrChangeWindowScalingIfNeeded(); + ToggleFullscreenIfNeeded(); // network mode may have changed at this point if (si->value == &setup.network_mode) @@ -8420,7 +8439,7 @@ void HandleGameActions(void) GameActions(); // main game loop if (tape.auto_play && !tape.playing) - AutoPlayTape(); // continue automatically playing next tape + AutoPlayTapes(); // continue automatically playing next tape }