ref: 877604dcefc3bc9186b9b24fc5412f6073fc93c9
parent: 20a1417b2e619ee1801737463a7e800096dcd3f8
author: Simon Howard <fraggle@gmail.com>
date: Fri Dec 15 20:56:59 EST 2006
Add aspect ratio correction to setup tool. Redesign the display settings dialog. Subversion-branch: /trunk/chocolate-doom Subversion-revision: 780
--- a/setup/configfile.c
+++ b/setup/configfile.c
@@ -250,6 +250,7 @@
{
{"autoadjust_video_settings", &autoadjust_video_settings, DEFAULT_INT, 0, 0},
{"fullscreen", &fullscreen, DEFAULT_INT, 0, 0},
+ {"aspect_ratio_correct", &aspect_ratio_correct, DEFAULT_INT, 0, 0},
{"startup_delay", &startup_delay, DEFAULT_INT, 0, 0},
{"screenmultiply", &screenmultiply, DEFAULT_INT, 0, 0},
{"grabmouse", &grabmouse, DEFAULT_INT, 0, 0},
--- a/setup/display.c
+++ b/setup/display.c
@@ -25,30 +25,39 @@
typedef struct
{
char *description;
- int fullscreen;
+ char *description_4_3;
int screenmultiply;
+ txt_radiobutton_t *widget;
} vidmode_t;
+enum
+{
+ RATIO_CORRECT_NONE,
+ RATIO_CORRECT_LETTERBOX,
+ RATIO_CORRECT_STRETCH,
+ NUM_RATIO_CORRECT,
+};
+
static vidmode_t modes[] =
{
- { "320x200", 0, 1 },
- { "640x400", 0, 2 },
- { "960x600", 0, 3 },
- { "1280x800", 0, 4 },
- { "320x200", 1, 1 },
- { "320x240", 2, 1 },
- { "640x400", 1, 2 },
- { "640x480", 2, 2 },
- { "960x600", 1, 3 },
- { "960x720", 2, 3 },
- { "1280x800", 1, 4 },
- { "1280x960", 2, 4 },
- { NULL, 0, 0 },
+ { "320x200", "320x240", 1, NULL },
+ { "960x600", "960x720", 3, NULL },
+ { "640x400", "640x480", 2, NULL },
+ { "1280x800", "1280x960", 4, NULL },
+ { NULL, NULL, 0, NULL },
};
+static char *aspect_ratio_strings[] =
+{
+ "Disabled",
+ "Letterbox mode",
+ "Stretch to 4:3",
+};
+
static int vidmode = 0;
int autoadjust_video_settings = 1;
+int aspect_ratio_correct = RATIO_CORRECT_NONE;
int fullscreen = 1;
int screenmultiply = 1;
int startup_delay = 0;
@@ -65,8 +74,7 @@
for (i=0; modes[i].description != NULL; ++i)
{
- if (fullscreen == modes[i].fullscreen
- && screenmultiply == modes[i].screenmultiply)
+ if (screenmultiply == modes[i].screenmultiply)
{
vidmode = i;
break;
@@ -78,17 +86,33 @@
{
TXT_CAST_ARG(vidmode_t, mode);
- fullscreen = mode->fullscreen;
screenmultiply = mode->screenmultiply;
}
+static void UpdateModes(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused))
+{
+ int i;
+
+ for (i=0; modes[i].description != NULL; ++i)
+ {
+ if (aspect_ratio_correct == RATIO_CORRECT_NONE)
+ {
+ TXT_SetRadioButtonLabel(modes[i].widget, modes[i].description);
+ }
+ else
+ {
+ TXT_SetRadioButtonLabel(modes[i].widget, modes[i].description_4_3);
+ }
+ }
+}
+
void ConfigDisplay(void)
{
txt_window_t *window;
- txt_table_t *windowed_table;
- txt_table_t *fullscreen_table;
- txt_table_t *misc_table;
+ txt_table_t *ar_table;
+ txt_table_t *modes_table;
txt_radiobutton_t *rbutton;
+ txt_dropdown_list_t *ar_dropdown;
int i;
// Find the current mode
@@ -100,38 +124,37 @@
window = TXT_NewWindow("Display Configuration");
TXT_AddWidgets(window,
- TXT_NewSeparator("Fullscreen modes"),
- fullscreen_table = TXT_NewTable(2),
- TXT_NewSeparator("Windowed modes"),
- windowed_table = TXT_NewTable(2),
+ TXT_NewCheckBox("Fullscreen", &fullscreen),
+ ar_table = TXT_NewTable(2),
+ TXT_NewSeparator("Screen mode"),
+ modes_table = TXT_NewTable(2),
TXT_NewSeparator("Misc."),
TXT_NewCheckBox("Show ENDOOM screen", &show_endoom),
- misc_table = TXT_NewTable(2),
NULL);
- TXT_SetColumnWidths(windowed_table, 14, 14);
-
- for (i=0; modes[i].fullscreen == 0; ++i)
- {
- rbutton = TXT_NewRadioButton(modes[i].description, &vidmode, i);
- TXT_AddWidget(windowed_table, rbutton);
- TXT_SignalConnect(rbutton, "selected", ModeSelected, &modes[i]);
- }
+ TXT_SetColumnWidths(ar_table, 25, 0);
- TXT_SetColumnWidths(fullscreen_table, 14, 14);
+ TXT_AddWidgets(ar_table,
+ TXT_NewLabel("Aspect ratio correction"),
+ ar_dropdown = TXT_NewDropdownList(&aspect_ratio_correct,
+ aspect_ratio_strings,
+ NUM_RATIO_CORRECT),
+ TXT_NewLabel("Startup delay (ms)"),
+ TXT_NewIntInputBox(&startup_delay, 5),
+ NULL);
- for (; modes[i].description != NULL; ++i)
+ TXT_SignalConnect(ar_dropdown, "changed", UpdateModes, NULL);
+
+ TXT_SetColumnWidths(modes_table, 14, 14);
+
+ for (i=0; modes[i].description != NULL; ++i)
{
rbutton = TXT_NewRadioButton(modes[i].description, &vidmode, i);
- TXT_AddWidget(fullscreen_table, rbutton);
+ modes[i].widget = rbutton;
+ TXT_AddWidget(modes_table, rbutton);
TXT_SignalConnect(rbutton, "selected", ModeSelected, &modes[i]);
}
- TXT_SetColumnWidths(misc_table, 22, 5);
-
- TXT_AddWidgets(misc_table,
- TXT_NewLabel("Startup delay (ms)"),
- TXT_NewIntInputBox(&startup_delay, 5),
- NULL);
+ UpdateModes(NULL, NULL);
}
--- a/setup/display.h
+++ b/setup/display.h
@@ -23,6 +23,7 @@
#define SETUP_DISPLAY_H
extern int autoadjust_video_settings;
+extern int aspect_ratio_correct;
extern int fullscreen;
extern int screenmultiply;
extern int startup_delay;