foxygit / doom Log in
commit 456e87433a1b642b84ac4161332da502c2d9a79f
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Fri Feb 23 23:41:58 2007 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Fri Feb 23 23:41:58 2007 +0000

    Add an extra option to chocolate-setup on Windows to allow the video
    driver to be selected from directx and windib.

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 839
---
 setup/configfile.c |  1 +
 setup/display.c    | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 setup/display.h    |  1 +
 3 files changed, 53 insertions(+)

diff --git a/setup/configfile.c b/setup/configfile.c
index bd461e52..8a3f700b 100644
--- a/setup/configfile.c
+++ b/setup/configfile.c
@@ -263,6 +263,7 @@ static default_t extra_defaults_list[] =
 #ifdef FEATURE_MULTIPLAYER
     {"player_name",                 &net_player_name,          DEFAULT_STRING, 0, 0},
 #endif
+    {"video_driver",                &video_driver,             DEFAULT_STRING, 0, 0},
 };

 static default_collection_t extra_defaults =
diff --git a/setup/display.c b/setup/display.c
index 82a24e8d..288e527d 100644
--- a/setup/display.c
+++ b/setup/display.c
@@ -56,6 +56,7 @@ static char *aspect_ratio_strings[] =

 static int vidmode = 0;

+char *video_driver = "";
 int autoadjust_video_settings = 1;
 int aspect_ratio_correct = RATIO_CORRECT_NONE;
 int fullscreen = 1;
@@ -63,6 +64,41 @@ int screenmultiply = 1;
 int startup_delay = 0;
 int show_endoom = 1;

+#ifdef _WIN32
+
+static int win32_video_driver = 0;
+
+static char *win32_video_drivers[] =
+{
+    "DirectX",
+    "Windows GDI",
+};
+
+static void SetWin32VideoDriver(void)
+{
+    if (!strcmp(video_driver, "windib"))
+    {
+        win32_video_driver = 1;
+    }
+    else
+    {
+        win32_video_driver = 0;
+    }
+}
+
+static void UpdateVideoDriver(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(unused))
+{
+    char *drivers[] =
+    {
+        "",
+        "windib",
+    };
+
+    video_driver = drivers[win32_video_driver];
+}
+
+#endif
+
 // Given the video settings (fullscreen, screenmultiply, etc), find the
 // current video mode

@@ -123,6 +159,21 @@ void ConfigDisplay(void)

     window = TXT_NewWindow("Display Configuration");

+#ifdef _WIN32
+    {
+        txt_dropdown_list_t *driver_list;
+
+        driver_list = TXT_NewDropdownList(&win32_video_driver,
+                                          win32_video_drivers,
+                                          2));
+
+        TXT_SignalConnect(driver_list, "changed", UpdateVideoDriver, NULL);
+        SetWin32VideoDriver();
+
+        TXT_AddWidget(window, driver_list);
+    }
+#endif
+
     TXT_AddWidgets(window,
                    TXT_NewCheckBox("Fullscreen", &fullscreen),
                    ar_table = TXT_NewTable(2),
diff --git a/setup/display.h b/setup/display.h
index af097cdb..c82f70b3 100644
--- a/setup/display.h
+++ b/setup/display.h
@@ -28,6 +28,7 @@ extern int fullscreen;
 extern int screenmultiply;
 extern int startup_delay;
 extern int show_endoom;
+extern char *video_driver;

 void ConfigDisplay(void);