本文整理汇总了C++中idEditField::CharEvent方法的典型用法代码示例。如果您正苦于以下问题:C++ idEditField::CharEvent方法的具体用法?C++ idEditField::CharEvent怎么用?C++ idEditField::CharEvent使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类idEditField
的用法示例。
在下文中一共展示了idEditField::CharEvent方法的2个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的C++代码示例。
示例1: Posix_ConsoleInput
/*
================
Posix_ConsoleInput
Checks for a complete line of text typed in at the console.
Return NULL if a complete line is not ready.
================
*/
char* Posix_ConsoleInput()
{
if( tty_enabled )
{
int ret;
char key;
bool hidden = false;
while( ( ret = read( STDIN_FILENO, &key, 1 ) ) > 0 )
{
if( !hidden )
{
tty_Hide();
hidden = true;
}
switch( key )
{
case 1:
input_field.SetCursor( 0 );
break;
case 5:
input_field.SetCursor( strlen( input_field.GetBuffer() ) );
break;
case 127:
case 8:
input_field.CharEvent( K_BACKSPACE );
break;
case '\n':
idStr::Copynz( input_ret, input_field.GetBuffer(), sizeof( input_ret ) );
assert( hidden );
tty_Show();
write( STDOUT_FILENO, &key, 1 );
input_field.Clear();
if( history_count < COMMAND_HISTORY )
{
history[ history_count ] = input_ret;
history_count++;
}
else
{
history[ history_start ] = input_ret;
history_start++;
history_start %= COMMAND_HISTORY;
}
history_current = 0;
return input_ret;
case '\t':
input_field.AutoComplete();
break;
case 27:
{
// enter escape sequence mode
ret = read( STDIN_FILENO, &key, 1 );
if( ret <= 0 )
{
Sys_Printf( "dropping sequence: '27' " );
tty_FlushIn();
assert( hidden );
tty_Show();
return NULL;
}
switch( key )
{
case 79:
ret = read( STDIN_FILENO, &key, 1 );
if( ret <= 0 )
{
Sys_Printf( "dropping sequence: '27' '79' " );
tty_FlushIn();
assert( hidden );
tty_Show();
return NULL;
}
switch( key )
{
case 72:
// xterm only
input_field.SetCursor( 0 );
break;
case 70:
// xterm only
input_field.SetCursor( strlen( input_field.GetBuffer() ) );
break;
default:
Sys_Printf( "dropping sequence: '27' '79' '%d' ", key );
tty_FlushIn();
assert( hidden );
tty_Show();
return NULL;
}
break;
case 91:
{
ret = read( STDIN_FILENO, &key, 1 );
//.........这里部分代码省略.........
示例2:
/*
==============
ProcessEvent
==============
*/
bool idConsoleLocal::ProcessEvent( const sysEvent_t* event, bool forceAccept )
{
const bool consoleKey = event->evType == SE_KEY && event->evValue == K_GRAVE && com_allowConsole.GetBool();
// we always catch the console key event
if( !forceAccept && consoleKey )
{
// ignore up events
if( event->evValue2 == 0 )
{
return true;
}
consoleField.ClearAutoComplete();
// a down event will toggle the destination lines
if( keyCatching )
{
Close();
Sys_GrabMouseCursor( true );
}
else
{
consoleField.Clear();
keyCatching = true;
if( idKeyInput::IsDown( K_LSHIFT ) || idKeyInput::IsDown( K_RSHIFT ) )
{
// if the shift key is down, don't open the console as much
SetDisplayFraction( 0.2f );
}
else
{
SetDisplayFraction( 0.5f );
}
}
return true;
}
// if we aren't key catching, dump all the other events
if( !forceAccept && !keyCatching )
{
return false;
}
// handle key and character events
if( event->evType == SE_CHAR )
{
// never send the console key as a character
if( event->evValue != '`' && event->evValue != '~' )
{
consoleField.CharEvent( event->evValue );
}
return true;
}
if( event->evType == SE_KEY )
{
// ignore up key events
if( event->evValue2 == 0 )
{
return true;
}
KeyDownEvent( event->evValue );
return true;
}
// we don't handle things like mouse, joystick, and network packets
return false;
}