From 2c7fac57ff5327870f48328e1865360bc712e4b0 Mon Sep 17 00:00:00 2001
From: thesource <thesourcehim@gmail.com>
Date: Wed, 6 Nov 2024 09:24:57 +0300
Subject: [PATCH] port 0.5 GPU scaling increments/window sizes to GTK3

---
 desmume/src/frontend/posix/gtk/graphics.ui |  1 +
 desmume/src/frontend/posix/gtk/main.cpp    | 14 +++++++++++++-
 desmume/src/frontend/posix/gtk/menu.ui     | 10 ++++++++++
 3 files changed, 24 insertions(+), 1 deletion(-)

diff --git a/desmume/src/frontend/posix/gtk/graphics.ui b/desmume/src/frontend/posix/gtk/graphics.ui
index 8134782c7..8826148e8 100644
--- a/desmume/src/frontend/posix/gtk/graphics.ui
+++ b/desmume/src/frontend/posix/gtk/graphics.ui
@@ -118,6 +118,7 @@
               <object class="GtkSpinButton" id="gpuscale">
                 <property name="can-focus">False</property>
                 <property name="numeric">True</property>
+                <property name="digits">1</property>
               </object>
               <packing>
                 <property name="left-attach">1</property>
diff --git a/desmume/src/frontend/posix/gtk/main.cpp b/desmume/src/frontend/posix/gtk/main.cpp
index 59c39427b..7003838d8 100644
--- a/desmume/src/frontend/posix/gtk/main.cpp
+++ b/desmume/src/frontend/posix/gtk/main.cpp
@@ -307,7 +307,9 @@ enum winsize_enum {
 	WINSIZE_2 = 4,
 	WINSIZE_2HALF = 5,
 	WINSIZE_3 = 6,
+	WINSIZE_3HALF = 7,
 	WINSIZE_4 = 8,
+	WINSIZE_4HALF = 9,
 	WINSIZE_5 = 10,
 };
 
@@ -1332,8 +1334,12 @@ static void SetWinsize(GSimpleAction *action, GVariant *parameter, gpointer user
         winsize = WINSIZE_2HALF;
     else if (strcmp(string, "3") == 0)
         winsize = WINSIZE_3;
+    else if (strcmp(string, "3.5") == 0)
+        winsize = WINSIZE_3HALF;
     else if (strcmp(string, "4") == 0)
         winsize = WINSIZE_4;
+    else if (strcmp(string, "4.5") == 0)
+        winsize = WINSIZE_4HALF;
     else if (strcmp(string, "5") == 0)
         winsize = WINSIZE_5;
     winsize_current = winsize;
@@ -2296,7 +2302,7 @@ static void GraphicsSettingsDialog(GSimpleAction *action, GVariant *parameter, g
 	wScale = GTK_COMBO_BOX(gtk_builder_get_object(builder, "scale"));
 	wGPUScale = GTK_SPIN_BUTTON(gtk_builder_get_object(builder, "gpuscale"));
 	gtk_spin_button_set_range(wGPUScale, GPU_SCALE_FACTOR_MIN, GPU_SCALE_FACTOR_MAX);
-	gtk_spin_button_set_increments(wGPUScale, 1.0, 1.0);
+	gtk_spin_button_set_increments(wGPUScale, 0.5, 1.0);
 	wMultisample = GTK_COMBO_BOX(gtk_builder_get_object(builder, "multisample"));
 	wPosterize = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "posterize"));
 	wSmoothing = GTK_TOGGLE_BUTTON(gtk_builder_get_object(builder, "smoothing"));
@@ -3774,9 +3780,15 @@ common_gtk_main(GApplication *app, gpointer user_data)
         case WINSIZE_3:
             string = "3";
             break;
+        case WINSIZE_3HALF:
+            string = "3.5";
+            break;
         case WINSIZE_4:
             string = "4";
             break;
+        case WINSIZE_4HALF:
+            string = "4.5";
+            break;
         case WINSIZE_5:
             string = "5";
             break;
diff --git a/desmume/src/frontend/posix/gtk/menu.ui b/desmume/src/frontend/posix/gtk/menu.ui
index c9369d697..b32bd4a89 100644
--- a/desmume/src/frontend/posix/gtk/menu.ui
+++ b/desmume/src/frontend/posix/gtk/menu.ui
@@ -334,11 +334,21 @@
               <attribute name='action'>app.winsize</attribute>
               <attribute name='target'>3</attribute>
             </item>
+            <item>
+              <attribute name='label' translatable='yes'>3.5×</attribute>
+              <attribute name='action'>app.winsize</attribute>
+              <attribute name='target'>3.5</attribute>
+            </item>
             <item>
               <attribute name='label' translatable='yes'>_4×</attribute>
               <attribute name='action'>app.winsize</attribute>
               <attribute name='target'>4</attribute>
             </item>
+            <item>
+              <attribute name='label' translatable='yes'>4.5×</attribute>
+              <attribute name='action'>app.winsize</attribute>
+              <attribute name='target'>4.5</attribute>
+            </item>
             <item>
               <attribute name='label' translatable='yes'>_5×</attribute>
               <attribute name='action'>app.winsize</attribute>