From 5030d5701b99037312d4754252500308b05b4424 Mon Sep 17 00:00:00 2001 From: tma Date: Thu, 23 Aug 2007 15:22:35 +0000 Subject: * (bug 3324) Incorrect use of sizeof (beast ) * (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 --- code/client/cl_keys.c | 90 +++++++++++++++++++++--------------------------- code/q3_ui/ui_servers2.c | 39 +++++++++++---------- 2 files changed, 60 insertions(+), 69 deletions(-) (limited to 'code') 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; iadrstr)) - 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