summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--setup/display.c33
1 files changed, 30 insertions, 3 deletions
diff --git a/setup/display.c b/setup/display.c
index f4e38d56..0ead83fe 100644
--- a/setup/display.c
+++ b/setup/display.c
@@ -74,6 +74,13 @@ int screen_height = 200;
int startup_delay = 0;
int show_endoom = 1;
+// These are the last screen width/height values that were chosen by the
+// user. These are used when finding the "nearest" mode, so when
+// changing the fullscreen / aspect ratio options, the setting does not
+// jump around.
+
+static int selected_screen_width = 0, selected_screen_height;
+
#ifdef _WIN32
static int win32_video_driver = 0;
@@ -115,6 +122,11 @@ static void ModeSelected(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(mode))
screen_width = mode->w;
screen_height = mode->h;
+
+ // This is now the most recently selected screen width
+
+ selected_screen_width = screen_width;
+ selected_screen_height = screen_height;
}
static int GoodFullscreenMode(screen_mode_t *mode)
@@ -195,8 +207,10 @@ static int FindBestMode(screen_mode_t *modes)
for (i=0; modes[i].w != 0; ++i)
{
- diff = (screen_width - modes[i].w) * (screen_width - modes[i].w)
- + (screen_height - modes[i].h) * (screen_height - modes[i].h);
+ diff = (selected_screen_width - modes[i].w)
+ * (selected_screen_width - modes[i].w)
+ + (selected_screen_height - modes[i].h)
+ * (selected_screen_height - modes[i].h);
if (best_mode == -1 || diff < best_mode_diff)
{
@@ -236,7 +250,7 @@ static void GenerateModesTable(TXT_UNCAST_ARG(widget),
// Build the table
TXT_ClearTable(modes_table);
- TXT_SetColumnWidths(modes_table, 14, 14, 14);
+ TXT_SetColumnWidths(modes_table, 15, 15, 15);
for (i=0; modes[i].w != 0; ++i)
{
@@ -257,6 +271,9 @@ static void GenerateModesTable(TXT_UNCAST_ARG(widget),
// settings
vidmode = FindBestMode(modes);
+
+ screen_width = modes[vidmode].w;
+ screen_height = modes[vidmode].h;
}
void ConfigDisplay(void)
@@ -266,10 +283,20 @@ void ConfigDisplay(void)
txt_checkbox_t *fs_checkbox;
txt_checkbox_t *ar_checkbox;
+ // First time in? Initialise selected_screen_{width,height}
+
+ if (selected_screen_width == 0)
+ {
+ selected_screen_width = screen_width;
+ selected_screen_height = screen_height;
+ }
+
// Open the window
window = TXT_NewWindow("Display Configuration");
+ TXT_SetWindowPosition(window, TXT_HORIZ_CENTER, TXT_VERT_TOP, 40, 5);
+
TXT_AddWidgets(window,
fs_checkbox = TXT_NewCheckBox("Fullscreen", &fullscreen),
ar_checkbox = TXT_NewCheckBox("Correct aspect ratio",