mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-17 18:40:02 +00:00
engine: platform: sdl: proper cursors allocation and free
This commit is contained in:
parent
efdf9e3599
commit
d1de9e2802
@ -33,5 +33,11 @@ void VID_SaveWindowSize( int width, int height );
|
|||||||
// joystick events
|
// joystick events
|
||||||
extern SDL_Joystick *g_joy;
|
extern SDL_Joystick *g_joy;
|
||||||
|
|
||||||
|
//
|
||||||
|
// in_sdl.c
|
||||||
|
//
|
||||||
|
void SDLash_InitCursors( void );
|
||||||
|
void SDLash_FreeCursors( void );
|
||||||
|
|
||||||
#endif // XASH_SDL
|
#endif // XASH_SDL
|
||||||
#endif // KEYWRAPPER_H
|
#endif // KEYWRAPPER_H
|
||||||
|
@ -28,7 +28,11 @@ SDL_Joystick *g_joy = NULL;
|
|||||||
#if !SDL_VERSION_ATLEAST( 2, 0, 0 )
|
#if !SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||||
#define SDL_WarpMouseInWindow( win, x, y ) SDL_WarpMouse( ( x ), ( y ) )
|
#define SDL_WarpMouseInWindow( win, x, y ) SDL_WarpMouse( ( x ), ( y ) )
|
||||||
#else
|
#else
|
||||||
static SDL_Cursor *g_pDefaultCursor[dc_last];
|
static struct
|
||||||
|
{
|
||||||
|
qboolean initialized;
|
||||||
|
SDL_Cursor *cursors[dc_last];
|
||||||
|
} cursors;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -254,29 +258,50 @@ SDLash_InitCursors
|
|||||||
|
|
||||||
========================
|
========================
|
||||||
*/
|
*/
|
||||||
static void SDLash_InitCursors( void )
|
void SDLash_InitCursors( void )
|
||||||
{
|
{
|
||||||
static qboolean initialized = false;
|
if( cursors.initialized )
|
||||||
if( !initialized )
|
SDLash_FreeCursors();
|
||||||
{
|
|
||||||
// load up all default cursors
|
// load up all default cursors
|
||||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||||
g_pDefaultCursor[dc_none] = NULL;
|
cursors.cursors[dc_none] = NULL;
|
||||||
g_pDefaultCursor[dc_arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
cursors.cursors[dc_arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
||||||
g_pDefaultCursor[dc_ibeam] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
|
cursors.cursors[dc_ibeam] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
|
||||||
g_pDefaultCursor[dc_hourglass] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAIT);
|
cursors.cursors[dc_hourglass] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_WAIT);
|
||||||
g_pDefaultCursor[dc_crosshair] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_CROSSHAIR);
|
cursors.cursors[dc_crosshair] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_CROSSHAIR);
|
||||||
g_pDefaultCursor[dc_up] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
cursors.cursors[dc_up] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
||||||
g_pDefaultCursor[dc_sizenwse] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE);
|
cursors.cursors[dc_sizenwse] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENWSE);
|
||||||
g_pDefaultCursor[dc_sizenesw] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW);
|
cursors.cursors[dc_sizenesw] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENESW);
|
||||||
g_pDefaultCursor[dc_sizewe] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE);
|
cursors.cursors[dc_sizewe] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEWE);
|
||||||
g_pDefaultCursor[dc_sizens] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS);
|
cursors.cursors[dc_sizens] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZENS);
|
||||||
g_pDefaultCursor[dc_sizeall] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
|
cursors.cursors[dc_sizeall] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_SIZEALL);
|
||||||
g_pDefaultCursor[dc_no] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO);
|
cursors.cursors[dc_no] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_NO);
|
||||||
g_pDefaultCursor[dc_hand] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
|
cursors.cursors[dc_hand] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_HAND);
|
||||||
#endif
|
#endif
|
||||||
initialized = true;
|
cursors.initialized = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
========================
|
||||||
|
SDLash_FreeCursors
|
||||||
|
|
||||||
|
========================
|
||||||
|
*/
|
||||||
|
void SDLash_FreeCursors( void )
|
||||||
|
{
|
||||||
|
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||||
|
int i = 0;
|
||||||
|
|
||||||
|
for( ; i < ARRAYSIZE( cursors.cursors ); i++ )
|
||||||
|
{
|
||||||
|
if( cursors.cursors[i] )
|
||||||
|
SDL_FreeCursor( cursors.cursors[i] );
|
||||||
|
cursors.cursors[i] = NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cursors.initialized = false;
|
||||||
|
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -289,10 +314,11 @@ void Platform_SetCursorType( VGUI_DefaultCursor type )
|
|||||||
{
|
{
|
||||||
qboolean visible;
|
qboolean visible;
|
||||||
|
|
||||||
if (cls.key_dest != key_game || cl.paused)
|
if( !cursors.initialized )
|
||||||
return;
|
return;
|
||||||
|
|
||||||
SDLash_InitCursors();
|
if( cls.key_dest != key_game || cl.paused )
|
||||||
|
return;
|
||||||
|
|
||||||
switch( type )
|
switch( type )
|
||||||
{
|
{
|
||||||
@ -309,13 +335,13 @@ void Platform_SetCursorType( VGUI_DefaultCursor type )
|
|||||||
if( CVAR_TO_BOOL( touch_emulate ))
|
if( CVAR_TO_BOOL( touch_emulate ))
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (visible && !host.mouse_visible)
|
if( visible && !host.mouse_visible )
|
||||||
{
|
{
|
||||||
SDL_SetCursor( g_pDefaultCursor[type] );
|
SDL_SetCursor( cursors.cursors[type] );
|
||||||
SDL_ShowCursor( true );
|
SDL_ShowCursor( true );
|
||||||
Key_EnableTextInput( true, false );
|
Key_EnableTextInput( true, false );
|
||||||
}
|
}
|
||||||
else if (!visible && host.mouse_visible)
|
else if( !visible && host.mouse_visible )
|
||||||
{
|
{
|
||||||
SDL_ShowCursor( false );
|
SDL_ShowCursor( false );
|
||||||
Key_EnableTextInput( false, false );
|
Key_EnableTextInput( false, false );
|
||||||
|
@ -67,11 +67,15 @@ void Platform_Init( void )
|
|||||||
#ifdef XASH_WIN32
|
#ifdef XASH_WIN32
|
||||||
Wcon_CreateConsole(); // system console used by dedicated server or show fatal errors
|
Wcon_CreateConsole(); // system console used by dedicated server or show fatal errors
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
SDLash_InitCursors();
|
||||||
}
|
}
|
||||||
|
|
||||||
void Platform_Shutdown( void )
|
void Platform_Shutdown( void )
|
||||||
{
|
{
|
||||||
|
SDLash_FreeCursors();
|
||||||
|
|
||||||
#ifdef XASH_WIN32
|
#ifdef XASH_WIN32
|
||||||
Wcon_DestroyConsole();
|
Wcon_DestroyConsole();
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user