Example #1
0
/*
====================
GetClipboardData
====================
*/
static void GetClipboardData( char *buf, int buflen ) {
	char	*cbd, *c;

	c = cbd = Sys_GetClipboardData();
	if ( !cbd ) {
		*buf = 0;
		return;
	}

	for ( int i = 0, end = buflen - 1; *c && i < end; i++ )
	{
		uint32_t utf32 = ConvertUTF8ToUTF32( c, &c );
		buf[i] = ConvertUTF32ToExpectedCharset( utf32 );
	}

	Z_Free( cbd );
}
Example #2
0
static void IN_ProcessEvents( void )
{
	SDL_Event e;
	fakeAscii_t key = A_NULL;
	static fakeAscii_t lastKeyDown = A_NULL;

	if( !SDL_WasInit( SDL_INIT_VIDEO ) )
			return;

	while( SDL_PollEvent( &e ) )
	{
		switch( e.type )
		{
			case SDL_KEYDOWN:
				key = IN_TranslateSDLToJKKey( &e.key.keysym, qtrue );
				if ( key != A_NULL )
					Sys_QueEvent( 0, SE_KEY, key, qtrue, 0, NULL );

				if ( key == A_BACKSPACE )
					Sys_QueEvent( 0, SE_CHAR, CTRL('h'), qfalse, 0, NULL);
				else if ( kg.keys[A_CTRL].down && key >= 'a' && key <= 'z' )
					Sys_QueEvent( 0, SE_CHAR, CTRL(key), qfalse, 0, NULL );

				lastKeyDown = key;
				break;

			case SDL_KEYUP:
				key = IN_TranslateSDLToJKKey( &e.key.keysym, qfalse );
				if( key != A_NULL )
					Sys_QueEvent( 0, SE_KEY, key, qfalse, 0, NULL );

				lastKeyDown = A_NULL;
				break;

			case SDL_TEXTINPUT:
				if( lastKeyDown != A_CONSOLE )
				{
					char *c = e.text.text;

					// Quick and dirty UTF-8 to UTF-32 conversion
					while( *c )
					{
						uint32_t utf32 = ConvertUTF8ToUTF32( c, &c );
						if( utf32 != 0 )
						{
							if( IN_IsConsoleKey( A_NULL, utf32 ) )
							{
								Sys_QueEvent( 0, SE_KEY, A_CONSOLE, qtrue, 0, NULL );
								Sys_QueEvent( 0, SE_KEY, A_CONSOLE, qfalse, 0, NULL );
							}
							else
							{
								uint8_t encoded = ConvertUTF32ToExpectedCharset( utf32 );
								Sys_QueEvent( 0, SE_CHAR, encoded, 0, 0, NULL );
							}
						}
					}
				}
				break;

			case SDL_MOUSEMOTION:
				if ( mouseActive )
				{
					if ( !e.motion.xrel && !e.motion.yrel )
						break;
					Sys_QueEvent( 0, SE_MOUSE, e.motion.xrel, e.motion.yrel, 0, NULL );
				}
				break;

			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
				{
					unsigned short b;
					switch( e.button.button )
					{
						case SDL_BUTTON_LEFT:	b = A_MOUSE1;     break;
						case SDL_BUTTON_MIDDLE:	b = A_MOUSE3;     break;
						case SDL_BUTTON_RIGHT:	b = A_MOUSE2;     break;
						case SDL_BUTTON_X1:		b = A_MOUSE4;     break;
						case SDL_BUTTON_X2:		b = A_MOUSE5;     break;
						default: b = A_AUX0 + ( e.button.button - 6 ) % 32; break;
					}
					Sys_QueEvent( 0, SE_KEY, b,
						( e.type == SDL_MOUSEBUTTONDOWN ? qtrue : qfalse ), 0, NULL );
				}
				break;

			case SDL_MOUSEWHEEL:
				if( e.wheel.y > 0 )
				{
					Sys_QueEvent( 0, SE_KEY, A_MWHEELUP, qtrue, 0, NULL );
					Sys_QueEvent( 0, SE_KEY, A_MWHEELUP, qfalse, 0, NULL );
				}
				else
				{
					Sys_QueEvent( 0, SE_KEY, A_MWHEELDOWN, qtrue, 0, NULL );
					Sys_QueEvent( 0, SE_KEY, A_MWHEELDOWN, qfalse, 0, NULL );
				}
				break;

			case SDL_QUIT:
				Cbuf_ExecuteText(EXEC_NOW, "quit Closed window\n");
				break;

			case SDL_WINDOWEVENT:
				switch( e.window.event )
				{
					case SDL_WINDOWEVENT_MINIMIZED:    Cvar_SetValue( "com_minimized", 1 ); break;
					case SDL_WINDOWEVENT_RESTORED:
					case SDL_WINDOWEVENT_MAXIMIZED:    Cvar_SetValue( "com_minimized", 0 ); break;
					case SDL_WINDOWEVENT_FOCUS_LOST:
					{
						Cvar_SetValue( "com_unfocused", 1 );
						SNDDMA_Activate( qfalse );
						break;
					}

					case SDL_WINDOWEVENT_FOCUS_GAINED:
					{
						Cvar_SetValue( "com_unfocused", 0 );
						SNDDMA_Activate( qtrue );
						break;
					}
				}
				break;

			default:
				break;
		}
	}
}
Example #3
0
static void IN_ProcessEvents( void ) {
	SDL_Event e;
	fakeAscii_t key = A_NULL;
	static fakeAscii_t lastKeyDown = A_NULL;
	if(!SDL_WasInit(SDL_INIT_VIDEO))
			return;
	while(SDL_PollEvent(&e)) {
		switch(e.type) {
			case SDL_KEYDOWN:
				if( e.key.keysym.sym == SDLK_BACKSPACE )
					Sys_QueEvent( 0, SE_CHAR, e.key.keysym.sym, qtrue, 0, NULL );
				else if( ( key = IN_TranslateSDLToJKKey( &e.key.keysym, qtrue ) ) )
					Sys_QueEvent( 0, SE_KEY, key, qtrue, 0, NULL );
				lastKeyDown = key;
				break;
			case SDL_KEYUP:
				if( ( key = IN_TranslateSDLToJKKey( &e.key.keysym, qfalse ) ) )
					Sys_QueEvent( 0, SE_KEY, key, qfalse, 0, NULL );
				lastKeyDown = A_NULL;
				break;
			case SDL_TEXTINPUT:
				if(lastKeyDown != A_CONSOLE) {
					char *c = e.text.text;
					// Quick and dirty UTF-8 to UTF-32 conversion
					while(*c) {
						uint32_t utf32 = ConvertUTF8ToUTF32( c, &c );
						if(utf32 != 0) {
							if(IN_IsConsoleKey(A_NULL, utf32)) {
								Sys_QueEvent(0, SE_KEY, A_CONSOLE, qtrue, 0, NULL);
								Sys_QueEvent(0, SE_KEY, A_CONSOLE, qfalse, 0, NULL);
							} else {
								uint8_t encoded = ConvertUTF32ToExpectedCharset(utf32);
								Sys_QueEvent(0, SE_CHAR, encoded, 0, 0, NULL);
							}
						}
					}
				}
				break;
			case SDL_MOUSEMOTION:
				if(mouseActive)
					Sys_QueEvent(0, SE_MOUSE, e.motion.xrel, e.motion.yrel, 0, NULL);
				break;
			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP: {
				unsigned short b;
				switch(e.button.button) {
					case SDL_BUTTON_LEFT:	b = A_MOUSE1;     break;
					case SDL_BUTTON_MIDDLE:	b = A_MOUSE3;     break;
					case SDL_BUTTON_RIGHT:	b = A_MOUSE2;     break;
					case SDL_BUTTON_X1:		b = A_MOUSE4;     break;
					case SDL_BUTTON_X2:		b = A_MOUSE5;     break;
					default: b = A_AUX0 + (e.button.button - 6) % 32; break;
				}
				Sys_QueEvent(0, SE_KEY, b, (e.type == SDL_MOUSEBUTTONDOWN ? qtrue : qfalse), 0, NULL);
				break;
			}
			case SDL_MOUSEWHEEL:
				if(e.wheel.y > 0) {
					Sys_QueEvent(0, SE_KEY, A_MWHEELUP, qtrue, 0, NULL);
					Sys_QueEvent(0, SE_KEY, A_MWHEELUP, qfalse, 0, NULL);
				} else {
					Sys_QueEvent(0, SE_KEY, A_MWHEELDOWN, qtrue, 0, NULL);
					Sys_QueEvent(0, SE_KEY, A_MWHEELDOWN, qfalse, 0, NULL);
				}
				break;
			case SDL_QUIT:
				Cbuf_ExecuteText(EXEC_NOW, "quit Closed window\n");
				break;
			case SDL_WINDOWEVENT:
				switch(e.window.event) {
					case SDL_WINDOWEVENT_RESIZED: {
							char width[32], height[32];
							if (!Cvar_VariableIntegerValue("r_restartOnResize"))
								break;
							Com_sprintf(width, sizeof(width), "%d", e.window.data1);
							Com_sprintf(height, sizeof(height), "%d", e.window.data2);
							Cvar_Set("r_customwidth", width);
							Cvar_Set("r_customheight", height);
							Cvar_Set("r_mode", "-1");
							// Wait until user stops dragging for 1 second, so
							// we aren't constantly recreating the GL context while
							// he tries to drag...
							vidRestartTime = Sys_Milliseconds() + Cvar_VariableIntegerValue("r_resizeDelay");
						}
						break;
					case SDL_WINDOWEVENT_MINIMIZED: Cvar_SetValue("com_minimized", 1); break;
					case SDL_WINDOWEVENT_RESTORED:
					case SDL_WINDOWEVENT_MAXIMIZED: Cvar_SetValue("com_minimized", 0); break;
					case SDL_WINDOWEVENT_FOCUS_LOST: {
						Cvar_SetValue("com_unfocused", 1);
						SNDDMA_Activate(qfalse);
						break;
					}
					case SDL_WINDOWEVENT_FOCUS_GAINED: {
						Cvar_SetValue("com_unfocused", 0);
						SNDDMA_Activate(qtrue);
						break;
					}
				}
				break;
			case SDL_APP_DIDENTERBACKGROUND: {
#ifdef __ANDROID__
				LOGI("SDL_APP_DIDENTERBACKGROUND");
#endif
				Cvar_SetValue("com_minimized", 1);
				Cvar_SetValue("com_unfocused", 1);
				SNDDMA_Activate(qfalse);
				break;
			}
			case SDL_APP_DIDENTERFOREGROUND: {
#ifdef __ANDROID__
				LOGI("SDL_APP_DIDENTERFOREGROUND");
#endif
				Cvar_SetValue("com_minimized", 0);
				Cvar_SetValue("com_unfocused", 0);
				SNDDMA_Activate(qtrue);
				break;
			}
			default:
				break;
		}
	}
}