diff options
author | Andrey Nazarov <skuller@skuller.net> | 2013-03-12 21:10:39 +0400 |
---|---|---|
committer | Andrey Nazarov <skuller@skuller.net> | 2013-03-12 21:16:23 +0400 |
commit | 95e0e68dff5e24c3b514f3392f8c17f8bf4f6fef (patch) | |
tree | 3294ac4f7d7c0a17d44681bf10c681763daa4b63 | |
parent | 3a7f7590c7005094e3e48d42ee92b39ad091028c (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.c | 1 | ||||
-rw-r--r-- | src/client/ui/playerconfig.c | 1 | ||||
-rw-r--r-- | src/client/ui/script.c | 7 | ||||
-rw-r--r-- | src/client/ui/servers.c | 1 | ||||
-rw-r--r-- | src/client/ui/ui.c | 15 |
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); |