shithub: choc

Download patch

ref: c3208e4f1648b7d4c3c19f88cebb935a0021252e
parent: 3dd7131d4104f935590eff6e0b9b3a51a7a34dff
author: Simon Howard <[email protected]>
date: Tue Sep 19 17:21:30 EDT 2006

New display settings dialog!

Subversion-branch: /trunk/chocolate-doom
Subversion-revision: 621

--- a/setup/display.c
+++ b/setup/display.c
@@ -20,25 +20,105 @@
 //
 #include "textscreen.h"
 
-static int vidmode = 1;
+typedef struct 
+{
+        char *description;
+        int fullscreen;
+        int screenmult;
+} vidmode_t;
+
+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 },
+};
+
+static int vidmode = 0;
 static int fullscreen = 0;
+static int screenmult = 1;
 static int grabmouse = 1;
 
-static char *modes[] = { "320x200", "640x400" };
+// Given the video settings (fullscreen, screenmult, etc), find the
+// current video mode
 
+static void SetCurrentMode(void)
+{
+        int i;
+
+        vidmode = 0;
+
+        for (i=0; modes[i].description != NULL; ++i)
+        {
+                if (fullscreen == modes[i].fullscreen
+                 && screenmult == modes[i].screenmult)
+                {
+                        vidmode = i;
+                        break;
+                }
+        }
+}
+
+static void ModeSelected(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(mode))
+{
+        TXT_CAST_ARG(vidmode_t, mode);
+
+        fullscreen = mode->fullscreen;
+        screenmult = mode->screenmult;
+}
+
 void ConfigDisplay(void)
 {
     txt_window_t *window;
-    txt_table_t *box;
+    txt_table_t *table;
+    txt_radiobutton_t *rbutton;
+    int i;
+
+    // Find the current mode
+
+    SetCurrentMode();
+
+    // Open the window
     
     window = TXT_NewWindow("Display Configuration");
 
-    box = TXT_NewTable(2);
-    TXT_AddWidget(box, TXT_NewLabel("Screen mode: "));
-    TXT_AddWidget(box, TXT_NewDropdownList(&vidmode, modes, 2));
-    TXT_AddWidget(window, box);
+    TXT_AddWidget(window, TXT_NewSeparator("Windowed modes"));
 
-    TXT_AddWidget(window, TXT_NewCheckBox("Fullscreen", &fullscreen));
+    table = TXT_NewTable(2);
+    
+    for (i=0; modes[i].fullscreen == 0; ++i)
+    {
+        rbutton = TXT_NewRadioButton(modes[i].description, &vidmode, i);
+        TXT_AddWidget(table, rbutton);
+        TXT_SignalConnect(rbutton, "selected", ModeSelected, &modes[i]);
+    }
+
+    TXT_AddWidget(window, table);
+
+    TXT_AddWidget(window, TXT_NewSeparator("Fullscreen modes"));
+
+    table = TXT_NewTable(2);
+
+    for (; modes[i].description != NULL; ++i)
+    {
+        rbutton = TXT_NewRadioButton(modes[i].description, &vidmode, i);
+        TXT_AddWidget(table, rbutton);
+        TXT_SignalConnect(rbutton, "selected", ModeSelected, &modes[i]);
+    }
+
+    TXT_AddWidget(window, table);
+
+    TXT_AddWidget(window, TXT_NewSeparator(NULL));
     TXT_AddWidget(window, TXT_NewCheckBox("Grab mouse", &grabmouse));
 }