1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| int vmenu(int x,int y,int defval,...)
{
SDL_Rect coo,menuCoo,borderCoo;
.... // dont calcul des coordonnées du menu dans menuCoo
drawBorder(vg->wnd,borderCoo,MENU_BORDERWIDTH,defaultmenuborderColor,&defaultmenubgColor); // Dessine les bords et remplit le fond du menu
coo.x=menuCoo.x+vg->spacelen+MENU_BORDERWIDTH;
coo.y=menuCoo.y+vg->spacelen+MENU_BORDERWIDTH;
coo.w=menuCoo.w-2*vg->spacelen-2*MENU_BORDERWIDTH;
coo.h=vg->textheight;
for(i=0;i<nitem;coo.y+=vg->textheight,i++) blitMenuItem(*(menuitem+i),vg->wnd,coo,(i==defval)?vg->textcolor:vg->notextcolor);
SDL_UpdateRect(vg->wnd,menuCoo.x,menuCoo.y,menuCoo.w,menuCoo.h);
done=0;
rc=defval;
while(!done) {
SDL_WaitEvent(&event);
oldrc=rc;
switch(event.type) {
case SDL_KEYDOWN:
switch(event.key.keysym.sym) {
case SDLK_ESCAPE: done=1; rc=defval; break;
case SDLK_UP: rc--; break;
case SDLK_DOWN: rc++; break;
case SDLK_RETURN: case SDLK_KP_ENTER: done=1; break;
default: break;
}
case SDL_MOUSEBUTTONUP: break; // A traiter
default: break;
}
if(rc<0) rc=nitem-1;
else if(rc>=nitem) rc=0;
if(rc!=oldrc) {
coo.y=menuCoo.y+vg->spacelen+MENU_BORDERWIDTH+vg->textheight*oldrc;
blitMenuItem(*(menuitem+oldrc),vg->wnd,coo,vg->notextcolor);
coo.y=menuCoo.y+vg->spacelen+MENU_BORDERWIDTH+vg->textheight*rc;
blitMenuItem(*(menuitem+rc),vg->wnd,coo,vg->textcolor);
SDL_UpdateRect(vg->wnd,menuCoo.x,menuCoo.y,menuCoo.w,menuCoo.h);
}
}
....
return(rc);
} |
Partager