diff options
author | Simon Howard | 2011-02-12 15:38:08 +0000 |
---|---|---|
committer | Simon Howard | 2011-02-12 15:38:08 +0000 |
commit | a9996b41e954d85fde5ec5188bbf6a7f4df88011 (patch) | |
tree | 113669ff889c9184aaa28224317c8b04c2c5bfeb /src/setup | |
parent | 7d7b5087d2288fc6e2493448968f7d786043b389 (diff) | |
parent | a366f68b2959282b22ab6f08569a253f0540745c (diff) | |
download | chocolate-doom-a9996b41e954d85fde5ec5188bbf6a7f4df88011.tar.gz chocolate-doom-a9996b41e954d85fde5ec5188bbf6a7f4df88011.tar.bz2 chocolate-doom-a9996b41e954d85fde5ec5188bbf6a7f4df88011.zip |
Merge from trunk.
Subversion-branch: /branches/raven-branch
Subversion-revision: 2258
Diffstat (limited to 'src/setup')
-rw-r--r-- | src/setup/display.c | 56 | ||||
-rw-r--r-- | src/setup/execute.c | 55 | ||||
-rw-r--r-- | src/setup/execute.h | 2 | ||||
-rw-r--r-- | src/setup/mainmenu.c | 26 | ||||
-rw-r--r-- | src/setup/multiplayer.c | 30 |
5 files changed, 118 insertions, 51 deletions
diff --git a/src/setup/display.c b/src/setup/display.c index fd7c0a9a..f5f190f2 100644 --- a/src/setup/display.c +++ b/src/setup/display.c @@ -37,6 +37,8 @@ #include "display.h" +extern void RestartTextscreen(void); + typedef struct { char *description; @@ -95,6 +97,7 @@ static screen_mode_t screen_modes_scaled[] = // List of fullscreen modes generated at runtime static screen_mode_t *screen_modes_fullscreen = NULL; +static int num_screen_modes_fullscreen; static int vidmode = 0; @@ -411,6 +414,8 @@ static void BuildFullscreenModesList(void) memcpy(m1, m2, sizeof(screen_mode_t)); memcpy(m2, &m, sizeof(screen_mode_t)); } + + num_screen_modes_fullscreen = num_modes; } static int FindBestMode(screen_mode_t *modes) @@ -477,7 +482,7 @@ static void GenerateModesTable(TXT_UNCAST_ARG(widget), // Build the table TXT_ClearTable(modes_table); - TXT_SetColumnWidths(modes_table, 15, 15, 15); + TXT_SetColumnWidths(modes_table, 14, 14, 14, 14, 14); for (i=0; modes[i].w != 0; ++i) { @@ -530,18 +535,6 @@ static char *win32_video_drivers[] = "Windows GDI", }; -// Restart the textscreen library. Used when the video_driver variable -// is changed. - -static void RestartTextscreen(void) -{ - TXT_Shutdown(); - - SetDisplayDriver(); - - TXT_Init(); -} - static void SetWin32VideoDriver(void) { if (!strcmp(video_driver, "windib")) @@ -593,6 +586,8 @@ void ConfigDisplay(void) txt_checkbox_t *fs_checkbox; txt_checkbox_t *ar_checkbox; txt_dropdown_list_t *bpp_selector; + int num_columns; + int window_y; // What color depths are supported? Generate supported_bpps array // and set selected_bpp to match the current value of screen_bpp. @@ -612,16 +607,43 @@ void ConfigDisplay(void) window = TXT_NewWindow("Display Configuration"); - TXT_SetWindowPosition(window, TXT_HORIZ_CENTER, TXT_VERT_TOP, - TXT_SCREEN_W / 2, 5); - TXT_AddWidgets(window, fs_checkbox = TXT_NewCheckBox("Fullscreen", &fullscreen), ar_checkbox = TXT_NewCheckBox("Correct aspect ratio", &aspect_ratio_correct), NULL); - modes_table = TXT_NewTable(3); + // Some machines can have lots of video modes. This tries to + // keep a limit of six lines by increasing the number of + // columns. In extreme cases, the window is moved up slightly. + + BuildFullscreenModesList(); + + window_y = 5; + + if (num_screen_modes_fullscreen <= 18) + { + num_columns = 3; + } + else if (num_screen_modes_fullscreen <= 24) + { + num_columns = 4; + } + else + { + num_columns = 5; + window_y -= 3; + } + + modes_table = TXT_NewTable(num_columns); + + // The window is set at a fixed vertical position. This keeps + // the top of the window stationary when switching between + // fullscreen and windowed mode (which causes the window's + // height to change). + + TXT_SetWindowPosition(window, TXT_HORIZ_CENTER, TXT_VERT_TOP, + TXT_SCREEN_W / 2, window_y); // On Windows, there is an extra control to change between // the Windows GDI and DirectX video drivers. diff --git a/src/setup/execute.c b/src/setup/execute.c index 4be44149..f85b8af4 100644 --- a/src/setup/execute.c +++ b/src/setup/execute.c @@ -88,6 +88,42 @@ static char *TempFile(char *s) return result; } +static int ArgumentNeedsEscape(char *arg) +{ + char *p; + + for (p = arg; *p != '\0'; ++p) + { + if (isspace(*p)) + { + return 1; + } + } + + return 0; +} + +// Arguments passed to the setup tool should be passed through to the +// game when launching a game. Calling this adds all arguments from +// myargv to the output context. + +void PassThroughArguments(execute_context_t *context) +{ + int i; + + for (i = 1; i < myargc; ++i) + { + if (ArgumentNeedsEscape(myargv[i])) + { + AddCmdLineParameter(context, "\"%s\"", myargv[i]); + } + else + { + AddCmdLineParameter(context, "%s", myargv[i]); + } + } +} + execute_context_t *NewExecuteContext(void) { execute_context_t *result; @@ -106,25 +142,6 @@ execute_context_t *NewExecuteContext(void) return result; } -void AddConfigParameters(execute_context_t *context) -{ - int p; - - p = M_CheckParm("-config"); - - if (p > 0) - { - AddCmdLineParameter(context, "-config \"%s\"", myargv[p + 1]); - } - - p = M_CheckParm("-extraconfig"); - - if (p > 0) - { - AddCmdLineParameter(context, "-extraconfig \"%s\"", myargv[p + 1]); - } -} - void AddCmdLineParameter(execute_context_t *context, char *s, ...) { va_list args; diff --git a/src/setup/execute.h b/src/setup/execute.h index 24711a16..25f1f10a 100644 --- a/src/setup/execute.h +++ b/src/setup/execute.h @@ -35,7 +35,7 @@ typedef struct execute_context_s execute_context_t; execute_context_t *NewExecuteContext(void); void AddCmdLineParameter(execute_context_t *context, char *s, ...); -void AddConfigParameters(execute_context_t *context); +void PassThroughArguments(execute_context_t *context); int ExecuteDoom(execute_context_t *context); int FindInstalledIWADs(void); diff --git a/src/setup/mainmenu.c b/src/setup/mainmenu.c index ffa174de..55496010 100644 --- a/src/setup/mainmenu.c +++ b/src/setup/mainmenu.c @@ -156,7 +156,7 @@ static void LaunchDoom(void *unused1, void *unused2) // Launch Doom exec = NewExecuteContext(); - AddConfigParameters(exec); + PassThroughArguments(exec); ExecuteDoom(exec); exit(0); @@ -297,11 +297,9 @@ static void SetIcon(void) free(mask); } -// -// Initialize and run the textscreen GUI. -// +// Initialize the textscreen library. -static void RunGUI(void) +static void InitTextscreen(void) { SetDisplayDriver(); @@ -313,6 +311,24 @@ static void RunGUI(void) TXT_SetDesktopTitle(PACKAGE_NAME " Setup ver " PACKAGE_VERSION); SetIcon(); +} + +// Restart the textscreen library. Used when the video_driver variable +// is changed. + +void RestartTextscreen(void) +{ + TXT_Shutdown(); + InitTextscreen(); +} + +// +// Initialize and run the textscreen GUI. +// + +static void RunGUI(void) +{ + InitTextscreen(); TXT_GUIMainLoop(); } diff --git a/src/setup/multiplayer.c b/src/setup/multiplayer.c index 0d88221f..aed89212 100644 --- a/src/setup/multiplayer.c +++ b/src/setup/multiplayer.c @@ -70,10 +70,10 @@ static char *iwadfile; static char *doom_skills[] = { - "I'm too young to die!", + "I'm too young to die.", "Hey, not too rough.", "Hurt me plenty.", - "Ultra-violence", + "Ultra-Violence.", "NIGHTMARE!", }; @@ -144,6 +144,7 @@ static int fast = 0; static int respawn = 0; static int udpport = 2342; static int timer = 0; +static int privateserver = 0; static txt_dropdown_list_t *skillbutton; static txt_button_t *warpbutton; @@ -277,6 +278,11 @@ static void StartGame(int multiplayer) { AddCmdLineParameter(exec, "-timer %i", timer); } + + if (privateserver) + { + AddCmdLineParameter(exec, "-privateserver"); + } } AddWADs(exec); @@ -284,7 +290,7 @@ static void StartGame(int multiplayer) TXT_Shutdown(); M_SaveDefaults(); - AddConfigParameters(exec); + PassThroughArguments(exec); ExecuteDoom(exec); @@ -647,14 +653,12 @@ static void StartGameMenu(char *window_title, int multiplayer) TXT_NewCheckBox("Respawning monsters", &respawn), TXT_NewSeparator("Advanced"), advanced_table = TXT_NewTable(2), - TXT_NewButton2("Add extra parameters...", - OpenExtraParamsWindow, NULL), NULL); TXT_SetWindowAction(window, TXT_HORIZ_CENTER, WadWindowAction()); TXT_SetWindowAction(window, TXT_HORIZ_RIGHT, StartGameAction(multiplayer)); - TXT_SetColumnWidths(gameopt_table, 12, 12); + TXT_SetColumnWidths(gameopt_table, 12, 6); if (gamemission == doom) { @@ -694,13 +698,21 @@ static void StartGameMenu(char *window_title, int multiplayer) NULL), NULL); - TXT_AddWidgets(advanced_table, + TXT_AddWidget(window, + TXT_NewInvertedCheckBox("Register with master server", + &privateserver)); + + TXT_AddWidgets(advanced_table, TXT_NewLabel("UDP port"), TXT_NewIntInputBox(&udpport, 5), NULL); } - TXT_SetColumnWidths(advanced_table, 12, 12); + TXT_AddWidget(window, + TXT_NewButton2("Add extra parameters...", + OpenExtraParamsWindow, NULL)); + + TXT_SetColumnWidths(advanced_table, 12, 6); TXT_SignalConnect(iwad_selector, "changed", UpdateWarpType, NULL); @@ -749,7 +761,7 @@ static void DoJoinGame(void *unused1, void *unused2) M_SaveDefaults(); - AddConfigParameters(exec); + PassThroughArguments(exec); ExecuteDoom(exec); |