diff --git a/src/include/menus.h b/src/include/menus.h index 4a2697db4..199964fd0 100644 --- a/src/include/menus.h +++ b/src/include/menus.h @@ -188,6 +188,7 @@ typedef struct _menuitem_input_ { int maxch; } MenuitemInput; typedef struct _menuitem_gem_ { + unsigned char *text; unsigned int state; int xsize; int ysize; diff --git a/src/ui/menu_proc.cpp b/src/ui/menu_proc.cpp index 126b210a0..88f2fdcd7 100644 --- a/src/ui/menu_proc.cpp +++ b/src/ui/menu_proc.cpp @@ -745,6 +745,8 @@ local void DrawGem(Menuitem *mi, int mx, int my) MenuButtonId rb; int x; int y; + int nc; + int rc; flags = mi->flags; rb = mi->d.gem.button; @@ -765,6 +767,18 @@ local void DrawGem(Menuitem *mi, int mx, int my) } } VideoDraw(MenuButtonGfx.Sprite, rb, x, y); + + GetDefaultTextColors(&nc, &rc); + if (mi->d.gem.text) { + // FIXME: find correct x, y for other gem types , add options for other fonts + VideoDrawText(x+24, y+3, GameFont, mi->d.gem.text); + if (mi->flags&MenuButtonActive) { + SetDefaultTextColors(rc,rc); + VideoDrawRectangleClip(ColorGray,mx+mi->xofs-4,my+mi->yofs-4, + VideoTextLength(GameFont, mi->d.gem.text)+30,VideoTextHeight(GameFont)+12); + SetDefaultTextColors(nc,rc); + } + } } /** @@ -1497,7 +1511,10 @@ local void MenuHandleMouseMove(int x,int y) case MI_TYPE_GEM: xs = menu->x + mi->xofs; ys = menu->y + mi->yofs; - if (x < xs || x > xs + mi->d.gem.xsize || y < ys || y > ys + mi->d.gem.ysize) { + if ((!mi->d.gem.text || x < xs - 4 || x > xs + + VideoTextLength(GameFont, mi->d.gem.text)+32 || y < ys - 4 || + y > ys + VideoTextHeight(GameFont)+10) && (x < xs || + x > xs + mi->d.gem.xsize || y < ys || y > ys + mi->d.gem.ysize)) { if (!(mi->flags&MenuButtonClicked)) { if (mi->flags&MenuButtonActive) { redraw_flag = 1; diff --git a/src/ui/menus.cpp b/src/ui/menus.cpp index b3c5d78d1..bdb668cdb 100644 --- a/src/ui/menus.cpp +++ b/src/ui/menus.cpp @@ -2428,7 +2428,7 @@ local void TipsFreeTips(void) Menu *menu; menu = FindMenu("menu-tips"); - for (i = 5; i < 13; i++) { + for (i = 4; i < 12; i++) { if (menu->items[i].d.text.text) { free(menu->items[i].d.text.text); menu->items[i].d.text.text = NULL; diff --git a/src/ui/script_ui.cpp b/src/ui/script_ui.cpp index 070c455bd..5804d06d0 100644 --- a/src/ui/script_ui.cpp +++ b/src/ui/script_ui.cpp @@ -2932,6 +2932,9 @@ local SCM CclDefineMenuItem(SCM list) } else if ( gh_eq_p(value, gh_symbol2scm("style")) ) { value=gh_car(sublist); item->d.gem.button=scm2buttonid(value); + } else if ( gh_eq_p(value, gh_symbol2scm("text")) ) { + value=gh_car(sublist); + item->d.gem.text=gh_scm2newstr(value, NULL); } else { //s1=gh_scm2newstr(value, NULL); //fprintf(stderr, "Unsupported property %s\n", s1);