From 5d5311c53cb3c94cdeb57abba447969345b89ca4 Mon Sep 17 00:00:00 2001
From: StapleButter <thetotalworm@gmail.com>
Date: Thu, 5 Oct 2017 01:03:22 +0200
Subject: use grids instead of nested boxes for input config dialog. (still
 lags, needs optimization) adjust things to make those dialogs sexier.

---
 src/libui_sdl/DlgInputConfig.cpp       | 20 +++++++-------------
 src/libui_sdl/libui/windows/button.cpp |  3 +++
 2 files changed, 10 insertions(+), 13 deletions(-)

(limited to 'src')

diff --git a/src/libui_sdl/DlgInputConfig.cpp b/src/libui_sdl/DlgInputConfig.cpp
index 4348261..29f835f 100644
--- a/src/libui_sdl/DlgInputConfig.cpp
+++ b/src/libui_sdl/DlgInputConfig.cpp
@@ -303,27 +303,24 @@ void Open()
     {
         uiBox* in_ctrl = uiNewHorizontalBox();
         uiBoxAppend(top, uiControl(in_ctrl), 0);
-
+        uiBoxSetPadded(in_ctrl, 1);
 
         uiGroup* g_key = uiNewGroup("Keyboard");
         uiBoxAppend(in_ctrl, uiControl(g_key), 1);
-        uiBox* b_key = uiNewVerticalBox();
+        uiGrid* b_key = uiNewGrid();
         uiGroupSetChild(g_key, uiControl(b_key));
 
         for (int i = 0; i < 12; i++)
         {
             int j = keyorder[i];
 
-            uiBox* box = uiNewHorizontalBox();
-            uiBoxAppend(b_key, uiControl(box), 0);
-
             uiLabel* label = uiNewLabel(keylabels[j]);
-            uiBoxAppend(box, uiControl(label), 1);
+            uiGridAppend(b_key, uiControl(label), 0, i, 1, 1, 1, uiAlignStart, 1, uiAlignCenter);
 
             char* keyname = uiKeyName(Config::KeyMapping[j]);
 
             uiButton* btn = uiNewButton(keyname);
-            uiBoxAppend(box, uiControl(btn), 1);
+            uiGridAppend(b_key, uiControl(btn), 1, i, 1, 1, 1, uiAlignFill, 1, uiAlignCenter);
             uiButtonOnClicked(btn, OnKeyStartConfig, &keyorder[i]);
 
             uiFreeText(keyname);
@@ -331,24 +328,21 @@ void Open()
 
         uiGroup* g_joy = uiNewGroup("Joystick");
         uiBoxAppend(in_ctrl, uiControl(g_joy), 1);
-        uiBox* b_joy = uiNewVerticalBox();
+        uiGrid* b_joy = uiNewGrid();
         uiGroupSetChild(g_joy, uiControl(b_joy));
 
         for (int i = 0; i < 12; i++)
         {
             int j = keyorder[i];
 
-            uiBox* box = uiNewHorizontalBox();
-            uiBoxAppend(b_joy, uiControl(box), 0);
-
             uiLabel* label = uiNewLabel(keylabels[j]);
-            uiBoxAppend(box, uiControl(label), 1);
+            uiGridAppend(b_joy, uiControl(label), 0, i, 1, 1, 1, uiAlignStart, 1, uiAlignCenter);
 
             char keyname[16];
             JoyMappingName(Config::JoyMapping[j], keyname);
 
             uiButton* btn = uiNewButton(keyname);
-            uiBoxAppend(box, uiControl(btn), 1);
+            uiGridAppend(b_joy, uiControl(btn), 1, i, 1, 1, 1, uiAlignFill, 1, uiAlignCenter);
             uiButtonOnClicked(btn, OnJoyStartConfig, &keyorder[i]);
         }
     }
diff --git a/src/libui_sdl/libui/windows/button.cpp b/src/libui_sdl/libui/windows/button.cpp
index 3b12e72..b83d6ec 100644
--- a/src/libui_sdl/libui/windows/button.cpp
+++ b/src/libui_sdl/libui/windows/button.cpp
@@ -32,6 +32,7 @@ uiWindowsControlAllDefaultsExceptDestroy(uiButton)
 
 // from http://msdn.microsoft.com/en-us/library/windows/desktop/dn742486.aspx#sizingandspacing
 #define buttonHeight 14
+#define buttonMinWidth 64
 
 static void uiButtonMinimumSize(uiWindowsControl *c, int *width, int *height)
 {
@@ -45,6 +46,7 @@ static void uiButtonMinimumSize(uiWindowsControl *c, int *width, int *height)
 	size.cy = 0;
 	if (SendMessageW(b->hwnd, BCM_GETIDEALSIZE, 0, (LPARAM) (&size)) != FALSE) {
 		*width = size.cx;
+		if (*width < buttonMinWidth) *width = buttonMinWidth;
 		*height = size.cy;
 		return;
 	}
@@ -53,6 +55,7 @@ static void uiButtonMinimumSize(uiWindowsControl *c, int *width, int *height)
 	// Microsoft says to use a fixed width for all buttons; this isn't good enough
 	// use the text width instead, with some edge padding
 	*width = uiWindowsWindowTextWidth(b->hwnd) + (2 * GetSystemMetrics(SM_CXEDGE));
+	if (*width < buttonMinWidth) *width = buttonMinWidth;
 	y = buttonHeight;
 	uiWindowsGetSizing(b->hwnd, &sizing);
 	uiWindowsSizingDlgUnitsToPixels(&sizing, NULL, &y);
-- 
cgit v1.2.3