X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Fscreens.c;h=d3cb7b1f806b76902d6fd7c982a7f2da5e756e10;hb=a375412650ede30883327dba34b3feafd9a3bf38;hp=fe3b75ea65a03251a9f55a5d2537211242667356;hpb=610e1570ca2492a97cfc5cf6a3794c07b605df48;p=rocksndiamonds.git diff --git a/src/screens.c b/src/screens.c index fe3b75ea..d3cb7b1f 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 @@ -3787,7 +3789,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; @@ -4159,81 +4165,57 @@ static void execSetupEditor() DrawSetupScreen(); } -static void execSetupGraphics() +static void execSetupGraphics_setWindowSizes(boolean update_list) { + if (window_sizes != NULL && update_list) + { + freeTreeInfo(window_sizes); + + window_sizes = NULL; + } - if (video.fullscreen_available && screen_modes == 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) - { - 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); @@ -4266,8 +4248,71 @@ static void execSetupGraphics() /* needed for displaying window size text instead of identifier */ window_size_text = window_size_current->name; +} -#if 1 +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_setScrollDelays() +{ if (scroll_delays == NULL) { int i; @@ -4314,13 +4359,24 @@ static void execSetupGraphics() /* needed for displaying scroll delay text instead of identifier */ scroll_delay_text = scroll_delay_current->name; -#endif +} + +static void execSetupGraphics() +{ + // update "setup.window_scaling_percent" from list selection + execSetupGraphics_setWindowSizes(FALSE); + // maybe remove non-preset value (if standard value was selected) + execSetupGraphics_setWindowSizes(TRUE); + + execSetupGraphics_setScreenModes(); + execSetupGraphics_setScrollDelays(); setup_mode = SETUP_MODE_GRAPHICS; DrawSetupScreen(); } +#if !defined(PLATFORM_ANDROID) #if defined(TARGET_SDL2) static void execSetupChooseWindowSize() { @@ -4344,6 +4400,7 @@ static void execSetupChooseScreenMode() DrawSetupScreen(); } #endif +#endif static void execSetupChooseScrollDelay() { @@ -4693,6 +4750,7 @@ static struct TokenInfo setup_info_editor[] = static struct TokenInfo setup_info_graphics[] = { +#if !defined(PLATFORM_ANDROID) { TYPE_SWITCH, &setup.fullscreen, "Fullscreen:" }, #if defined(TARGET_SDL2) { TYPE_ENTER_LIST, execSetupChooseWindowSize, "Window Scaling:" }, @@ -4701,6 +4759,7 @@ static struct TokenInfo setup_info_graphics[] = { TYPE_ENTER_LIST, execSetupChooseScreenMode, "Fullscreen Mode:" }, { TYPE_STRING, &screen_mode_text, "" }, #endif +#endif #if 0 { TYPE_SWITCH, &setup.scroll_delay, "Scroll Delay:" }, #endif @@ -6083,8 +6142,19 @@ void DrawSetupScreen() void RedrawSetupScreenAfterFullscreenToggle() { +#if 1 + if (setup_mode == SETUP_MODE_GRAPHICS || + setup_mode == SETUP_MODE_CHOOSE_WINDOW_SIZE) + { + // update "setup.window_scaling_percent" from list selection + 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)