Beispiel #1
0
  bool Video::init(uint width, uint height, uint bpp, bool use_full_screen)
  {
    if (sdl_ready) {
      YS_WARNING(VIDEO_GENERIC, "Try reinitialize SDL library");
      return false;
    }

    if (SDL_InitSubSystem(SDL_INIT_VIDEO) < 0) {
      YS_ERROR(VIDEO_GENERIC, "Unable to initialize SDL library:%s", SDL_GetError());
      return false;
    }

#ifdef ANDROID
  SDL_Rect r = {0,0,0,0};
  SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &r);
#endif

    SDL_EnableUNICODE(1);
    int flags = SDL_SWSURFACE;  //SDL_HWSURFACE | SDL_DOUBLEBUF | SDL_OPENGL;  
#ifdef HAVE_TOUCHSCREEN
    bool _fullscreen = true;
#else
    bool _fullscreen = use_full_screen;
#endif
    flags |= (_fullscreen) ? SDL_FULLSCREEN : 0;

    SDL_Surface *video_surface = SDL_SetVideoMode(width, height, bpp, flags);
    if (video_surface == NULL) {
      YS_ERROR(VIDEO_GENERIC, "Create video surface failed! :%s", SDL_GetError());
      return false;
    }

    window.attachSurface(video_surface, false);

    full_screen = _fullscreen;
    sdl_ready = true;
    YS_INFO(VIDEO_GENERIC, "Initialize video successed! (%d x %d x %d fs:%s)",
      width, height, bpp, (use_full_screen)?("true"):("false"));
    return true;
  }
Beispiel #2
0
static void IN_ProcessEvents( void )
{
	SDL_Event e;
	const char *character = NULL;
	keyNum_t key = 0;


	if( !SDL_WasInit( SDL_INIT_VIDEO ) )
			return;

	if( Key_GetCatcher( ) == 0 && keyRepeatEnabled )
	{
		SDL_EnableKeyRepeat( 0, 0 );
		keyRepeatEnabled = qfalse;
	}
	else if( !keyRepeatEnabled )
	{
		SDL_EnableKeyRepeat( SDL_DEFAULT_REPEAT_DELAY,
			SDL_DEFAULT_REPEAT_INTERVAL );
		keyRepeatEnabled = qtrue;
	}

	while( SDL_PollEvent( &e ) )
	{
		switch( e.type )
		{
			case SDL_KEYDOWN:
				character = IN_TranslateSDLToQ3Key( &e.key.keysym, &key, qtrue );
				if( key )
					Com_QueueEvent( 0, SE_KEY, key, qtrue, 0, NULL );

				if( character )
					Com_QueueEvent( 0, SE_CHAR, *character, 0, 0, NULL );
				break;

			case SDL_KEYUP:
				IN_TranslateSDLToQ3Key( &e.key.keysym, &key, qfalse );

				if( key )
					Com_QueueEvent( 0, SE_KEY, key, qfalse, 0, NULL );
				break;

			case SDL_MOUSEMOTION:
#ifdef __ANDROID__
				Com_Printf("SDL_MOUSEMOTION received, it sohuld never appear on Android\n");
#endif
				if( mouseActive )
					Com_QueueEvent( 0, SE_MOUSE, e.motion.x, e.motion.y, 0, NULL );
				break;

			case SDL_MOUSEBUTTONDOWN:
			case SDL_MOUSEBUTTONUP:
				{
					unsigned char b;
#ifdef __ANDROID__
					Com_Printf("SDL_MOUSEBUTTON received, it sohuld never appear on Android\n");
#endif
					switch( e.button.button )
					{
						case 1:   b = K_MOUSE1;     break;
						case 2:   b = K_MOUSE3;     break;
						case 3:   b = K_MOUSE2;     break;
						case 4:   b = K_MWHEELUP;   break;
						case 5:   b = K_MWHEELDOWN; break;
						case 6:   b = K_MOUSE4;     break;
						case 7:   b = K_MOUSE5;     break;
						default:  b = K_AUX1 + ( e.button.button - 8 ) % 16; break;
					}
					Com_QueueEvent( 0, SE_KEY, b,
						( e.type == SDL_MOUSEBUTTONDOWN ? qtrue : qfalse ), 0, NULL );
				}
				break;
			
			case SDL_JOYAXISMOTION: // Android accelerometer and on-screen joystick
				{
					if( e.jaxis.which == JOY_SDL_TOUCHSCREEN && e.jaxis.axis < 2 ) // joy 0 axes 0-1 = screen joystick
						Com_QueueEvent( 0, SE_JOYSTICK_AXIS, e.jaxis.axis + JOY_AXIS_SCREENJOY_X, e.jaxis.value, 0, NULL );
					if( e.jaxis.which == JOY_SDL_GYROSCOPE && e.jaxis.axis >= 2 && e.jaxis.axis <= 4 ) // joy 1 axes 2-4 = gyroscope
						Com_QueueEvent( 0, SE_GYROSCOPE, e.jaxis.axis - 2, e.jaxis.value, 0, NULL );
					if( e.jaxis.which == JOY_SDL_GYROSCOPE && e.jaxis.axis >= 5 && e.jaxis.axis <= 7 ) // joy 1 axes 5-7 = accelerometer
						Com_QueueEvent( 0, SE_ACCELEROMETER, e.jaxis.axis - 5, e.jaxis.value, 0, NULL );
					if( e.jaxis.which == JOY_SDL_GAMEPAD && e.jaxis.axis < 6 ) // joy 2-5 = gamepad
					{
						Com_QueueEvent( 0, SE_JOYSTICK_AXIS, e.jaxis.axis + JOY_AXIS_GAMEPADLEFT_X, e.jaxis.value, 0, NULL );
						if ( !hideScreenKeys && e.jaxis.axis == JOY_AXIS_GAMEPADRIGHT_X - JOY_AXIS_GAMEPADLEFT_X && abs(e.jaxis.value) > 20000 )
						{
							hideScreenKeys = qtrue;
							#ifdef __ANDROID__
							SDL_Rect rect;
							rect.x = rect.y = rect.w = rect.h = 0;
							SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &rect);
							SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &rect);
							SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &rect);
							SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, &rect);
							SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, &rect);
							SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, &rect);
							// Do not hide text input, we don't have gamepad key to invoke it
							rect.w = rect.h = cls.glconfig.vidHeight / 10;
							rect.x = rect.y = 0;
							SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &rect);
							#endif
						}
					}
				}
				break;

			case SDL_JOYBUTTONDOWN: // Android multitouch
			case SDL_JOYBUTTONUP:
				{
					if( e.jbutton.which == JOY_SDL_TOUCHSCREEN && e.jbutton.button < MAX_POINTERS )
					{
						touchPointers[e.jbutton.button].pressed = (e.jbutton.state == SDL_PRESSED);
						IN_ProcessTouchPoints();
					}
				}
				break;
			case SDL_JOYBALLMOTION: // Android multitouch
				{
					if( e.jaxis.which == JOY_SDL_TOUCHSCREEN && e.jball.ball < MAX_POINTERS )
					{
						int i;
						touchPointers[e.jball.ball].x = e.jball.xrel;
						touchPointers[e.jball.ball].y = e.jball.yrel;
						if( e.jball.ball == filteredTouch[0].idx )
							Com_QueueEvent( 0, SE_MOUSE, touchPointers[e.jball.ball].x, touchPointers[e.jball.ball].y, 0, NULL );
						if( e.jball.ball == filteredTouch[1].idx )
							Com_QueueEvent( 0, SE_MOUSE2, touchPointers[e.jball.ball].x, touchPointers[e.jball.ball].y, 0, NULL );
					}
				}
				break;
			
			case SDL_QUIT:
				Cbuf_ExecuteText(EXEC_NOW, "quit Closed window\n");
				break;

			case SDL_VIDEORESIZE:
			{
				char width[32], height[32];
				Com_sprintf( width, sizeof(width), "%d", e.resize.w );
				Com_sprintf( height, sizeof(height), "%d", e.resize.h );
				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() + 1000;
#ifdef __ANDROID__
				vidRestartTime = Sys_Milliseconds();
#endif
			}
			break;
			case SDL_ACTIVEEVENT:
				if (e.active.state & SDL_APPINPUTFOCUS) {
					Cvar_SetValue( "com_unfocused",	!e.active.gain);
				}
				if (e.active.state & SDL_APPACTIVE) {
					Cvar_SetValue( "com_minimized", !e.active.gain);
				}
				break;

			default:
				break;
		}
	}

	if( deferredTouch > 0 )
	{
		deferredTouch --;
		if( !deferredTouch )
			Com_QueueEvent( 0, SE_KEY, K_MOUSE1, qtrue, 0, NULL );
	}
}
Beispiel #3
0
static void IN_ShowHideScreenButtons( void )
{
#ifdef __ANDROID__
	SDL_Rect rect, rect2;
	int i;
	static SDL_Rect userRedefinedPos[SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM];
	if( hideScreenKeys )
		return;
	// Show/hide Android on-screen buttons, when we enter/leave menu
	SDL_ANDROID_GetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &rect);
	if( Key_GetCatcher( ) & ~KEYCATCH_CGAME || clc.state != CA_ACTIVE )
	{
		if( rect.w > 0 )
		{
			for( i = 0; i < SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM; i++ )
				SDL_ANDROID_GetScreenKeyboardButtonPos(i, &userRedefinedPos[i]);
			rect.w = rect.h = 0;
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, &rect);
			// TODO: implement automatic keyboard toggling from text fields - see MenuField_Key()
			rect.w = rect.h = cls.glconfig.vidHeight / 10;
			rect.x = rect.y = 0;
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &rect);
		}
	}
	else
	{
		if( rect.w <= 0 )
		{
			// Four buttons in a row, plus joystick, which is 2x bigger than buttons.
			// Text input
			rect.x = rect.y = rect2.x = rect2.y = 0;
			rect.w = rect.h = cls.glconfig.vidHeight / 6;
			rect2.w = rect2.h = rect.w / 2;
			rect2.y += rect2.h/2;
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonImagePos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &rect2);
			// Scoretable
			rect.y += rect.h;
			rect2.y += rect.h;
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonImagePos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, &rect2);
			// Sniper view
			rect.x = cls.glconfig.vidWidth - rect.w;
			rect2.x = cls.glconfig.vidWidth - rect2.w;
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonImagePos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &rect2);
			// Change weapon
			rect.y += rect.h;
			rect2.y += rect.h;
			rect.x = 0;
			rect2.x = 0;
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonImagePos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &rect2);
			// Jump
			rect.x = cls.glconfig.vidWidth - rect.w;
			rect2.x = cls.glconfig.vidWidth - rect2.w;
			SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, &rect);
			SDL_ANDROID_SetScreenKeyboardButtonImagePos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, &rect2);

			if ( cg_touchscreenControls->integer == TOUCHSCREEN_SWIPE_FREE_AIMING )
			{
				// Centerview
				rect.y += rect.h;
				rect.x = 0;
				rect.w *= 2;
				SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, &rect);
				// Dpad
				rect.y += rect.h;
				rect.x = 0;
				rect.w = rect.h = cls.glconfig.vidHeight - rect.y;
				SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &rect);
			}
			else
			{
				// Dpad
				rect.y += rect.h;
				rect.x = 0;
				rect.w = rect.h = cls.glconfig.vidHeight - rect.y;
				rect2.w = rect2.h = rect.w / 2;
				rect2.x = rect.x + rect2.w / 2;
				rect2.y = rect.y + rect2.h / 2;
				SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &rect);
				SDL_ANDROID_SetScreenKeyboardButtonImagePos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &rect2);
			}

			if( cg_touchscreenControls->integer == TOUCHSCREEN_FIRE_BUTTON )
			{
				rect.w = cls.glconfig.vidHeight * 2 / 9;
				rect.h = rect.w;
				rect.x = cls.glconfig.vidWidth - rect.w * 2;
				rect.y = cls.glconfig.vidHeight - rect.h * 2;
				// Fire button
				SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, &rect);
				SDL_ANDROID_SetScreenKeyboardButtonGenerateTouchEvents(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, 1);
			}
			if( SDL_ANDROID_GetScreenKeyboardRedefinedByUser() )
			{
				for( i = 0; i < SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM; i++ )
				{
					if( !( cg_touchscreenControls->integer != TOUCHSCREEN_FIRE_BUTTON && i == SDL_ANDROID_SCREENKEYBOARD_BUTTON_4 ) )
						SDL_ANDROID_SetScreenKeyboardButtonPos(i, &userRedefinedPos[i]);
				}
			}
		}
	}
#endif
}
Beispiel #4
0
void CUI::AndroidShowScreenKeys(bool shown)
{
#if defined(__ANDROID__)
	static bool ScreenKeyboardInitialized = false;
	static bool ScreenKeyboardShown = true;
	static SDL_Rect Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM];
	static SDL_Rect ButtonHidden = { 0, 0, 0, 0 };
	if( !ScreenKeyboardInitialized )
	{
		ScreenKeyboardInitialized = true;

		for( int i = 0; i < SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM; i++ )
			SDL_ANDROID_GetScreenKeyboardButtonPos( i, &Buttons[i] );

		if( !SDL_ANDROID_GetScreenKeyboardRedefinedByUser() )
		{
			int ScreenW = Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].x +
							Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].w;
			int ScreenH = Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].y +
							Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].h;
			// Hide Hook button(it was above Weapnext)
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_0].x =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1].x;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_0].y =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1].y -
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_0].h;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_0].w = 0;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_0].h = 0;
			// Hide Weapprev button
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_2].x =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_0].x;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_2].y =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1].y -
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_2].h;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_2].w = 0;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_2].h = 0;
			// Scores button above left joystick
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_3].x = 0;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_3].y =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD].y -
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_3].h * 2.0f;
			// Text input button above scores
			//Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT].w =
			//	Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_3].w;
			//Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT].h =
			//	Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_3].h;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT].x = 0;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT].y =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_3].y -
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT].h;
			// Spec next button
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_5].x =
				ScreenW - Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_4].w;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_5].y =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].y -
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_5].h;
			// Spec prev button
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_4].x =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_5].x -
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_4].w;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_4].y =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_5].y;
			// Weap next button
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1].x =
				ScreenW - Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1].w;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1].y =
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_5].y -
				Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_1].h;
			// Bigger joysticks
			/*
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD].w *= 1.25;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD].h *= 1.25;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD].y =
				ScreenH - Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD].h;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].w *= 1.25;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].h *= 1.25;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].x =
				ScreenW - Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].w;
			Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].y =
				ScreenH - Buttons[SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD2].h;
			*/
		}
	}

	if( ScreenKeyboardShown == shown )
		return;
	ScreenKeyboardShown = shown;
	for( int i = 0; i < SDL_ANDROID_SCREENKEYBOARD_BUTTON_NUM; i++ )
		SDL_ANDROID_SetScreenKeyboardButtonPos( i, shown ? &Buttons[i] : &ButtonHidden );
#endif
}
Beispiel #5
0
/*
===============
IN_Init
===============
*/
void IN_Init( void )
{
	int appState;

	if( !SDL_WasInit( SDL_INIT_VIDEO ) )
	{
		Com_Error( ERR_FATAL, "IN_Init called before SDL_Init( SDL_INIT_VIDEO )" );
		return;
	}

	Com_DPrintf( "\n------- Input Initialization -------\n" );

	in_keyboardDebug = Cvar_Get( "in_keyboardDebug", "0", CVAR_ARCHIVE );

	// mouse variables
	in_mouse = Cvar_Get( "in_mouse", "1", CVAR_ARCHIVE );
	in_nograb = Cvar_Get( "in_nograb", "0", CVAR_ARCHIVE );

	in_joystick = Cvar_Get( "in_joystick", "0", CVAR_ARCHIVE|CVAR_LATCH );
	in_joystickDebug = Cvar_Get( "in_joystickDebug", "0", CVAR_TEMP );
	in_joystickThreshold = Cvar_Get( "joy_threshold", "0.15", CVAR_ARCHIVE );
	cg_touchscreenControls = Cvar_Get ("cg_touchscreenControls", "0", CVAR_ARCHIVE);
	in_gyroscope = Cvar_Get ("in_gyroscope", "1", CVAR_ARCHIVE);

#ifdef MACOS_X_ACCELERATION_HACK
	in_disablemacosxmouseaccel = Cvar_Get( "in_disablemacosxmouseaccel", "1", CVAR_ARCHIVE );
#endif

	SDL_EnableUNICODE( 1 );
	SDL_EnableKeyRepeat( SDL_DEFAULT_REPEAT_DELAY, SDL_DEFAULT_REPEAT_INTERVAL );
	keyRepeatEnabled = qtrue;

	mouseAvailable = ( in_mouse->value != 0 );
	IN_DeactivateMouse( );

	appState = SDL_GetAppState( );
	Cvar_SetValue( "com_unfocused",	!( appState & SDL_APPINPUTFOCUS ) );
	Cvar_SetValue( "com_minimized", !( appState & SDL_APPACTIVE ) );

	IN_InitKeyLockStates( );

	IN_InitJoystick( );
	#ifdef __ANDROID__
	hideScreenKeys = cl_runningOnOuya->integer;
    if (hideScreenKeys)
    {
    	// Hide everything
		SDL_Rect rect;
		rect.x = rect.y = rect.w = rect.h = 0;
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_DPAD, &rect);
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_0, &rect);
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_1, &rect);
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_2, &rect);
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_3, &rect);
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_4, &rect);
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_5, &rect);
		SDL_ANDROID_SetScreenKeyboardButtonPos(SDL_ANDROID_SCREENKEYBOARD_BUTTON_TEXT, &rect);
	}
	#endif
	Com_DPrintf( "------------------------------------\n" );
}