foxygit / doom Log in
commit e339efa45fb54e794d1dd26f7a716a383cc3dc6d
Author:     Simon Howard <fraggle@gmail.com>
AuthorDate: Tue Mar 22 21:33:17 2011 +0000
Commit:     Simon Howard <fraggle@gmail.com>
CommitDate: Tue Mar 22 21:33:17 2011 +0000

    Switch separator to show "screen mode" or "window size" depending on
    whether fullscreen is turned on or not.

    Subversion-branch: /trunk/chocolate-doom
    Subversion-revision: 2308
---
 NEWS                       |  6 ++++++
 setup/display.c            | 26 +++++++++++++++++++++++---
 textscreen/txt_separator.c | 24 ++++++++++++++++--------
 textscreen/txt_separator.h | 10 +++++++++-
 4 files changed, 54 insertions(+), 12 deletions(-)

diff --git a/NEWS b/NEWS
index e8b16fe4..d0fee599 100644
--- a/NEWS
+++ b/NEWS
@@ -5,6 +5,8 @@
        with instructions specific to the platform that it is
        targetting.  This should help to avoid confusion that some
        users have reported experiencing.
+     * The display settings window in the setup tool has been
+       reorganised to a better arrangement.

     Compatibility:
      * Added support for the alternate version of the Final Doom
@@ -36,6 +38,10 @@
     libtextscreen:
      * It is now possible to type a '+' in input boxes (thanks
        Alexandre Xavier).
+     * It is possible to use the mouse wheel to scroll through scroll
+       panes.
+     * Clicking on scroll bars now moves the scroll handle to a
+       matching location.

 1.5.0 (2011-01-02):

diff --git a/setup/display.c b/setup/display.c
index 67e398b8..f15b2b06 100644
--- a/setup/display.c
+++ b/setup/display.c
@@ -517,6 +517,21 @@ static void UpdateBPP(TXT_UNCAST_ARG(widget), TXT_UNCAST_ARG(modes_table))
     GenerateModesTable(NULL, modes_table);
 }

+static void UpdateModeSeparator(TXT_UNCAST_ARG(widget),
+                                TXT_UNCAST_ARG(separator))
+{
+    TXT_CAST_ARG(txt_separator_t, separator);
+
+    if (fullscreen)
+    {
+        TXT_SetSeparatorLabel(separator, "Screen mode");
+    }
+    else
+    {
+        TXT_SetSeparatorLabel(separator, "Window size");
+    }
+}
+
 #if defined(_WIN32) && !defined(_WIN32_WCE)

 static int use_directx = 1;
@@ -612,9 +627,10 @@ void ConfigDisplay(void)
 {
     txt_window_t *window;
     txt_table_t *modes_table;
+    txt_separator_t *modes_separator;
     txt_table_t *bpp_table;
-    txt_checkbox_t *fs_checkbox;
     txt_window_action_t *advanced_button;
+    txt_checkbox_t *fs_checkbox;
     int i;
     int num_columns;
     int num_rows;
@@ -684,11 +700,14 @@ void ConfigDisplay(void)
     }

     TXT_AddWidgets(window,
-                   TXT_NewSeparator("Screen mode"),
+                   modes_separator = TXT_NewSeparator(""),
                    modes_table,
                    NULL);

-    TXT_SignalConnect(fs_checkbox, "changed", GenerateModesTable, modes_table);
+    TXT_SignalConnect(fs_checkbox, "changed",
+                      GenerateModesTable, modes_table);
+    TXT_SignalConnect(fs_checkbox, "changed",
+                      UpdateModeSeparator, modes_separator);

     // How many rows high will the configuration window be?
     // Need to take into account number of fullscreen modes, and also
@@ -726,6 +745,7 @@ void ConfigDisplay(void)
                                   TXT_SCREEN_W / 2, window_y);

     GenerateModesTable(NULL, modes_table);
+    UpdateModeSeparator(NULL, modes_separator);

     // Button to open "advanced" window.
     // Need to pass a pointer to the modes table, as some of the options
diff --git a/textscreen/txt_separator.c b/textscreen/txt_separator.c
index 6b779626..563d0c62 100644
--- a/textscreen/txt_separator.c
+++ b/textscreen/txt_separator.c
@@ -80,6 +80,20 @@ static void TXT_SeparatorDestructor(TXT_UNCAST_ARG(separator))
     free(separator->label);
 }

+void TXT_SetSeparatorLabel(txt_separator_t *separator, char *label)
+{
+    free(separator->label);
+
+    if (label != NULL)
+    {
+        separator->label = strdup(label);
+    }
+    else
+    {
+        separator->label = NULL;
+    }
+}
+
 txt_widget_class_t txt_separator_class =
 {
     TXT_NeverSelectable,
@@ -99,14 +113,8 @@ txt_separator_t *TXT_NewSeparator(char *label)

     TXT_InitWidget(separator, &txt_separator_class);

-    if (label != NULL)
-    {
-        separator->label = strdup(label);
-    }
-    else
-    {
-        separator->label = NULL;
-    }
+    separator->label = NULL;
+    TXT_SetSeparatorLabel(separator, label);

     return separator;
 }
diff --git a/textscreen/txt_separator.h b/textscreen/txt_separator.h
index 2f2331da..f693d70e 100644
--- a/textscreen/txt_separator.h
+++ b/textscreen/txt_separator.h
@@ -59,6 +59,14 @@ extern txt_widget_class_t txt_separator_class;

 txt_separator_t *TXT_NewSeparator(char *label);

-#endif /* #ifndef TXT_SEPARATOR_H */
+/**
+ * Change the label on a separator.
+ *
+ * @param separator     The separator.
+ * @param label         The new label.
+ */
+
+void TXT_SetSeparatorLabel(txt_separator_t *separator, char *label);

+#endif /* #ifndef TXT_SEPARATOR_H */