Browse Source

Small refactoring of EnableTextInput

pull/2/head
Alibek Omarov 7 years ago
parent
commit
63513ec475
  1. 25
      engine/client/keys.c
  2. 14
      engine/client/vgui/vgui_draw.c
  3. 32
      engine/platform/sdl/events.c
  4. 2
      engine/platform/sdl/events.h

25
engine/client/keys.c

@ -695,16 +695,31 @@ void Key_Event( int key, qboolean down )
} }
} }
/*
================
Key_EnableTextInput
================
*/
void Key_EnableTextInput( qboolean enable, qboolean force ) void Key_EnableTextInput( qboolean enable, qboolean force )
{ {
void (*pfnEnableTextInput)( qboolean enable );
#if XASH_INPUT == INPUT_SDL #if XASH_INPUT == INPUT_SDL
SDLash_EnableTextInput( enable, force ); pfnEnableTextInput = SDLash_EnableTextInput;
#elif XASH_INPUT == INPUT_ANDROID #elif XASH_INPUT == INPUT_ANDROID
Android_EnableTextInput( enable, force ); pfnEnableTextInput = Android_EnableTextInput;
#endif #else
#if 0 #error "Here must be a text input for your platform"
Joy_EnableTextInput( enable, force ); return;
#endif #endif
if( enable && ( !host.textmode || force ) )
pfnEnableTextInput( true );
else if( !enable )
pfnEnableTextInput( false );
if( !force )
host.textmode = enable;
} }
/* /*

14
engine/client/vgui/vgui_draw.c

@ -32,7 +32,6 @@ static enum VGUI_KeyCode s_pVirtualKeyTrans[256];
static enum VGUI_DefaultCursor s_currentCursor; static enum VGUI_DefaultCursor s_currentCursor;
#ifdef XASH_SDL #ifdef XASH_SDL
#include <SDL_events.h> #include <SDL_events.h>
#include "platform/sdl/events.h"
static SDL_Cursor* s_pDefaultCursor[20]; static SDL_Cursor* s_pDefaultCursor[20];
#endif #endif
static void *s_pVGuiSupport; // vgui_support library static void *s_pVGuiSupport; // vgui_support library
@ -161,9 +160,8 @@ void GAME_EXPORT VGUI_SetVisible( qboolean state )
SDL_ShowCursor( state ); SDL_ShowCursor( state );
if( !state ) if( !state )
SDL_GetRelativeMouseState( NULL, NULL ); SDL_GetRelativeMouseState( NULL, NULL );
SDLash_EnableTextInput( state, true );
#endif #endif
Key_EnableTextInput( state, true );
} }
int GAME_EXPORT VGUI_UtfProcessChar( int in ) int GAME_EXPORT VGUI_UtfProcessChar( int in )
@ -491,21 +489,19 @@ void VGui_KeyEvent( int key, int down )
if( !vgui.initialized ) if( !vgui.initialized )
return; return;
#ifdef XASH_SDL
if( host.mouse_visible ) if( host.mouse_visible )
SDLash_EnableTextInput( 1, false ); Key_EnableTextInput( true, false );
#endif
switch( key ) switch( key )
{ {
case K_MOUSE1: case K_MOUSE1:
vgui.Mouse( down?MA_PRESSED:MA_RELEASED, MOUSE_LEFT ); vgui.Mouse( down ? MA_PRESSED : MA_RELEASED, MOUSE_LEFT );
return; return;
case K_MOUSE2: case K_MOUSE2:
vgui.Mouse( down?MA_PRESSED:MA_RELEASED, MOUSE_RIGHT ); vgui.Mouse( down ? MA_PRESSED : MA_RELEASED, MOUSE_RIGHT );
return; return;
case K_MOUSE3: case K_MOUSE3:
vgui.Mouse( down?MA_PRESSED:MA_RELEASED, MOUSE_MIDDLE ); vgui.Mouse( down ? MA_PRESSED : MA_RELEASED, MOUSE_MIDDLE );
return; return;
case K_MWHEELDOWN: case K_MWHEELDOWN:
vgui.Mouse( MA_WHEEL, 1 ); vgui.Mouse( MA_WHEEL, 1 );

32
engine/platform/sdl/events.c

@ -177,17 +177,14 @@ SDLash_InputEvent
*/ */
static void SDLash_InputEvent( SDL_TextInputEvent input ) static void SDLash_InputEvent( SDL_TextInputEvent input )
{ {
int i; for( char *text = input.text; *text; text++ )
// Pass characters one by one to Con_CharEvent
for(i = 0; input.text[i]; ++i)
{ {
int ch; int ch;
if( !Q_stricmp( cl_charset->string, "utf-8" ) ) if( !Q_stricmp( cl_charset->string, "utf-8" ) )
ch = (unsigned char)input.text[i]; ch = (unsigned char)*text;
else else
ch = Con_UtfProcessCharForce( (unsigned char)input.text[i] ); ch = Con_UtfProcessCharForce( (unsigned char)*text );
if( !ch ) if( !ch )
continue; continue;
@ -202,28 +199,9 @@ SDLash_EnableTextInput
============= =============
*/ */
void SDLash_EnableTextInput( int enable, qboolean force ) void SDLash_EnableTextInput( qboolean enable )
{ {
if( force ) enable ? SDL_StartTextInput() : SDL_StopTextInput();
{
if( enable )
SDL_StartTextInput();
else
SDL_StopTextInput();
}
else if( enable )
{
if( !host.textmode )
{
SDL_StartTextInput();
}
host.textmode = true;
}
else
{
SDL_StopTextInput();
host.textmode = false;
}
} }
/* /*

2
engine/platform/sdl/events.h

@ -20,7 +20,7 @@ GNU General Public License for more details.
#ifdef XASH_SDL #ifdef XASH_SDL
void SDLash_RunEvents( void ); void SDLash_RunEvents( void );
void SDLash_EnableTextInput( int enable, qboolean force ); void SDLash_EnableTextInput( qboolean enable );
int SDLash_JoyInit( int numjoy ); // pass -1 to init every joystick int SDLash_JoyInit( int numjoy ); // pass -1 to init every joystick
#endif // XASH_SDL #endif // XASH_SDL

Loading…
Cancel
Save