|
|
|
@ -1,4 +1,4 @@
|
|
|
|
|
/* $Id: menu.c,v 1.23 2003/05/11 00:13:21 stpohle Exp $ */
|
|
|
|
|
/* $Id: menu.c,v 1.24 2003/06/06 23:22:03 stpohle Exp $ */
|
|
|
|
|
/* menu's for the game */
|
|
|
|
|
|
|
|
|
|
#include <SDL.h>
|
|
|
|
@ -46,6 +46,7 @@ draw_menubox (int x, int y)
|
|
|
|
|
redraw_logo_shaded (x1 + 2, y1 + 2, x - 2, y - 2, MENU_BG_SHADE_DARK);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void
|
|
|
|
|
draw_menu (char *text, _menu menu[], int *x, int *y)
|
|
|
|
|
{
|
|
|
|
@ -62,20 +63,21 @@ draw_menu (char *text, _menu menu[], int *x, int *y)
|
|
|
|
|
maxlen = strlen (menu[last].text);
|
|
|
|
|
if (strlen (text) > maxlen)
|
|
|
|
|
maxlen = strlen (text);
|
|
|
|
|
*x = x1 = gfx.res.x / 2 - ((gfx.font.size.x + (maxlen * (gfx.font.size.x - 2))) / 2);
|
|
|
|
|
y1 = gfx.res.y / 2 - ((last + 2) * gfx.font.size.y / 2);
|
|
|
|
|
x1 = x1 + gfx.font.size.x;
|
|
|
|
|
draw_menubox (maxlen * gfx.font.size.x, (last + 3) * gfx.font.size.y);
|
|
|
|
|
draw_text (x1, y1, text, 1);
|
|
|
|
|
*x = x1 = gfx.res.x / 2 - ((font[0].size.x + (maxlen * (font[0].size.x - 2))) / 2);
|
|
|
|
|
y1 = gfx.res.y / 2 - ((last + 2) * font[0].size.y / 2);
|
|
|
|
|
x1 = x1 + font[0].size.x;
|
|
|
|
|
draw_menubox (maxlen * font[0].size.x, (last + 3) * font[0].size.y);
|
|
|
|
|
font_setcolor (128,128,0, 2);
|
|
|
|
|
font_draw (x1, y1, text, 2);
|
|
|
|
|
|
|
|
|
|
*y = y1 = y1 + (gfx.font.size.y * 2);
|
|
|
|
|
*y = y1 = y1 + (font[0].size.y * 2);
|
|
|
|
|
|
|
|
|
|
for (i = 0; i < last; i++) {
|
|
|
|
|
draw_text (x1, y1, menu[i].text, 1);
|
|
|
|
|
y1 = y1 + gfx.font.size.y;
|
|
|
|
|
font_draw (x1, y1, menu[i].text, 0);
|
|
|
|
|
y1 = y1 + font[0].size.y;
|
|
|
|
|
}
|
|
|
|
|
sprintf (vers, "v%s", VERSION);
|
|
|
|
|
draw_text (gfx.res.x - gfx.font.size.x * strlen (vers), gfx.res.y - gfx.font.size.y, vers, 1);
|
|
|
|
|
font_draw (gfx.res.x - font[1].size.x * strlen (vers), gfx.res.y - font[1].size.y, vers, 1);
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@ -87,16 +89,16 @@ draw_select (int select, _menu menu[], int x, int y)
|
|
|
|
|
int last;
|
|
|
|
|
|
|
|
|
|
for (last = 0; menu[last].index != -1; last++)
|
|
|
|
|
redraw_logo_shaded (x, y + last * gfx.font.size.y, gfx.menuselect.image->w,
|
|
|
|
|
redraw_logo_shaded (x, y + last * font[0].size.y, gfx.menuselect.image->w,
|
|
|
|
|
gfx.menuselect.image->h, MENU_BG_SHADE_DARK);
|
|
|
|
|
|
|
|
|
|
dest.x = x;
|
|
|
|
|
dest.y = y + select * gfx.font.size.y;
|
|
|
|
|
dest.y = y + select * font[0].size.y;
|
|
|
|
|
|
|
|
|
|
src.x = 0;
|
|
|
|
|
src.y = 0;
|
|
|
|
|
src.w = gfx.font.size.x;
|
|
|
|
|
src.h = gfx.font.size.y;
|
|
|
|
|
src.w = font[0].size.x;
|
|
|
|
|
src.h = font[0].size.y;
|
|
|
|
|
|
|
|
|
|
SDL_BlitSurface (gfx.menuselect.image, &src, gfx.screen, &dest);
|
|
|
|
|
};
|
|
|
|
@ -226,24 +228,24 @@ menu_get_text (char *title, char *text, int len)
|
|
|
|
|
len_ = strlen (title);
|
|
|
|
|
}
|
|
|
|
|
draw_logo ();
|
|
|
|
|
y = (gfx.res.y - 2 * gfx.font.size.y) / 2;
|
|
|
|
|
x = (gfx.res.x - (gfx.font.size.x - 4) * len_) / 2;
|
|
|
|
|
draw_menubox ((gfx.font.size.x - 1) * len_, 4 * gfx.font.size.y);
|
|
|
|
|
draw_text (x, y, title, 1);
|
|
|
|
|
y = y + gfx.font.size.y;
|
|
|
|
|
x = (gfx.res.x - (gfx.font.size.x - 4) * len) / 2;
|
|
|
|
|
|
|
|
|
|
if ((len - 1) * (gfx.font.size.x - 4) > gfx.res.x)
|
|
|
|
|
y = (gfx.res.y - 2 * font[0].size.y) / 2;
|
|
|
|
|
x = (gfx.res.x - (font[0].size.x - 4) * len_) / 2;
|
|
|
|
|
draw_menubox ((font[0].size.x - 1) * len_, 4 * font[0].size.y);
|
|
|
|
|
font_draw (x, y, title, 1);
|
|
|
|
|
y = y + font[0].size.y;
|
|
|
|
|
x = (gfx.res.x - (font[0].size.x - 4) * len) / 2;
|
|
|
|
|
|
|
|
|
|
if ((len - 1) * (font[0].size.x - 4) > gfx.res.x)
|
|
|
|
|
len_ = 40;
|
|
|
|
|
else
|
|
|
|
|
len_ = len;
|
|
|
|
|
|
|
|
|
|
while (!done || keypressed == 1) {
|
|
|
|
|
|
|
|
|
|
redraw_logo_shaded (x, y, (gfx.font.size.x - 4) * len_, gfx.font.size.y,
|
|
|
|
|
redraw_logo_shaded (x, y, (font[0].size.x - 4) * len_, font[0].size.y,
|
|
|
|
|
MENU_BG_SHADE_DARK);
|
|
|
|
|
draw_text (x, y, t, 1);
|
|
|
|
|
draw_text (x + (gfx.font.size.x - 4) * curpos, y, "_", 1);
|
|
|
|
|
font_draw (x, y, t, 1);
|
|
|
|
|
font_draw (x + (font[0].size.x - 4) * curpos, y, "_", 1);
|
|
|
|
|
SDL_Flip (gfx.screen);
|
|
|
|
|
|
|
|
|
|
/* do the network loop if we have to */
|
|
|
|
@ -325,10 +327,10 @@ menu_displaytext (char *title, char *text, Uint8 r, Uint8 g, Uint8 b)
|
|
|
|
|
len = strlen (text);
|
|
|
|
|
|
|
|
|
|
y = (gfx.res.y - 2 * gfx.block.y) / 2;
|
|
|
|
|
x = (gfx.res.x - (gfx.font.size.x - 4) * len) / 2;
|
|
|
|
|
x = (gfx.res.x - (font[0].size.x - 4) * len) / 2;
|
|
|
|
|
|
|
|
|
|
y1 = gfx.font.size.y * 3;
|
|
|
|
|
x1 = ((gfx.font.size.x - 4) * len);
|
|
|
|
|
y1 = font[0].size.y * 3;
|
|
|
|
|
x1 = ((font[0].size.x - 4) * len);
|
|
|
|
|
|
|
|
|
|
dest.x = x;
|
|
|
|
|
dest.y = y - 4;
|
|
|
|
@ -337,8 +339,8 @@ menu_displaytext (char *title, char *text, Uint8 r, Uint8 g, Uint8 b)
|
|
|
|
|
SDL_FillRect (gfx.screen, &dest, SDL_MapRGB (gfx.screen->format, r, g, b));
|
|
|
|
|
|
|
|
|
|
y = (gfx.res.y - 2 * gfx.block.y) / 2;
|
|
|
|
|
draw_text ((gfx.res.x - (gfx.font.size.x - 4) * strlen (title)) / 2, y, title, 1);
|
|
|
|
|
draw_text ((gfx.res.x - (gfx.font.size.x - 4) * strlen (text)) / 2, y + gfx.font.size.y, text,
|
|
|
|
|
font_draw ((gfx.res.x - (font[1].size.x - 4) * strlen (title)) / 2, y, title, 1);
|
|
|
|
|
font_draw ((gfx.res.x - (font[0].size.x - 4) * strlen (text)) / 2, y + font[0].size.y, text,
|
|
|
|
|
0);
|
|
|
|
|
|
|
|
|
|
SDL_Flip (gfx.screen);
|
|
|
|
@ -442,21 +444,21 @@ menu_dir_draw (char *title, _direntry * dirstart, int start, int selected)
|
|
|
|
|
if (maxlen < strlen (title))
|
|
|
|
|
maxlen = strlen (title);
|
|
|
|
|
|
|
|
|
|
if (maxlen * gfx.font.size.x > gfx.res.x - 32)
|
|
|
|
|
maxlen = (gfx.res.x - 40) / gfx.font.size.x;
|
|
|
|
|
if (maxlen * font[0].size.x > gfx.res.x - 32)
|
|
|
|
|
maxlen = (gfx.res.x - 40) / font[0].size.x;
|
|
|
|
|
|
|
|
|
|
wnd.h = DIRSCRMAX * gfx.font.size.y * 2;
|
|
|
|
|
wnd.w = maxlen * gfx.font.size.x;
|
|
|
|
|
wnd.h = DIRSCRMAX * font[0].size.y * 2;
|
|
|
|
|
wnd.w = maxlen * font[0].size.x;
|
|
|
|
|
wnd.x = (gfx.res.x - wnd.w) / 2;
|
|
|
|
|
wnd.y = (gfx.res.y - wnd.h) / 2;
|
|
|
|
|
|
|
|
|
|
draw_menubox (wnd.w, wnd.h);
|
|
|
|
|
draw_text ((gfx.res.x - (gfx.font.size.x / 1.17) * strlen (title)) / 2, wnd.y + 4, title, 1);
|
|
|
|
|
font_draw ((gfx.res.x - (font[0].size.x / 1.17) * strlen (title)) / 2, wnd.y + 4, title, 1);
|
|
|
|
|
|
|
|
|
|
for (de = dirstart, pos = 0; de != NULL && pos < start + DIRSCRMAX - 1; de = de->next, pos++) {
|
|
|
|
|
if (pos >= start && pos < (start + DIRSCRMAX - 1))
|
|
|
|
|
draw_text (wnd.x + gfx.menuselect.image->w + 2,
|
|
|
|
|
8 + wnd.y + (1 + pos - start) * gfx.font.size.y * 2, de->name,
|
|
|
|
|
font_draw (wnd.x + gfx.menuselect.image->w + 2,
|
|
|
|
|
8 + wnd.y + (1 + pos - start) * font[0].size.y * 2, de->name,
|
|
|
|
|
(pos == selected));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|