mirror of
https://github.com/nzp-team/fteqw.git
synced 2024-11-10 22:51:57 +00:00
fix mouse selection of alternative consoles.
git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@4409 fc73d0e0-1445-4013-8a0c-d673dee63da5
This commit is contained in:
parent
feb28c939d
commit
619b571da0
3 changed files with 41 additions and 26 deletions
|
@ -23,6 +23,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
|
|
||||||
console_t con_main;
|
console_t con_main;
|
||||||
console_t *con_current; // points to whatever is the visible console
|
console_t *con_current; // points to whatever is the visible console
|
||||||
|
console_t *con_mouseover; // points to whichever console's title is currently mouseovered, or null
|
||||||
console_t *con_chat; // points to a chat console
|
console_t *con_chat; // points to a chat console
|
||||||
conline_t *con_footerline; //temp text at the bottom of the console
|
conline_t *con_footerline; //temp text at the bottom of the console
|
||||||
|
|
||||||
|
@ -117,6 +118,8 @@ void Con_Destroy (console_t *con)
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
con_mouseover = NULL;
|
||||||
|
|
||||||
for (prev = &con_main; prev->next; prev = prev->next)
|
for (prev = &con_main; prev->next; prev = prev->next)
|
||||||
{
|
{
|
||||||
if (prev->next == con)
|
if (prev->next == con)
|
||||||
|
@ -1411,9 +1414,12 @@ static int Con_DrawProgress(int left, int right, int y)
|
||||||
int Con_DrawAlternateConsoles(int lines)
|
int Con_DrawAlternateConsoles(int lines)
|
||||||
{
|
{
|
||||||
char *txt;
|
char *txt;
|
||||||
int x, y = 0;
|
int x, y = 0, lx;
|
||||||
int consshown = 0;
|
int consshown = 0;
|
||||||
console_t *con = &con_main;
|
console_t *con = &con_main, *om = con_mouseover;
|
||||||
|
conchar_t buffer[512], *end, *start;
|
||||||
|
|
||||||
|
con_mouseover = NULL;
|
||||||
|
|
||||||
for (con = &con_main; con; con = con->next)
|
for (con = &con_main; con; con = con->next)
|
||||||
{
|
{
|
||||||
|
@ -1423,6 +1429,10 @@ int Con_DrawAlternateConsoles(int lines)
|
||||||
|
|
||||||
if (lines == scr_conlines && consshown > 1)
|
if (lines == scr_conlines && consshown > 1)
|
||||||
{
|
{
|
||||||
|
int mx, my, h;
|
||||||
|
Font_BeginString(font_conchar, mousecursor_x, mousecursor_y, &mx, &my);
|
||||||
|
Font_BeginString(font_conchar, 0, y, &x, &y);
|
||||||
|
h = Font_CharHeight();
|
||||||
for (x = 0, con = &con_main; con; con = con->next)
|
for (x = 0, con = &con_main; con; con = con->next)
|
||||||
{
|
{
|
||||||
if (con->flags & CONF_HIDDEN)
|
if (con->flags & CONF_HIDDEN)
|
||||||
|
@ -1432,15 +1442,33 @@ int Con_DrawAlternateConsoles(int lines)
|
||||||
else
|
else
|
||||||
txt = con->name;
|
txt = con->name;
|
||||||
|
|
||||||
if (x != 0 && x+(strlen(txt)+1)*8 > vid.width)
|
//yeah, om is an evil 1-frame delay. whatever
|
||||||
|
end = COM_ParseFunString(CON_WHITEMASK, va("^&%c%i%s", ((con!=om)?'F':'B'), (con==con_current)+con->unseentext*4, txt), buffer, sizeof(buffer), false);
|
||||||
|
|
||||||
|
lx = 0;
|
||||||
|
for (lx = x, start = buffer; start < end; start++)
|
||||||
|
{
|
||||||
|
lx = Font_CharEndCoord(font_conchar, lx, *start);
|
||||||
|
}
|
||||||
|
if (lx > Font_ScreenWidth())
|
||||||
{
|
{
|
||||||
x = 0;
|
x = 0;
|
||||||
y += 8;
|
y += h;
|
||||||
}
|
}
|
||||||
Draw_FunString(x, y, va("^&F%i%s", (con==con_current)+con->unseentext*4, txt));
|
for (lx = x, start = buffer; start < end; start++)
|
||||||
x+=(strlen(txt)+1)*8;
|
{
|
||||||
|
Font_DrawChar(lx, y, *start);
|
||||||
|
lx = Font_CharEndCoord(font_conchar, lx, *start);
|
||||||
|
}
|
||||||
|
lx += 8;
|
||||||
|
if (mx >= x && mx < lx && my >= y && my < y+h)
|
||||||
|
con_mouseover = con;
|
||||||
|
x = lx;
|
||||||
}
|
}
|
||||||
y += 8;
|
y+= h;
|
||||||
|
Font_EndString(font_conchar);
|
||||||
|
|
||||||
|
y = (y*(int)vid.height) / (float)vid.rotpixelheight;
|
||||||
}
|
}
|
||||||
return y;
|
return y;
|
||||||
}
|
}
|
||||||
|
|
|
@ -947,26 +947,12 @@ void Key_Console (unsigned int unicode, int key)
|
||||||
ypos = (int)((mousecursor_y*vid.height)/(vid.pixelheight*8));
|
ypos = (int)((mousecursor_y*vid.height)/(vid.pixelheight*8));
|
||||||
con_mousedown[0] = mousecursor_x;
|
con_mousedown[0] = mousecursor_x;
|
||||||
con_mousedown[1] = mousecursor_y;
|
con_mousedown[1] = mousecursor_y;
|
||||||
if (ypos == 0 && con_main.next)
|
if (ypos == 0 && con_mouseover)
|
||||||
{
|
{
|
||||||
console_t *con;
|
if (key == K_MOUSE2)
|
||||||
for (con = &con_main; con; con = con->next)
|
Con_Destroy (con_mouseover);
|
||||||
{
|
else
|
||||||
if (con == &con_main)
|
con_current = con_mouseover;
|
||||||
xpos -= 5;
|
|
||||||
else
|
|
||||||
xpos -= strlen(con->name)+1;
|
|
||||||
if (xpos == -1)
|
|
||||||
break;
|
|
||||||
if (xpos < 0)
|
|
||||||
{
|
|
||||||
if (key == K_MOUSE2)
|
|
||||||
Con_Destroy (con);
|
|
||||||
else
|
|
||||||
con_current = con;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
else if (key == K_MOUSE2)
|
else if (key == K_MOUSE2)
|
||||||
con_mousedown[2] = 2;
|
con_mousedown[2] = 2;
|
||||||
|
|
|
@ -137,6 +137,7 @@ typedef struct console_s
|
||||||
|
|
||||||
extern console_t con_main;
|
extern console_t con_main;
|
||||||
extern console_t *con_current; // point to either con_main or con_chat
|
extern console_t *con_current; // point to either con_main or con_chat
|
||||||
|
extern console_t *con_mouseover;
|
||||||
extern console_t *con_chat;
|
extern console_t *con_chat;
|
||||||
|
|
||||||
//shared between console and keys.
|
//shared between console and keys.
|
||||||
|
|
Loading…
Reference in a new issue