From 5d1672cbc089b88da0e08ad95432ce1407f2f552 Mon Sep 17 00:00:00 2001 From: notaz Date: Thu, 3 Feb 2011 23:27:31 +0000 Subject: [PATCH] pcsx related refactoring git-svn-id: file:///home/notaz/opt/svn/PicoDrive@914 be3aeb3a-fb24-0410-a615-afba39da0efa --- platform/common/menu.c | 81 ++++++++++++++++--------------------- platform/common/menu.h | 18 ++++++++- platform/common/menu_pico.c | 36 +++++++++++++++++ platform/common/plat.h | 1 + 4 files changed, 88 insertions(+), 48 deletions(-) diff --git a/platform/common/menu.c b/platform/common/menu.c index 1cb41c57..aa76e431 100644 --- a/platform/common/menu.c +++ b/platform/common/menu.c @@ -1,7 +1,12 @@ -// (c) Copyright 2006-2010 notaz, All rights reserved. -// Free for non-commercial use. - -// For commercial use, separate licencing terms must be obtained. +/* + * (C) Gražvydas "notaz" Ignotas, 2006-2010 + * + * This work is licensed under the terms of any of these licenses + * (at your option): + * - GNU GPL, version 2 or later. + * - GNU LGPL, version 2.1 or later. + * See the COPYING file in the top-level directory. + */ #include #include @@ -341,26 +346,6 @@ static void menu_darken_bg(void *dst, void *src, int pixels, int darker) } } -static void menu_enter(int is_rom_loaded) -{ - if (is_rom_loaded) - { - // darken the active framebuffer - menu_darken_bg(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h, 1); - } - else - { - char buff[256]; - - // should really only happen once, on startup.. - emu_make_path(buff, "skin/background.png", sizeof(buff)); - if (readpng(g_menubg_ptr, buff, READPNG_BG, g_menuscreen_w, g_menuscreen_h) < 0) - memset(g_menubg_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2); - } - - plat_video_menu_enter(is_rom_loaded); -} - static int me_id2offset(const menu_entry *ent, menu_id id) { int i; @@ -461,8 +446,11 @@ static void me_draw(const menu_entry *entries, int sel, void (*draw_more)(void)) h = g_menuscreen_h; } - x = g_menuscreen_w / 2 - w / 2; + x = g_menuscreen_w / 2 - w / 2; y = g_menuscreen_h / 2 - h / 2; +#ifdef MENU_ALIGN_LEFT + if (x > 12) x = 12; +#endif /* draw */ menu_draw_begin(1); @@ -511,7 +499,7 @@ static void me_draw(const menu_entry *entries, int sel, void (*draw_more)(void)) len = strlen(names[i]); if (len > 10) offs = 10 - len - 2; - if (i == *(int *)ent->var) { + if (i == *(unsigned char *)ent->var) { text_out16(x + col2_offs + offs * me_mfont_w, y, "%s", names[i]); break; } @@ -652,7 +640,7 @@ static void me_loop(menu_entry *menu, int *menu_sel, void (*draw_more)(void)) /* ***************************************** */ -static void draw_menu_credits(void) +static void draw_menu_credits(void (*draw_more)(void)) { const char *creds, *p; int x, y, h, w, wt; @@ -670,7 +658,7 @@ static void draw_menu_credits(void) p++; } - x = g_menuscreen_w / 2 - w * me_mfont_w / 2; + x = g_menuscreen_w / 2 - w * me_mfont_w / 2; y = g_menuscreen_h / 2 - h * me_mfont_h / 2; if (x < 0) x = 0; if (y < 0) y = 0; @@ -686,6 +674,9 @@ static void draw_menu_credits(void) p++; } + if (draw_more != NULL) + draw_more(); + menu_draw_end(); } @@ -726,22 +717,6 @@ static void do_delete(const char *fpath, const char *fname) // -------------- ROM selector -------------- -// rrrr rggg gggb bbbb -static unsigned short file2color(const char *fname) -{ - const char *ext = fname + strlen(fname) - 3; - static const char *rom_exts[] = { "zip", "bin", "smd", "gen", "iso", "cso", "cue" }; - static const char *other_exts[] = { "gmv", "pat" }; - int i; - - if (ext < fname) ext = fname; - for (i = 0; i < array_size(rom_exts); i++) - if (strcasecmp(ext, rom_exts[i]) == 0) return 0xbdff; // FIXME: mk defines - for (i = 0; i < array_size(other_exts); i++) - if (strcasecmp(ext, other_exts[i]) == 0) return 0xaff5; - return 0xffff; -} - static void draw_dirlist(char *curdir, struct dirent **namelist, int n, int sel) { int max_cnt, start, i, x, pos; @@ -770,7 +745,7 @@ static void draw_dirlist(char *curdir, struct dirent **namelist, int n, int sel) smalltext_out16(x, pos * me_sfont_h, "/", 0xfff6); smalltext_out16(x + me_sfont_w, pos * me_sfont_h, namelist[i+1]->d_name, 0xfff6); } else { - unsigned short color = file2color(namelist[i+1]->d_name); + unsigned short color = fname2color(namelist[i+1]->d_name); smalltext_out16(x, pos * me_sfont_h, namelist[i+1]->d_name, color); } } @@ -897,9 +872,12 @@ rescan: { int newlen; char *p, *newdir; - if (!(inp & PBTN_MOK)) continue; + if (!(inp & PBTN_MOK)) + continue; newlen = strlen(curr_path) + strlen(namelist[sel+1]->d_name) + 2; newdir = malloc(newlen); + if (newdir == NULL) + break; if (strcmp(namelist[sel+1]->d_name, "..") == 0) { char *start = curr_path; p = start + strlen(start) - 1; @@ -945,6 +923,13 @@ rescan: free(namelist); } + // restore curr_path + if (fname != NULL) { + n = strlen(curr_path); + if (curr_path + n + 1 == fname) + curr_path[n] = '/'; + } + return ret; } @@ -979,6 +964,10 @@ static void draw_savestate_menu(int menu_sel, int is_loading) if (x < 0) x = 0; y = g_menuscreen_h / 2 - h / 2; if (y < 0) y = 0; +#ifdef MENU_ALIGN_LEFT + if (x > 12 + me_mfont_w * 2) + x = 12 + me_mfont_w * 2; +#endif menu_draw_begin(1); diff --git a/platform/common/menu.h b/platform/common/menu.h index 21c589e1..f34d5a86 100644 --- a/platform/common/menu.h +++ b/platform/common/menu.h @@ -1,4 +1,12 @@ -// (c) Copyright 2006-2009 notaz, All rights reserved. +/* + * (C) Gražvydas "notaz" Ignotas, 2006-2010 + * + * This work is licensed under the terms of any of these licenses + * (at your option): + * - GNU GPL, version 2 or later. + * - GNU LGPL, version 2.1 or later. + * See the COPYING file in the top-level directory. + */ typedef enum { @@ -29,12 +37,18 @@ typedef struct const char *help; } menu_entry; +#define mee_handler_id_h(name, id, handler, help) \ + { name, MB_NONE, id, NULL, 0, 0, 0, 1, 0, 1, handler, NULL, NULL, help } + #define mee_handler_id(name, id, handler) \ - { name, MB_NONE, id, NULL, 0, 0, 0, 1, 0, 1, handler, NULL, NULL, NULL } + mee_handler_id_h(name, id, handler, NULL) #define mee_handler(name, handler) \ mee_handler_id(name, MA_NONE, handler) +#define mee_handler_h(name, handler, help) \ + mee_handler_id_h(name, MA_NONE, handler, help) + #define mee_label(name) \ { name, MB_NONE, MA_NONE, NULL, 0, 0, 0, 1, 0, 0, NULL, NULL, NULL, NULL } diff --git a/platform/common/menu_pico.c b/platform/common/menu_pico.c index caf2be16..b9f1d7f1 100644 --- a/platform/common/menu_pico.c +++ b/platform/common/menu_pico.c @@ -6,6 +6,22 @@ #include #include +// rrrr rggg gggb bbbb +static unsigned short fname2color(const char *fname) +{ + const char *ext = fname + strlen(fname) - 3; + static const char *rom_exts[] = { "zip", "bin", "smd", "gen", "iso", "cso", "cue" }; + static const char *other_exts[] = { "gmv", "pat" }; + int i; + + if (ext < fname) ext = fname; + for (i = 0; i < array_size(rom_exts); i++) + if (strcasecmp(ext, rom_exts[i]) == 0) return 0xbdff; // FIXME: mk defines + for (i = 0; i < array_size(other_exts); i++) + if (strcasecmp(ext, other_exts[i]) == 0) return 0xaff5; + return 0xffff; +} + #include "menu.c" /* platform specific options and handlers */ @@ -19,6 +35,26 @@ #define menu_main_plat_draw NULL #endif +static void menu_enter(int is_rom_loaded) +{ + if (is_rom_loaded) + { + // darken the active framebuffer + menu_darken_bg(g_menubg_ptr, g_menubg_src_ptr, g_menuscreen_w * g_menuscreen_h, 1); + } + else + { + char buff[256]; + + // should really only happen once, on startup.. + emu_make_path(buff, "skin/background.png", sizeof(buff)); + if (readpng(g_menubg_ptr, buff, READPNG_BG, g_menuscreen_w, g_menuscreen_h) < 0) + memset(g_menubg_ptr, 0, g_menuscreen_w * g_menuscreen_h * 2); + } + + plat_video_menu_enter(is_rom_loaded); +} + static void draw_savestate_bg(int slot) { const char *fname; diff --git a/platform/common/plat.h b/platform/common/plat.h index c16f8885..03570406 100644 --- a/platform/common/plat.h +++ b/platform/common/plat.h @@ -33,6 +33,7 @@ void plat_status_msg_clear(void); void plat_video_menu_enter(int is_rom_loaded); void plat_video_menu_begin(void); void plat_video_menu_end(void); +void plat_video_menu_leave(void); void plat_video_flip(void); void plat_video_wait_vsync(void); -- 2.39.5