aboutsummaryrefslogtreecommitdiffstats
path: root/code/client/cl_keys.c
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 /code/client/cl_keys.c
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
Diffstat (limited to 'code/client/cl_keys.c')
-rw-r--r--code/client/cl_keys.c90
1 files changed, 39 insertions, 51 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;
}
}