From 0135abdf5e9b659f7dc96e77bb9f053511772deb Mon Sep 17 00:00:00 2001
From: Spoike <acceptthis@users.sourceforge.net>
Date: Mon, 13 Jul 2009 00:32:31 +0000
Subject: [PATCH] Fixing bugs (including a massive slowdown with high
 con_maxlines).

git-svn-id: https://svn.code.sf.net/p/fteqw/code/trunk@3267 fc73d0e0-1445-4013-8a0c-d673dee63da5
---
 engine/client/console.c | 25 ++++++++++++-------------
 1 file changed, 12 insertions(+), 13 deletions(-)

diff --git a/engine/client/console.c b/engine/client/console.c
index 556e02fc3..60cfa048f 100644
--- a/engine/client/console.c
+++ b/engine/client/console.c
@@ -34,10 +34,13 @@ console_t	*con_current;			// point to either con_main
 
 	#define Font_CharWidth(c) (conchar_font?GLFont_CharWidth(conchar_font, c):8)
 	#define Font_CharHeight() (conchar_font?GLFont_CharHeight(conchar_font):8)
+	#define Font_ScreenWidth() (conchar_font?glwidth:vid.width)
+	extern int glwidth;
 #else
 	#define Font_DrawChar(x,y,c) (Draw_ColouredCharacter(x, y, c),(x)+8)
 	#define Font_CharWidth(c) 8
 	#define Font_CharHeight() 8
+	#define Font_ScreenWidth() vid.width
 #endif
 
 static int Con_LineBreaks(conchar_t *start, conchar_t *end, int scrwidth, int maxlines, conchar_t **starts, conchar_t **ends);
@@ -883,7 +886,7 @@ void Con_DrawNotify (void)
 	if (maxlines > NUM_CON_TIMES)
 		maxlines = NUM_CON_TIMES;
 
-	y = Con_DrawProgress(0, vid.width, 0);
+	y = Con_DrawProgress(0, Font_ScreenWidth(), 0);
 
 	l = con->current;
 	if (!l->length)
@@ -897,7 +900,7 @@ void Con_DrawNotify (void)
 		if (t > con_notifytime.value)
 			break;
 
-		line = Con_LineBreaks((conchar_t*)(l+1), (conchar_t*)(l+1)+l->length, vid.width, lines, starts, ends);
+		line = Con_LineBreaks((conchar_t*)(l+1), (conchar_t*)(l+1)+l->length, Font_ScreenWidth(conchar_font), lines, starts, ends);
 		if (!line && lines > 0)
 		{
 			lines--;
@@ -923,18 +926,14 @@ void Con_DrawNotify (void)
 		{
 			for (c = starts[lines]; c < ends[lines]; c++)
 			{
-#ifdef AVAIL_FREETYPE
-				x += GLFont_CharWidth(conchar_font, *c);
-#else
-				x += 8;
-#endif
+				x += Font_CharWidth(conchar_font, *c);
 			}
 			x = (vid.width - x) / 2;
 		}
 		for (c = starts[lines]; c < ends[lines]; c++)
 			x = Font_DrawChar(x, y, *c);
 
-		y += 8;
+		y += Font_CharHeight(conchar_font);
 
 		lines++;
 	}
@@ -949,7 +948,7 @@ void Con_DrawNotify (void)
 		int lines, i;
 		c = COM_ParseFunString(CON_WHITEMASK, va(chat_team?"say_team: %s":"say: %s", chat_buffer), markup, sizeof(markup), true);
 		*c++ = (0xe00a+((int)(realtime*con_cursorspeed)&1))|CON_WHITEMASK;
-		lines = Con_LineBreaks(markup, c, vid.width, 8, starts, ends);
+		lines = Con_LineBreaks(markup, c, Font_ScreenWidth(), 8, starts, ends);
 		for (i = 0; i < lines; i++)
 		{
 			c = starts[i];
@@ -1248,11 +1247,9 @@ void Con_DrawConsole (int lines, qboolean noback)
 		GLFont_BeginString(conchar_font, x, y, &x, &y);
 		GLFont_BeginString(conchar_font, selsx, selsy, &selsx, &selsy);
 		GLFont_BeginString(conchar_font, selex, seley, &selex, &seley);
-		ex = glwidth;
 	}
-	else
 #endif
-		ex = vid.width;
+	ex = Font_ScreenWidth();
 	sx = x;
 	ex -= sx;
 
@@ -1392,9 +1389,11 @@ void Con_DrawConsole (int lines, qboolean noback)
 				x = Font_DrawChar(x, y, *s++);
 			}
 
-			if (!top && y < top)
+			if (y < top)
 				break;
 		}
+		if (y < top)
+			break;
 	}
 
 // draw the input prompt, user text, and cursor if desired