summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrey Nazarov <skuller@skuller.net>2013-03-12 21:10:39 +0400
committerAndrey Nazarov <skuller@skuller.net>2013-03-12 21:16:23 +0400
commit95e0e68dff5e24c3b514f3392f8c17f8bf4f6fef (patch)
tree3294ac4f7d7c0a17d44681bf10c681763daa4b63
parent3a7f7590c7005094e3e48d42ee92b39ad091028c (diff)
Fix menu transparency.
Allow full-screen menus to be transparent. Only draw top menu layer regardless of transparency.
-rw-r--r--src/client/ui/demos.c1
-rw-r--r--src/client/ui/playerconfig.c1
-rw-r--r--src/client/ui/script.c7
-rw-r--r--src/client/ui/servers.c1
-rw-r--r--src/client/ui/ui.c15
5 files changed, 10 insertions, 15 deletions
diff --git a/src/client/ui/demos.c b/src/client/ui/demos.c
index a126971..8ec2866 100644
--- a/src/client/ui/demos.c
+++ b/src/client/ui/demos.c
@@ -610,6 +610,7 @@ void M_Menu_Demos(void)
m_demos.menu.free = Free;
m_demos.menu.image = uis.backgroundHandle;
m_demos.menu.color.u32 = uis.color.background.u32;
+ m_demos.menu.transparent = uis.transparent;
m_demos.list.generic.type = MTYPE_LIST;
m_demos.list.generic.flags = QMF_HASFOCUS;
diff --git a/src/client/ui/playerconfig.c b/src/client/ui/playerconfig.c
index eff4c82..c225512 100644
--- a/src/client/ui/playerconfig.c
+++ b/src/client/ui/playerconfig.c
@@ -296,6 +296,7 @@ void M_Menu_PlayerConfig(void)
m_player.menu.free = Free;
m_player.menu.image = uis.backgroundHandle;
m_player.menu.color.u32 = uis.color.background.u32;
+ m_player.menu.transparent = uis.transparent;
m_player.entities[0].flags = RF_FULLBRIGHT;
VectorCopy(angles, m_player.entities[0].angles);
diff --git a/src/client/ui/script.c b/src/client/ui/script.c
index 4176ee6..0e7fdc4 100644
--- a/src/client/ui/script.c
+++ b/src/client/ui/script.c
@@ -464,9 +464,7 @@ static void Parse_Background(menuFrameWork_t *menu)
if (SCR_ParseColor(s, &menu->color)) {
menu->image = 0;
- if (menu->color.u8[3] != 255) {
- menu->transparent = qtrue;
- }
+ menu->transparent = menu->color.u8[3] != 255;
} else {
menu->image = R_RegisterPic(s);
menu->transparent = R_GetPicSize(NULL, NULL, menu->image);
@@ -632,6 +630,7 @@ static qboolean Parse_File(const char *path, int depth)
menu->free = Menu_Free;
menu->image = uis.backgroundHandle;
menu->color.u32 = uis.color.background.u32;
+ menu->transparent = uis.transparent;
} else if (!strcmp(cmd, "include")) {
char *s = Cmd_Argv(1);
if (!*s) {
@@ -650,8 +649,10 @@ static qboolean Parse_File(const char *path, int depth)
if (SCR_ParseColor(s, &uis.color.background)) {
uis.backgroundHandle = 0;
+ uis.transparent = uis.color.background.u8[3] != 255;
} else {
uis.backgroundHandle = R_RegisterPic(s);
+ uis.transparent = R_GetPicSize(NULL, NULL, uis.backgroundHandle);
}
} else if (!strcmp(cmd, "font")) {
uis.fontHandle = R_RegisterFont(Cmd_Argv(1));
diff --git a/src/client/ui/servers.c b/src/client/ui/servers.c
index a56d462..c7dd0aa 100644
--- a/src/client/ui/servers.c
+++ b/src/client/ui/servers.c
@@ -1055,6 +1055,7 @@ void M_Menu_Servers(void)
m_servers.menu.free = Free;
m_servers.menu.image = uis.backgroundHandle;
m_servers.menu.color.u32 = uis.color.background.u32;
+ m_servers.menu.transparent = uis.transparent;
//
// server list
diff --git a/src/client/ui/ui.c b/src/client/ui/ui.c
index 89c3fd9..8ff73fb 100644
--- a/src/client/ui/ui.c
+++ b/src/client/ui/ui.c
@@ -85,7 +85,6 @@ void UI_PushMenu(menuFrameWork_t *menu)
uis.entersound = qtrue;
}
- uis.transparent |= menu->transparent;
uis.activeMenu = menu;
UI_DoHitTest();
@@ -154,7 +153,6 @@ UI_PopMenu
void UI_PopMenu(void)
{
menuFrameWork_t *menu;
- int i;
if (uis.menuDepth < 1)
Com_Error(ERR_FATAL, "UI_PopMenu: depth < 1");
@@ -172,14 +170,6 @@ void UI_PopMenu(void)
uis.activeMenu = uis.layers[uis.menuDepth - 1];
uis.mouseTracker = NULL;
- uis.transparent = qfalse;
- for (i = uis.menuDepth - 1; i >= 0; i--) {
- if (uis.layers[i]->transparent) {
- uis.transparent = qtrue;
- break;
- }
- }
-
UI_DoHitTest();
}
@@ -198,7 +188,7 @@ qboolean UI_IsTransparent(void)
return qtrue;
}
- return uis.transparent;
+ return uis.activeMenu->transparent;
}
menuFrameWork_t *UI_FindMenu(const char *name)
@@ -210,6 +200,7 @@ menuFrameWork_t *UI_FindMenu(const char *name)
return menu;
}
}
+
return NULL;
}
@@ -451,7 +442,7 @@ void UI_Draw(int realtime)
R_SetScale(&uis.scale);
#endif
- if (!uis.transparent) {
+ if (1) {
// draw top menu
if (uis.activeMenu->draw) {
uis.activeMenu->draw(uis.activeMenu);