#include "compiler.h" #include "fontmng.h" #include "inputmng.h" #include "scrnmng.h" #include "taskmng.h" #include "vramhdl.h" #include "menudeco.inc" #include "menubase.h" VRAMHDL menuvram; MENUBASE menubase; BRESULT menubase_create(void) { MENUBASE *mb; mb = &menubase; mb->font = fontmng_create(MENU_FONTSIZE, FDAT_PROPORTIONAL, NULL); mb->font2 = fontmng_create(MENU_FONTSIZE, 0, NULL); menuicon_initialize(); return(SUCCESS); } void menubase_destroy(void) { MENUBASE *mb; menuicon_deinitialize(); mb = &menubase; fontmng_destroy(mb->font2); fontmng_destroy(mb->font); ZeroMemory(mb, sizeof(MENUBASE)); } BRESULT menubase_open(int num) { MENUBASE *mb; SCRNMENU smenu; VRAMHDL hdl; mb = &menubase; menubase_close(); if (scrnmng_entermenu(&smenu) != SUCCESS) { goto mbopn_err; } mb->width = smenu.width; mb->height = smenu.height; mb->bpp = smenu.bpp; hdl = vram_create(mb->width, mb->height, TRUE, smenu.bpp); menuvram = hdl; if (hdl == NULL) { goto mbopn_err; } unionrect_rst(&mb->rect); mb->num = num; return(SUCCESS); mbopn_err: return(FAILURE); } void menubase_close(void) { MENUBASE *mb; VRAMHDL hdl; int num; mb = &menubase; num = mb->num; if (num) { mb->num = 0; if (num == 1) { menusys_close(); } else { menudlg_destroy(); } hdl = menuvram; if (hdl) { menubase_draw(NULL, NULL); menuvram = NULL; vram_destroy(hdl); } scrnmng_leavemenu(); } } BRESULT menubase_moving(int x, int y, int btn) { int num; num = menubase.num; if (num == 1) { menusys_moving(x, y, btn); } else if (num) { menudlg_moving(x, y, btn); } return(SUCCESS); } BRESULT menubase_key(UINT key) { int num; num = menubase.num; if (num == 1) { menusys_key(key); } return(SUCCESS); } void menubase_setrect(VRAMHDL vram, const RECT_T *rect) { RECT_T rct; if (vram) { if (rect == NULL) { vram_getrect(vram, &rct); } else { rct.left = vram->posx + rect->left; rct.top = vram->posy + rect->top; rct.right = vram->posx + rect->right; rct.bottom = vram->posy + rect->bottom; } unionrect_add(&menubase.rect, &rct); } } void menubase_clrrect(VRAMHDL vram) { RECT_T rct; if (vram) { vram_getrect(vram, &rct); vram_fillalpha(menuvram, &rct, 1); menubase_setrect(vram, NULL); // movieredraw = 1; } } void menubase_draw(void (*draw)(VRAMHDL dst, const RECT_T *rect, void *arg), void *arg) { MENUBASE *mb; const RECT_T *rect; mb = &menubase; if (mb->rect.type) { rect = unionrect_get(&mb->rect); if (draw) { draw(menuvram, rect, arg); } scrnmng_menudraw(rect); unionrect_rst(&mb->rect); } } // ---- void menubase_proc(void) { } void menubase_modalproc(void) { while((taskmng_sleep(5)) && (menuvram != NULL)) { } }