X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=fbe8007298591b372fb1386f81bace9f1e10e645;hb=22f539028eb272b70d339e1f37552a2a89f37dd6;hp=6655bd88ac34ea271f013a07917ae3033d981a36;hpb=8e8a0eddc70d1581ecbd18ff9bad3db3485956b7;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index 6655bd88..fbe80072 100644 --- a/src/screens.c +++ b/src/screens.c @@ -231,12 +231,20 @@ void DrawHeadline() static void ToggleFullscreenIfNeeded() { - if (setup.fullscreen != video.fullscreen_enabled) + if (setup.fullscreen != video.fullscreen_enabled || + setup.fullscreen_mode != video.fullscreen_mode_current) { /* save old door content */ BlitBitmap(backbuffer, bitmap_db_door, DX, DY, DXSIZE, DYSIZE, DOOR_GFX_PAGEX1, DOOR_GFX_PAGEY1); + if (setup.fullscreen && video.fullscreen_enabled) + { + /* keep fullscreen mode, but change screen mode */ + video.fullscreen_mode_current = setup.fullscreen_mode; + video.fullscreen_enabled = FALSE; + } + /* toggle fullscreen */ ChangeVideoModeIfNeeded(setup.fullscreen); setup.fullscreen = video.fullscreen_enabled; @@ -2563,12 +2571,15 @@ static void execSetupGraphics() char identifier[20], name[20]; 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 * y; sprintf(identifier, "%dx%d", x, y); - sprintf(name, "%d x %d", x, y); + sprintf(name, "%d x %d [%d:%d]", x, y, xx, yy); setString(&ti->identifier, identifier); setString(&ti->name, name); @@ -2578,11 +2589,19 @@ static void execSetupGraphics() 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 reliable default value */ + /* set current screen mode for fullscreen mode to configured setup value */ screen_mode_current = getTreeInfoFromIdentifier(screen_modes, - DEFAULT_FULLSCREEN_MODE); + 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;