aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authortma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2007-08-23 15:22:35 +0000
committertma <tma@edf5b092-35ff-0310-97b2-ce42778d08ea>2007-08-23 15:22:35 +0000
commit5030d5701b99037312d4754252500308b05b4424 (patch)
treebd28fee4fb809ad5d1836a17ab2aa1a760306951
parent3ac0cab7a7a47a07b71755c59bab24e0b70088bd (diff)
downloadioquake3-aero-5030d5701b99037312d4754252500308b05b4424.tar.gz
ioquake3-aero-5030d5701b99037312d4754252500308b05b4424.zip
* (bug 3324) Incorrect use of sizeof (beast <info@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 git-svn-id: svn://svn.icculus.org/quake3/trunk@1130 edf5b092-35ff-0310-97b2-ce42778d08ea
-rw-r--r--code/client/cl_keys.c90
-rw-r--r--code/q3_ui/ui_servers2.c39
2 files changed, 60 insertions, 69 deletions
diff --git a/code/client/cl_keys.c b/code/client/cl_keys.c
index 49082ff..64d0879 100644
--- a/code/client/cl_keys.c
+++ b/code/client/cl_keys.c
@@ -306,7 +306,7 @@ EDIT FIELDS
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 @@ void Field_VariableSizeDraw( field_t *edit, int x, int y, int width, int size, q
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 @@ void Field_VariableSizeDraw( field_t *edit, int x, int y, int width, int size, q
}
}
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 @@ void Field_VariableSizeDraw( field_t *edit, int x, int y, int width, int size, q
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 @@ void Field_KeyDownEvent( field_t *edit, int key ) {
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;
}
}
diff --git a/code/q3_ui/ui_servers2.c b/code/q3_ui/ui_servers2.c
index f7e7237..877fa00 100644
--- a/code/q3_ui/ui_servers2.c
+++ b/code/q3_ui/ui_servers2.c
@@ -568,34 +568,37 @@ static void ArenaServers_Remove( void )
// 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)
+ if (!Q_stricmp(g_arenaservers.favoriteaddresses[i],servernodeptr->adrstr))
{
- // 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)
+ if (&g_favoriteserverlist[i] == servernodeptr)
{
- // 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;