/***************************************************************************

	usrintrf.c

	PSP user interface draw functions.

***************************************************************************/

#ifndef PSP_USRINTRF_H
#define PSP_USRINTRF_H

struct font_t
{
	const u8 *data;
	int width;
	int height;
	int pitch;
	int skipx;
	int skipy;
};

#define FONTSIZE			14

#define FONT_UPARROW		"\x10"
#define FONT_DOWNARROW		"\x11"
#define FONT_LEFTARROW		"\x12"
#define FONT_RIGHTARROW		"\x13"
#define FONT_CIRCLE			"\x14"
#define FONT_CROSS			"\x15"
#define FONT_SQUARE			"\x16"
#define FONT_TRIANGLE		"\x17"
#define FONT_LTRIGGER		"\x18"
#define FONT_RTRIGGER		"\x19"
#define FONT_UPTRIANGLE		"\x1b"
#define FONT_DOWNTRIANGLE	"\x1c"
#define FONT_LEFTTRIANGLE	"\x1d"
#define FONT_RIGHTTRIANGLE	"\x1e"

enum
{
	ICON_CONFIG = 0,
	ICON_KEYCONFIG,
	ICON_FOLDER,
	ICON_RESET,
	ICON_RETURN,
	ICON_EXIT,
	ICON_CMDLIST,
	ICON_UPPERDIR,
	ICON_MEMSTICK,
	ICON_ZIPFILE,
	ICON_BATTERY1,
	ICON_BATTERY2,
	ICON_BATTERY3,
	ICON_BATTERY4,
	ICON_COLORCFG,
	MAX_ICONS
};

typedef struct ui_palette_t
{
	int r;
	int g;
	int b;
} UI_PALETTE;

enum
{
	UI_PAL_TITLE = 0,
	UI_PAL_SELECT,
	UI_PAL_NORMAL,
	UI_PAL_INFO,
	UI_PAL_WARNING,
	UI_PAL_BG1,
	UI_PAL_BG2,
	UI_PAL_FRAME,
	UI_PAL_FILESEL1,
	UI_PAL_FILESEL2,
	UI_PAL_MAX
};

#define UI_COLOR(no)	ui_palette[no].r,ui_palette[no].g,ui_palette[no].b

#define CHARSET_DEFAULT		0
#define CHARSET_LATIN1		1
#define CHARSET_SHIFTJIS	2


/*------------------------------------------------------
	テーブル等
 -----------------------------------------------------*/

// ユーザインタフェースカラーデータ
extern int bg_blightness;
extern UI_PALETTE ui_palette[UI_PAL_MAX];

// アルファブレンド処理テーブル
extern const u8 alpha_blend[16][256][256];

// ゲーム画面用スモールフォント
extern const u8 font_s[];

// ダイアログ等の影データ
extern const u8 shadow[9][8][4];

// ロゴデータ
extern const u8 logo_data[14][116];

// Shift JIS フォントテーブル
extern const u16 sjis_table[];

/*------------------------------------------------------
	フォント管理
 -----------------------------------------------------*/

// プロポーショナルフォント
int graphic_font_get_gryph(struct font_t *font, u16 code);
int graphic_font_get_shadow(struct font_t *font, u16 code);
//int graphic_font_get_light(struct font_t *font, u16 code);
int graphic_font_get_pitch(u16 code);

int ascii_14p_get_gryph(struct font_t *font, u16 code);
int ascii_14p_get_shadow(struct font_t *font, u16 code);
int ascii_14p_get_pitch(u16 code);

#if JAPANESE_UI
int jpn_h14p_get_gryph(struct font_t *font, u16 code);
int jpn_h14p_get_shadow(struct font_t *font, u16 code);
int jpn_h14p_get_pitch(u16 code);

int jpn_z14p_get_gryph(struct font_t *font, u16 code);
int jpn_z14p_get_shadow(struct font_t *font, u16 code);
int jpn_z14p_get_pitch(u16 code);
#endif

int icon_s_get_gryph(struct font_t *font, u16 code);
int icon_s_get_shadow(struct font_t *font, u16 code);
int icon_s_get_light(struct font_t *font, u16 code);

int icon_l_get_gryph(struct font_t *font, u16 code);
int icon_l_get_shadow(struct font_t *font, u16 code);
int icon_l_get_light(struct font_t *font, u16 code);


// 等幅フォント
int command_font_get_gryph(struct font_t *font, u16 code);
int ascii_14_get_gryph(struct font_t *font, u16 code);
int latin1_14_get_gryph(struct font_t *font, u16 code);
int jpn_h14_get_gryph(struct font_t *font, u16 code);
int jpn_z14_get_gryph(struct font_t *font, u16 code);


/*------------------------------------------------------
	フォント描画幅取得 (ユーザインタフェース用)
 -----------------------------------------------------*/

int uifont_get_string_width(const char *s);


/*------------------------------------------------------
	アイコン描画 (32bit color / ユーザインタフェース用)
 -----------------------------------------------------*/

void small_icon(int sx, int sy, int r, int g, int b, int no);
void small_icon_shadow(int sx, int sy, int r, int g, int b, int no);
void small_icon_light(int sx, int sy, int r, int g, int b, int no);

void large_icon(int sx, int sy, int r, int g, int b, int no);
void large_icon_shadow(int sx, int sy, int r, int g, int b, int no);
void large_icon_light(int sx, int sy, int r, int g, int b, int no);


/*------------------------------------------------------
	フォント描画 (32bit color / ユーザインタフェース用)
 -----------------------------------------------------*/

void uifont_print(int sx, int sy, int r, int g, int b, const char *s);
void uifont_print_center(int sy, int r, int g, int b, const char *s);
void uifont_print_shadow(int sx, int sy, int r, int g, int b, const char *s);
void uifont_print_shadow_center(int sy, int r, int g, int b, const char *s);


/*------------------------------------------------------
	"NEOGEO CDZ Emurator for PSP" ロゴ描画
 -----------------------------------------------------*/

void logo(int sx, int sy, int r, int g, int b);


/*------------------------------------------------------
	フォント描画 (32bit color / テキスト表示用)
 -----------------------------------------------------*/

void textfont_print(int sx, int sy, int r, int g, int b, const char *s, int flag);


/*------------------------------------------------------
	図形描画 (32bit color / ユーザインタフェース用)
 -----------------------------------------------------*/

void hline(int sx, int ex, int y, int r, int g, int b);
void hline_alpha(int sx, int ex, int y, int r, int g, int b, int alpha);
void hline_gradation(int sx, int ex, int y, int r1, int g1, int b1, int r2, int g2, int b2, int alpha);

void vline(int x, int sy, int ey, int r, int g, int b);
void vline_alpha(int x, int sy, int ey, int r, int g, int b, int alpha);
void vline_gradation(int x, int sy, int ey, int r1, int g1, int b1, int r2, int g2, int b2, int alpha);

void boxfill(int sx, int sy, int ex, int ey, int r, int g, int b);
void boxfill_alpha(int sx, int sy, int ex, int ey, int r, int g, int b, int alpha);
void boxfill_gradation(int sx, int sy, int ex, int ey, int r1, int g1, int b1, int r2, int g2, int b2, int alpha, int dir);

void draw_dialog(int sx, int sy, int ex, int ey);
void draw_scrollbar(int sx, int sy, int ex, int ey, int disp_lines, int total_lines, int current_line);


/*------------------------------------------------------
	フォント描画 (16bit color / ゲーム画面用)
 -----------------------------------------------------*/

void uifont_print16(int sx, int sy, int r, int g, int b, const char *s);
void uifont_print_center16(int sy, int r, int g, int b, const char *s);
void uifont_print_shadow16(int sx, int sy, int r, int g, int b, const char *s);
void uifont_print_shadow_center16(int sy, int r, int g, int b, const char *s);

void small_font_print(int sx, int sy, int r, int g, int b, const char *s, int bg);
void small_font_print_center(int sy, int r, int g, int b, const char *s, int bg);


/*------------------------------------------------------
	図形描画 (16bit color / ゲーム画面用)
 -----------------------------------------------------*/

void hline_alpha16(int sx, int ex, int y, int r, int g, int b, int alpha);
void vline_alpha16(int x, int sy, int ey, int r, int g, int b, int alpha);
void boxfill_alpha16(int sx, int sy, int ex, int ey, int r, int g, int b, int alpha);

void draw_dialog16(int sx, int sy, int ex, int ey);


/*------------------------------------------------------
	その他
 -----------------------------------------------------*/

// アイコンの光
int ui_light_update(void);

// ポップアップメッセージ
void ui_popup_reset(void);
void ui_popup(const char *text, ...);
int ui_show_popup(int draw);

// ユーザインタフェース色設定
void get_ui_color(UI_PALETTE *pal, int *r, int *g, int *b);
void set_ui_color(UI_PALETTE *pal, int r, int g, int b);

// ユーザインタフェーススクリーン退避/復帰
void ui_screen_backup(int frame);
void ui_screen_restore(int frame);
void ui_screen_free(void);

// ユーザインタフェーススナップショット保存
void ui_save_screenshot(const char *name);

#endif /* PSP_USRINTRF_H */
