isolated selectable menu pictures (Q2), solves strange problem where a massive fps drop occurs with the first Q1 main menu option selected
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@2272 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
640524e990
commit
5c7cae1ffe
2 changed files with 61 additions and 10 deletions
|
@ -232,22 +232,25 @@ void MenuDrawItems(int xpos, int ypos, menuoption_t *option, menu_t *menu)
|
|||
p = Draw_SafeCachePic(va(menudotstyle, i+mindot ));
|
||||
Draw_TransPic(xpos+option->common.posx, ypos+option->common.posy+dotofs, p);
|
||||
break;
|
||||
case mt_picture:
|
||||
case mt_picturesel:
|
||||
p = NULL;
|
||||
if (menu->selecteditem && menu->selecteditem->common.posx == option->common.posx && menu->selecteditem->common.posy == option->common.posy)
|
||||
{
|
||||
char selname[MAX_QPATH];
|
||||
Q_strncpyz(selname, option->picture.picturename, sizeof(selname));
|
||||
COM_StripExtension(selname, selname, sizeof(selname));
|
||||
p = Draw_SafeCachePic(va("%s_sel", selname));
|
||||
Q_strncatz(selname, "_sel", sizeof(selname));
|
||||
p = Draw_SafeCachePic(selname);
|
||||
}
|
||||
|
||||
if (!p)
|
||||
p = Draw_SafeCachePic(option->picture.picturename);
|
||||
|
||||
Draw_TransPic (xpos+option->common.posx, ypos+option->common.posy, p);
|
||||
break;
|
||||
|
||||
case mt_picture:
|
||||
p = Draw_SafeCachePic(option->picture.picturename);
|
||||
Draw_TransPic (xpos+option->common.posx, ypos+option->common.posy, p);
|
||||
break;
|
||||
case mt_strechpic:
|
||||
p = Draw_SafeCachePic(option->picture.picturename);
|
||||
if (p) Draw_ScalePic(xpos+option->common.posx, ypos+option->common.posy, option->common.width, option->common.height, p);
|
||||
|
@ -488,6 +491,34 @@ menubind_t *MC_AddBind(menu_t *menu, int x, int y, const char *caption, char *co
|
|||
return n;
|
||||
}
|
||||
|
||||
menupicture_t *MC_AddSelectablePicture(menu_t *menu, int x, int y, char *picname)
|
||||
{
|
||||
char selname[MAX_QPATH];
|
||||
menupicture_t *n;
|
||||
|
||||
if (!qrenderer)
|
||||
return NULL;
|
||||
|
||||
Q_strncpyz(selname, picname, sizeof(selname));
|
||||
COM_StripExtension(selname, selname, sizeof(selname));
|
||||
Q_strncatz(selname, "_sel", sizeof(selname));
|
||||
|
||||
Draw_SafeCachePic(picname);
|
||||
Draw_SafeCachePic(selname);
|
||||
|
||||
n = Z_Malloc(sizeof(menupicture_t) + strlen(picname)+1);
|
||||
n->common.type = mt_picturesel;
|
||||
n->common.iszone = true;
|
||||
n->common.posx = x;
|
||||
n->common.posy = y;
|
||||
n->picturename = (char *)(n+1);
|
||||
strcpy(n->picturename, picname);
|
||||
|
||||
n->common.next = menu->options;
|
||||
menu->options = (menuoption_t *)n;
|
||||
return n;
|
||||
}
|
||||
|
||||
menupicture_t *MC_AddPicture(menu_t *menu, int x, int y, char *picname)
|
||||
{
|
||||
menupicture_t *n;
|
||||
|
@ -1526,11 +1557,11 @@ void M_Menu_Main_f (void)
|
|||
if (!p)
|
||||
return;
|
||||
MC_AddPicture(mainm, 0, 173, "pics/m_main_logo");
|
||||
MC_AddPicture(mainm, 68, 13, "pics/m_main_game");
|
||||
MC_AddPicture(mainm, 68, 53, "pics/m_main_multiplayer");
|
||||
MC_AddPicture(mainm, 68, 93, "pics/m_main_options");
|
||||
MC_AddPicture(mainm, 68, 133, "pics/m_main_video");
|
||||
MC_AddPicture(mainm, 68, 173, "pics/m_main_quit");
|
||||
MC_AddSelectablePicture(mainm, 68, 13, "pics/m_main_game");
|
||||
MC_AddSelectablePicture(mainm, 68, 53, "pics/m_main_multiplayer");
|
||||
MC_AddSelectablePicture(mainm, 68, 93, "pics/m_main_options");
|
||||
MC_AddSelectablePicture(mainm, 68, 133, "pics/m_main_video");
|
||||
MC_AddSelectablePicture(mainm, 68, 173, "pics/m_main_quit");
|
||||
|
||||
b = MC_AddConsoleCommand (mainm, 68, 13, "", "menu_single\n");
|
||||
mainm->selecteditem = (menuoption_t *)b;
|
||||
|
|
|
@ -116,7 +116,26 @@ struct menu_s;
|
|||
typedef enum {m_none, m_complex, m_help, m_keys, m_slist, m_media, m_plugin, m_menu_dat} m_state_t;
|
||||
extern m_state_t m_state;
|
||||
|
||||
typedef enum {mt_childwindow, mt_button, mt_qbuttonbigfont, mt_hexen2buttonbigfont, mt_box, mt_colouredbox, mt_line, mt_edit, mt_text, mt_slider, mt_combo, mt_bind, mt_checkbox, mt_picture, mt_strechpic, mt_menudot, mt_custom} menutype_t;
|
||||
typedef enum {
|
||||
mt_childwindow,
|
||||
mt_button,
|
||||
mt_qbuttonbigfont,
|
||||
mt_hexen2buttonbigfont,
|
||||
mt_box,
|
||||
mt_colouredbox,
|
||||
mt_line,
|
||||
mt_edit,
|
||||
mt_text,
|
||||
mt_slider,
|
||||
mt_combo,
|
||||
mt_bind,
|
||||
mt_checkbox,
|
||||
mt_picture,
|
||||
mt_picturesel,
|
||||
mt_strechpic,
|
||||
mt_menudot,
|
||||
mt_custom
|
||||
} menutype_t;
|
||||
|
||||
typedef struct { //must be first of each structure type.
|
||||
menutype_t type;
|
||||
|
@ -256,6 +275,7 @@ menutext_t *MC_AddWhiteText(menu_t *menu, int x, int y, const char *text, qboole
|
|||
menubind_t *MC_AddBind(menu_t *menu, int x, int y, const char *caption, char *command);
|
||||
menubox_t *MC_AddBox(menu_t *menu, int x, int y, int width, int height);
|
||||
menupicture_t *MC_AddPicture(menu_t *menu, int x, int y, char *picname);
|
||||
menupicture_t *MC_AddSelectablePicture(menu_t *menu, int x, int y, char *picname);
|
||||
menupicture_t *MC_AddStrechPicture(menu_t *menu, int x, int y, int width, int height, char *picname);
|
||||
menupicture_t *MC_AddCenterPicture(menu_t *menu, int y, char *picname);
|
||||
menupicture_t *MC_AddCursor(menu_t *menu, int x, int y);
|
||||
|
|
Loading…
Reference in a new issue