new 32x renderers, auto fskip change, massive refactoring
[libpicofe.git] / common / menu.c
index 8accc25..34d5b49 100644 (file)
@@ -603,7 +603,6 @@ static void me_loop(menu_entry *menu, int *menu_sel, void (*draw_more)(void))
 #else\r
 #define MENU_OPTIONS_GFX\r
 #define MENU_OPTIONS_ADV\r
-#define mgn_opt_renderer NULL /* TODO */\r
 #define menu_main_plat_draw NULL\r
 #endif\r
 \r
@@ -1494,16 +1493,47 @@ static int menu_loop_cd_options(menu_id id, int keys)
 \r
 // ------------ 32X options menu ------------\r
 \r
+static const char *get_rname(const char **rn, int val, int *offs)\r
+{\r
+       int i, len, found = -1, maxlen = 0;\r
+\r
+       for (i = 0; rn[i] != NULL; i++) {\r
+               len = strlen(rn[i]);\r
+               if (len > maxlen)\r
+                       maxlen = len;\r
+               if (i == val)\r
+                       found = i;\r
+       }\r
+\r
+       *offs = 3 - maxlen;\r
+       if (found >= 0)\r
+               return rn[found];\r
+       return "???";\r
+}\r
+\r
+static const char *mgn_opt_renderer32x(menu_id id, int *offs)\r
+{\r
+       return get_rname(renderer_names32x, currentConfig.renderer32x, offs);\r
+}\r
+\r
 static menu_entry e_menu_32x_options[] =\r
 {\r
-       mee_onoff("32X enabled",          MA_32XOPT_ENABLE_32X,   PicoOpt, POPT_EN_32X),\r
-       mee_onoff("PWM sound",            MA_32XOPT_PWM,          PicoOpt, POPT_EN_PWM),\r
+       mee_onoff     ("32X enabled",  MA_32XOPT_ENABLE_32X, PicoOpt, POPT_EN_32X),\r
+       mee_range_cust("32X renderer", MA_32XOPT_RENDERER,   currentConfig.renderer32x, 0, 0, mgn_opt_renderer32x),\r
+       mee_onoff     ("PWM sound",    MA_32XOPT_PWM,        PicoOpt, POPT_EN_PWM),\r
        mee_end,\r
 };\r
 \r
 static int menu_loop_32x_options(menu_id id, int keys)\r
 {\r
        static int sel = 0;\r
+       int i, c;\r
+\r
+       for (c = 0; renderer_names32x != NULL && renderer_names32x[c] != NULL; )\r
+               c++;\r
+       i = me_id2offset(e_menu_32x_options, MA_32XOPT_RENDERER);\r
+       e_menu_32x_options[i].max = c > 0 ? (c - 1) : 0;\r
+\r
        me_loop(e_menu_32x_options, &sel, NULL);\r
        return 0;\r
 }\r
@@ -1534,15 +1564,14 @@ static int menu_loop_adv_options(menu_id id, int keys)
 \r
 // ------------ gfx options menu ------------\r
 \r
-static int mh_opt_render(menu_id id, int keys)\r
+static const char *mgn_opt_renderer(menu_id id, int *offs)\r
 {\r
-       plat_video_toggle_renderer((keys & PBTN_RIGHT) ? 1 : 0, 0, 1);\r
-       return 0;\r
+       return get_rname(renderer_names, currentConfig.renderer, offs);\r
 }\r
 \r
 static menu_entry e_menu_gfx_options[] =\r
 {\r
-       mee_cust      ("Renderer",                 MA_OPT_RENDERER,       mh_opt_render, mgn_opt_renderer),\r
+       mee_range_cust("Renderer", MA_OPT_RENDERER,   currentConfig.renderer, 0, 0, mgn_opt_renderer),\r
        MENU_OPTIONS_GFX\r
        mee_end,\r
 };\r
@@ -1550,6 +1579,14 @@ static menu_entry e_menu_gfx_options[] =
 static int menu_loop_gfx_options(menu_id id, int keys)\r
 {\r
        static int sel = 0;\r
+       int i, c;\r
+\r
+       for (c = 0; renderer_names != NULL && renderer_names[c] != NULL; )\r
+               c++;\r
+       i = me_id2offset(e_menu_gfx_options, MA_OPT_RENDERER);\r
+       e_menu_gfx_options[i].max = c > 0 ? (c - 1) : 0;\r
+       me_enable(e_menu_gfx_options, MA_OPT_RENDERER, renderer_names != NULL);\r
+\r
        me_loop(e_menu_gfx_options, &sel, NULL);\r
        return 0;\r
 }\r