r1130 - in trunk/code: client q3_ui

DONOTREPLY at icculus.org DONOTREPLY at icculus.org
Thu Aug 23 11:22:36 EDT 2007


Author: tma
Date: 2007-08-23 11:22:35 -0400 (Thu, 23 Aug 2007)
New Revision: 1130

Modified:
   trunk/code/client/cl_keys.c
   trunk/code/q3_ui/ui_servers2.c
Log:
* (bug 3324) Incorrect use of sizeof (beast <info at dbwatersports.com>)
* (bug 2946) Console scrolling broken (identified by misantropia)
  + Field_VariableSizeDraw contained a hack to ensure the cursor was always
    visible. Unfortunately this interfered with scrolling long lines. Move the
    hack to a different place
  + Removed commented code in the same function
  + Reworked Field_KeyDownEvent to use a switch( ... ) and set edit->scroll in
    every case, thereby avoiding scrolling issues when "Home" or "End" are
    pressed


Modified: trunk/code/client/cl_keys.c
===================================================================
--- trunk/code/client/cl_keys.c	2007-08-23 00:22:20 UTC (rev 1129)
+++ trunk/code/client/cl_keys.c	2007-08-23 15:22:35 UTC (rev 1130)
@@ -306,7 +306,7 @@
 Field_Draw
 
 Handles horizontal scrolling and cursor blinking
-x, y, amd width are in pixels
+x, y, and width are in pixels
 ===================
 */
 void Field_VariableSizeDraw( field_t *edit, int x, int y, int width, int size, qboolean showCursor ) {
@@ -317,8 +317,8 @@
 	char	str[MAX_STRING_CHARS];
 	int		i;
 
-	drawLen = edit->widthInChars;
-	len = strlen( edit->buffer ) + 1;
+	drawLen = edit->widthInChars - 1; // - 1 so there is always a space for the cursor
+	len = strlen( edit->buffer );
 
 	// guarantee that cursor will be visible
 	if ( len <= drawLen ) {
@@ -331,14 +331,6 @@
 			}
 		}
 		prestep = edit->scroll;
-
-/*
-		if ( edit->cursor < len - drawLen ) {
-			prestep = edit->cursor;	// cursor at start
-		} else {
-			prestep = len - drawLen;
-		}
-*/
 	}
 
 	if ( prestep + drawLen > len ) {
@@ -379,7 +371,7 @@
 		cursorChar = 10;
 	}
 
-	i = drawLen - ( Q_PrintStrlen( str ) + 1 );
+	i = drawLen - Q_PrintStrlen( str );
 
 	if ( size == SMALLCHAR_WIDTH ) {
 		SCR_DrawSmallChar( x + ( edit->cursor - prestep - i ) * size, y, cursorChar );
@@ -444,54 +436,50 @@
 		return;
 	}
 
+	key = tolower( key );
 	len = strlen( edit->buffer );
 
-	if ( key == K_DEL ) {
-		if ( edit->cursor < len ) {
-			memmove( edit->buffer + edit->cursor, 
-				edit->buffer + edit->cursor + 1, len - edit->cursor );
-		}
-		return;
-	}
+	switch ( key ) {
+		case K_DEL:
+			if ( edit->cursor < len ) {
+				memmove( edit->buffer + edit->cursor, 
+					edit->buffer + edit->cursor + 1, len - edit->cursor );
+			}
+			break;
 
-	if ( key == K_RIGHTARROW ) 
-	{
-		if ( edit->cursor < len ) {
-			edit->cursor++;
-		}
+		case K_RIGHTARROW:
+			if ( edit->cursor < len ) {
+				edit->cursor++;
+			}
+			break;
 
-		if ( edit->cursor >= edit->scroll + edit->widthInChars && edit->cursor <= len )
-		{
-			edit->scroll++;
-		}
-		return;
-	}
+		case K_LEFTARROW:
+			if ( edit->cursor > 0 ) {
+				edit->cursor--;
+			}
+			break;
 
-	if ( key == K_LEFTARROW ) 
-	{
-		if ( edit->cursor > 0 ) {
-			edit->cursor--;
-		}
-		if ( edit->cursor < edit->scroll )
-		{
-			edit->scroll--;
-		}
-		return;
-	}
+		case K_HOME:
+			edit->cursor = 0;
+			break;
 
-	if ( key == K_HOME || ( tolower(key) == 'a' && keys[K_CTRL].down ) ) {
-		edit->cursor = 0;
-		return;
-	}
+		case K_END:
+			edit->cursor = len;
+			break;
 
-	if ( key == K_END || ( tolower(key) == 'e' && keys[K_CTRL].down ) ) {
-		edit->cursor = len;
-		return;
+		case K_INS:
+			key_overstrikeMode = !key_overstrikeMode;
+			break;
+
+		default:
+			break;
 	}
 
-	if ( key == K_INS ) {
-		key_overstrikeMode = !key_overstrikeMode;
-		return;
+	// Change scroll is cursor if no longer visible
+	if ( edit->cursor < edit->scroll ) {
+		edit->scroll = edit->cursor;
+	} else if ( edit->cursor >= edit->scroll + edit->widthInChars && edit->cursor <= len ) {
+		edit->scroll = edit->cursor - edit->widthInChars + 1;
 	}
 }
 

Modified: trunk/code/q3_ui/ui_servers2.c
===================================================================
--- trunk/code/q3_ui/ui_servers2.c	2007-08-23 00:22:20 UTC (rev 1129)
+++ trunk/code/q3_ui/ui_servers2.c	2007-08-23 15:22:35 UTC (rev 1130)
@@ -568,34 +568,37 @@
 
 	// find address in master list
 	for (i=0; i<g_arenaservers.numfavoriteaddresses; i++)
+	{
 		if (!Q_stricmp(g_arenaservers.favoriteaddresses[i],servernodeptr->adrstr))
-				break;
-
-	// delete address from master list
-	if (i <= g_arenaservers.numfavoriteaddresses-1)
-	{
-		if (i < g_arenaservers.numfavoriteaddresses-1)
 		{
-			// shift items up
-			memcpy( &g_arenaservers.favoriteaddresses[i], &g_arenaservers.favoriteaddresses[i+1], (g_arenaservers.numfavoriteaddresses - i - 1)*sizeof(MAX_ADDRESSLENGTH));
+			// delete address from master list
+			if (i < g_arenaservers.numfavoriteaddresses-1)
+			{
+				// shift items up
+				memcpy( &g_arenaservers.favoriteaddresses[i], &g_arenaservers.favoriteaddresses[i+1], (g_arenaservers.numfavoriteaddresses - i - 1)* MAX_ADDRESSLENGTH );
+			}
+			g_arenaservers.numfavoriteaddresses--;
+			memset( &g_arenaservers.favoriteaddresses[g_arenaservers.numfavoriteaddresses], 0, MAX_ADDRESSLENGTH );
+			break;
 		}
-		g_arenaservers.numfavoriteaddresses--;
 	}	
 
 	// find address in server list
 	for (i=0; i<g_numfavoriteservers; i++)
+	{
 		if (&g_favoriteserverlist[i] == servernodeptr)
-				break;
+		{
 
-	// delete address from server list
-	if (i <= g_numfavoriteservers-1)
-	{
-		if (i < g_numfavoriteservers-1)
-		{
-			// shift items up
-			memcpy( &g_favoriteserverlist[i], &g_favoriteserverlist[i+1], (g_numfavoriteservers - i - 1)*sizeof(servernode_t));
+			// delete address from server list
+			if (i < g_numfavoriteservers-1)
+			{
+				// shift items up
+				memcpy( &g_favoriteserverlist[i], &g_favoriteserverlist[i+1], (g_numfavoriteservers - i - 1)*sizeof(servernode_t));
+			}
+			g_numfavoriteservers--;
+			memset( &g_favoriteserverlist[ g_numfavoriteservers ], 0, sizeof(servernode_t));
+			break;
 		}
-		g_numfavoriteservers--;
 	}	
 
 	g_arenaservers.numqueriedservers = g_arenaservers.numfavoriteaddresses;




More information about the quake3-commits mailing list