menu: unhardcode 2x mode master github/master
authornotaz <notasas@gmail.com>
Fri, 22 Aug 2025 22:28:09 +0000 (01:28 +0300)
committeririxxxx <31696370+irixxxx@users.noreply.github.com>
Thu, 4 Sep 2025 09:11:17 +0000 (11:11 +0200)
For cases like notaz/pcsx_rearmed#385

Make it possible to adjust to fit user's display, there is not much saving
from having it hardcoded. PicoDrive will need to update its pandora and
ps2 posts, otherwise it uses 1x anyway so should mostly not be affected.

menu.c
menu.h

diff --git a/menu.c b/menu.c
index aa58846..ea4ec16 100644 (file)
--- a/menu.c
+++ b/menu.c
@@ -15,6 +15,7 @@
 #include <stdarg.h>\r
 #include <time.h>\r
 #include <locale.h> // savestate date\r
+#include <assert.h>\r
 \r
 #include "menu.h"\r
 #include "fonts.h"\r
@@ -59,14 +60,8 @@ static unsigned char *menu_font_data = NULL;
 static int menu_text_color = 0xfffe; // default to white\r
 static int menu_sel_color = -1; // disabled\r
 \r
-/* note: these might become non-constant in future */\r
-#if MENU_X2\r
-const int me_mfont_w = 16, me_mfont_h = 20;\r
-const int me_sfont_w = 12, me_sfont_h = 20;\r
-#else\r
-const int me_mfont_w = 8, me_mfont_h = 10;\r
-const int me_sfont_w = 6, me_sfont_h = 10;\r
-#endif\r
+int me_mfont_w = 8, me_mfont_h = 10;\r
+int me_sfont_w = 6, me_sfont_h = 10;\r
 \r
 static int g_menu_filter_off;\r
 static int g_border_style;\r
@@ -258,20 +253,27 @@ static char tolower_simple(char c)
        return c;\r
 }\r
 \r
-void menu_init_base(void)\r
+void menu_init_base_scale(unsigned int scale)\r
 {\r
        int i, c, l, pos;\r
        unsigned char *fd, *fds;\r
        char buff[256];\r
        FILE *f;\r
 \r
+       if (scale != 1 && scale != 2) {\r
+               assert(0); // not supported\r
+               return;\r
+       }\r
        if (menu_font_data != NULL)\r
                free(menu_font_data);\r
 \r
-       menu_font_data = calloc((MENU_X2 ? 256 * 320 : 128 * 160) / 2, 1);\r
+       menu_font_data = calloc(128 * scale * 160 * scale / 2, 1);\r
        if (menu_font_data == NULL)\r
                return;\r
 \r
+       me_mfont_w = 8 * scale; me_mfont_h = 10 * scale;\r
+       me_sfont_w = 6 * scale, me_sfont_h = 10 * scale;\r
+\r
        // generate default 8x10 font from fontdata8x8\r
        for (c = 0, fd = menu_font_data; c < 128; c++)\r
        {\r
@@ -290,8 +292,8 @@ void menu_init_base(void)
                fd += 8*2/2; // 2 empty lines\r
        }\r
 \r
-       if (MENU_X2) {\r
-               // expand default font\r
+       if (scale > 1) {\r
+               // expand the default font\r
                fds = menu_font_data + 128 * 160 / 2 - 4;\r
                fd  = menu_font_data + 256 * 320 / 2 - 1;\r
                for (c = 255; c >= 0; c--)\r
@@ -316,13 +318,18 @@ void menu_init_base(void)
 \r
        // load custom font and selector (stored as 1st symbol in font table)\r
        pos = plat_get_skin_dir(buff, sizeof(buff));\r
-       strcpy(buff + pos, "font.png");\r
-       readpng(menu_font_data, buff, READPNG_FONT,\r
-               MENU_X2 ? 256 : 128, MENU_X2 ? 320 : 160);\r
+       if (scale > 1)\r
+               snprintf(buff + pos, sizeof(buff) - pos, "fontx%d.png", scale);\r
+       else\r
+               snprintf(buff + pos, sizeof(buff) - pos, "font.png");\r
+       readpng(menu_font_data, buff, READPNG_FONT, 128 * scale, 160 * scale);\r
        // default selector symbol is '>'\r
        memcpy(menu_font_data, menu_font_data + ((int)'>') * me_mfont_w * me_mfont_h / 2,\r
                me_mfont_w * me_mfont_h / 2);\r
-       strcpy(buff + pos, "selector.png");\r
+       if (scale > 1)\r
+               snprintf(buff + pos, sizeof(buff) - pos, "selectorx%d.png", scale);\r
+       else\r
+               snprintf(buff + pos, sizeof(buff) - pos, "selector.png");\r
        readpng(menu_font_data, buff, READPNG_SELECTOR, me_mfont_w, me_mfont_h);\r
 \r
        // load custom colors\r
@@ -359,6 +366,11 @@ void menu_init_base(void)
        setlocale(LC_TIME, "");\r
 }\r
 \r
+void menu_init_base(void)\r
+{\r
+       menu_init_base_scale(1);\r
+}\r
+\r
 static void menu_darken_bg(void *dst, void *src, int pixels, int darker)\r
 {\r
        unsigned int *dest = dst;\r
diff --git a/menu.h b/menu.h
index edcdb59..789b07a 100644 (file)
--- a/menu.h
+++ b/menu.h
@@ -125,10 +125,11 @@ extern int g_menubg_src_pp;
 
 extern int g_autostateld_opt;
 
-extern const int me_mfont_w, me_mfont_h;
-extern const int me_sfont_w, me_sfont_h;
+extern int me_mfont_w, me_mfont_h;
+extern int me_sfont_w, me_sfont_h;
 
 void menu_init_base(void);
+void menu_init_base_scale(unsigned int scale);
 void menu_update_msg(const char *msg);
 void text_out16(int x, int y, const char *texto, ...);
 void smalltext_out16(int x, int y, const char *texto, int color);