pcsx related refactoring

git-svn-id: file:///home/notaz/opt/svn/PicoDrive@914 be3aeb3a-fb24-0410-a615-afba39da0efa
This commit is contained in:
notaz 2011-02-03 23:27:31 +00:00
parent 5cf498af45
commit 5d1672cbc0
4 changed files with 88 additions and 48 deletions

View file

@ -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 <stdio.h>
#include <string.h>
@ -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);

View file

@ -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 }

View file

@ -6,6 +6,22 @@
#include <pico/pico.h>
#include <pico/patch.h>
// 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;

View file

@ -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);