/* ================ Con_DrawInput Draw the editline after a ] prompt ================ */ void Con_DrawInput( void ) { int y; char prompt[ MAX_STRING_CHARS ]; vec4_t color; qtime_t realtime; if ( cls.state != CA_DISCONNECTED && !( cls.keyCatchers & KEYCATCH_CONSOLE ) ) { return; } Com_RealTime( &realtime ); y = con.vislines - ( SCR_ConsoleFontCharHeight() * 2 ) + 2; Com_sprintf( prompt, sizeof( prompt ), "^0[^3%02d%c%02d^0]^7 %s", realtime.tm_hour, ( realtime.tm_sec & 1 ) ? ':' : ' ', realtime.tm_min, cl_consolePrompt->string ); color[ 0 ] = 1.0f; color[ 1 ] = 1.0f; color[ 2 ] = 1.0f; color[ 3 ] = ( scr_conUseOld->integer ? 1.0f : con.displayFrac * 2.0f ); SCR_DrawSmallStringExt( con.xadjust + cl_conXOffset->integer, y + 10, prompt, color, qfalse, qfalse ); Q_CleanStr( prompt ); Field_Draw( &g_consoleField, con.xadjust + cl_conXOffset->integer + SCR_ConsoleFontStringWidth( prompt, strlen( prompt ) ), y + 10, qtrue, qtrue, color[ 3 ] ); }
/* ================ Con_DrawInput Draw the editline after a ] prompt ================ */ void Con_DrawInput( int linePosition, float overrideAlpha ) { char prompt[ MAX_STRING_CHARS ]; vec4_t color; qtime_t realtime; Com_RealTime( &realtime ); Com_sprintf( prompt, sizeof( prompt ), "^0[^3%02d%c%02d^0]^7 %s", realtime.tm_hour, ( realtime.tm_sec & 1 ) ? ':' : ' ', realtime.tm_min, con_prompt->string ); color[ 0 ] = 1.0f; color[ 1 ] = 1.0f; color[ 2 ] = 1.0f; color[ 3 ] = consoleState.currentAlphaFactor * overrideAlpha; SCR_DrawSmallStringExt( consoleState.margin.sides + consoleState.padding.sides, linePosition, prompt, color, qfalse, qfalse ); Q_CleanStr( prompt ); Field_Draw( g_consoleField, consoleState.margin.sides + consoleState.padding.sides + SCR_ConsoleFontStringWidth( prompt, strlen( prompt ) ), linePosition, qtrue, qtrue, color[ 3 ] ); }
void SCR_DrawSmallString( int x, int y, const char* string ) { float color[ 4 ]; color[ 0 ] = color[ 1 ] = color[ 2 ] = color[ 3 ] = 1.0; SCR_DrawSmallStringExt( x, y, string, color, false ); }
/* =================== Field_Draw Handles horizontal scrolling and cursor blinking x, y, and width are in pixels =================== */ void Field_VariableSizeDraw( field_t *edit, int x, int y, int width, int size, qboolean showCursor, qboolean noColorEscape ) { int len; int drawLen; int prestep; int cursorChar; char str[MAX_STRING_CHARS], *s; int i; int curColor; 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 ) { prestep = 0; } else { if ( edit->scroll + drawLen > len ) { edit->scroll = len - drawLen; if ( edit->scroll < 0 ) { edit->scroll = 0; } } prestep = edit->scroll; } if ( prestep + drawLen > len ) { drawLen = len - prestep; } // extract <drawLen> characters from the field at <prestep> if ( drawLen >= MAX_STRING_CHARS ) { Com_Error( ERR_DROP, "drawLen >= MAX_STRING_CHARS" ); } Com_Memcpy( str, edit->buffer + prestep, drawLen ); str[ drawLen ] = '\0'; // color tracking curColor = COLOR_WHITE; if ( prestep > 0 ) { // we need to track last actual color because we cut some text before s = edit->buffer; for ( i = 0; i < prestep + 1; i++, s++ ) { if ( *s == Q_COLOR_ESCAPE && *(s+1) != '\0' && *(s+1) != Q_COLOR_ESCAPE ) { curColor = *(s+1); s++; } } // scroll marker // FIXME: force white color? if ( str[0] ) { str[0] = '<'; } } // draw it if ( size == SMALLCHAR_WIDTH ) { SCR_DrawSmallStringExt( x, y, str, g_color_table[ ColorIndex( curColor ) ], qfalse, noColorEscape ); if ( len > drawLen + prestep ) { SCR_DrawSmallChar( x + ( edit->widthInChars - 1 ) * size, y, '>' ); } } else { if ( len > drawLen + prestep ) { SCR_DrawStringExt( x + ( edit->widthInChars - 1 ) * size, y, size, ">", g_color_table[ ColorIndex( COLOR_WHITE ) ], qfalse, noColorEscape ); } // draw big string with drop shadow SCR_DrawStringExt( x, y, size, str, g_color_table[ ColorIndex( curColor ) ], qfalse, noColorEscape ); } // draw the cursor if ( showCursor ) { if ( cls.realtime & 256 ) { return; // off blink } if ( key_overstrikeMode ) { cursorChar = 11; } else { cursorChar = 10; } i = drawLen - strlen( str ); if ( size == SMALLCHAR_WIDTH ) { SCR_DrawSmallChar( x + ( edit->cursor - prestep - i ) * size, y, cursorChar ); } else { str[0] = cursorChar; str[1] = '\0'; SCR_DrawBigString( x + ( edit->cursor - prestep - i ) * size, y, str, 1.0, qfalse ); } } }