mirror of
https://github.com/YGGverse/xash3d-fwgs.git
synced 2025-01-11 15:47:55 +00:00
engine: finish sdl1.2 port
This commit is contained in:
parent
7f1dd248c2
commit
9d826016b0
@ -1137,6 +1137,7 @@ int Key_GetKey( const char *binding );
|
||||
void Key_EnumCmds_f( void );
|
||||
void Key_SetKeyDest( int key_dest );
|
||||
void Key_EnableTextInput( qboolean enable, qboolean force );
|
||||
int Key_ToUpper( int key );
|
||||
void OSK_Draw( void );
|
||||
|
||||
extern rgba_t g_color_table[8];
|
||||
|
@ -194,28 +194,30 @@ void IN_ToggleClientMouse( int newstate, int oldstate )
|
||||
else if( newstate == key_game )
|
||||
{
|
||||
// reset mouse pos, so cancel effect in game
|
||||
#if XASH_SDL == 2
|
||||
if( CVAR_TO_BOOL(touch_enable) )
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( CVAR_TO_BOOL( touch_enable ) )
|
||||
{
|
||||
SDL_SetRelativeMouseMode( SDL_FALSE );
|
||||
SDL_SetWindowGrab( host.hWnd, SDL_FALSE );
|
||||
}
|
||||
else
|
||||
#endif
|
||||
{
|
||||
Platform_SetMousePos( host.window_center_x, host.window_center_y );
|
||||
SDL_SetWindowGrab( host.hWnd, SDL_TRUE );
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( clgame.dllFuncs.pfnLookEvent )
|
||||
SDL_SetRelativeMouseMode( SDL_TRUE );
|
||||
#endif
|
||||
}
|
||||
#endif // XASH_SDL
|
||||
if( cls.initialized )
|
||||
clgame.dllFuncs.IN_ActivateMouse();
|
||||
}
|
||||
|
||||
if( ( newstate == key_menu || newstate == key_console || newstate == key_message ) && ( !CL_IsBackgroundMap() || CL_IsBackgroundDemo( )))
|
||||
{
|
||||
#if XASH_SDL == 2
|
||||
SDL_SetWindowGrab(host.hWnd, SDL_FALSE);
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( clgame.dllFuncs.pfnLookEvent )
|
||||
SDL_SetRelativeMouseMode( SDL_FALSE );
|
||||
#endif
|
||||
@ -316,9 +318,7 @@ void IN_DeactivateMouse( void )
|
||||
}
|
||||
|
||||
in_mouseactive = false;
|
||||
#if XASH_SDL == 2
|
||||
SDL_SetWindowGrab( host.hWnd, SDL_FALSE );
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
@ -416,10 +416,12 @@ void IN_MouseEvent( void )
|
||||
}
|
||||
else
|
||||
{
|
||||
#if XASH_SDL == 2 && !defined(_WIN32)
|
||||
#if XASH_SDL && !defined(_WIN32)
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_SetRelativeMouseMode( SDL_FALSE );
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_ShowCursor( SDL_TRUE );
|
||||
#endif
|
||||
#endif // XASH_SDL && !defined(_WIN32)
|
||||
IN_MouseMove();
|
||||
}
|
||||
}
|
||||
|
@ -815,8 +815,7 @@ void Key_EnableTextInput( qboolean enable, qboolean force )
|
||||
else if( !enable )
|
||||
Platform_EnableTextInput( false );
|
||||
|
||||
if( !force )
|
||||
host.textmode = enable;
|
||||
host.textmode = enable;
|
||||
}
|
||||
|
||||
/*
|
||||
@ -907,6 +906,23 @@ void CL_CharEvent( int key )
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
============
|
||||
Key_ToUpper
|
||||
|
||||
A helper function if platform input doesn't support text mode properly
|
||||
============
|
||||
*/
|
||||
int Key_ToUpper( int keynum )
|
||||
{
|
||||
keynum = Q_toupper( keynum );
|
||||
if( keynum == '-' )
|
||||
keynum = '_';
|
||||
if( keynum == '=' )
|
||||
keynum = '+';
|
||||
|
||||
return keynum;
|
||||
}
|
||||
|
||||
/* On-screen keyboard:
|
||||
*
|
||||
|
@ -25,7 +25,7 @@ GNU General Public License for more details.
|
||||
#include "ref_common.h"
|
||||
#include "input.h"
|
||||
#ifdef XASH_SDL
|
||||
#include <SDL_events.h>
|
||||
#include <SDL.h>
|
||||
static SDL_Cursor* s_pDefaultCursor[20];
|
||||
#endif
|
||||
#include "platform/platform.h"
|
||||
@ -72,7 +72,7 @@ void GAME_EXPORT VGUI_GetMousePos( int *_x, int *_y )
|
||||
void VGUI_InitCursors( void )
|
||||
{
|
||||
// load up all default cursors
|
||||
#if XASH_SDL == 2
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
s_pDefaultCursor[dc_none] = NULL;
|
||||
s_pDefaultCursor[dc_arrow] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_ARROW);
|
||||
s_pDefaultCursor[dc_ibeam] = SDL_CreateSystemCursor(SDL_SYSTEM_CURSOR_IBEAM);
|
||||
@ -108,7 +108,7 @@ void GAME_EXPORT VGUI_CursorSelect(enum VGUI_DefaultCursor cursor )
|
||||
break;
|
||||
}
|
||||
|
||||
#if XASH_SDL == 2
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
/// TODO: platform cursors
|
||||
|
||||
if( CVAR_TO_BOOL( touch_emulate ) )
|
||||
|
@ -16,7 +16,6 @@ typedef struct
|
||||
int safe;
|
||||
|
||||
int desktopBitsPixel;
|
||||
int desktopWidth;
|
||||
int desktopHeight;
|
||||
|
||||
qboolean initialized; // OpenGL subsystem started
|
||||
|
@ -323,9 +323,7 @@ void Host_MemStats_f( void )
|
||||
|
||||
void Host_Minimize_f( void )
|
||||
{
|
||||
#if XASH_SDL == 2
|
||||
if( host.hWnd ) SDL_MinimizeWindow( host.hWnd );
|
||||
#endif
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -645,10 +645,12 @@ Android_MessageBox
|
||||
Show messagebox and wait for OK button press
|
||||
========================
|
||||
*/
|
||||
#if XASH_MESSAGEBOX == MSGBOX_ANDROID
|
||||
void Platform_MessageBox( const char *title, const char *text, qboolean parentMainWindow )
|
||||
{
|
||||
(*jni.env)->CallStaticVoidMethod( jni.env, jni.actcls, jni.messageBox, (*jni.env)->NewStringUTF( jni.env, title ), (*jni.env)->NewStringUTF( jni.env ,text ) );
|
||||
}
|
||||
#endif // XASH_MESSAGEBOX == MSGBOX_ANDROID
|
||||
|
||||
/*
|
||||
========================
|
||||
|
@ -378,11 +378,7 @@ void IN_EvdevFrame ( void )
|
||||
{
|
||||
if( evdev.shift )
|
||||
{
|
||||
key = Q_toupper( key );
|
||||
if( key == '-' )
|
||||
key = '_';
|
||||
if( key == '=' )
|
||||
key = '+';
|
||||
key = Key_ToUpper( key );
|
||||
}
|
||||
CL_CharEvent( key );
|
||||
}
|
||||
|
@ -266,10 +266,6 @@ qboolean SW_CreateBuffer( int width, int height, uint *stride, uint *bpp, uint *
|
||||
}
|
||||
|
||||
// unrelated stubs
|
||||
void Platform_MessageBox( const char *title, const char *message, qboolean parentMainWindow )
|
||||
{
|
||||
|
||||
}
|
||||
void Platform_GetClipboardText( char *buffer, size_t size )
|
||||
{
|
||||
|
||||
|
@ -73,6 +73,16 @@ void Platform_PreCreateMove( void );
|
||||
void Platform_GetClipboardText( char *buffer, size_t size );
|
||||
void Platform_SetClipboardText( const char *buffer, size_t size );
|
||||
|
||||
#if XASH_SDL == 12
|
||||
#define SDL_SetWindowGrab( wnd, state ) SDL_WM_GrabInput( (state) )
|
||||
#define SDL_MinimizeWindow( wnd ) SDL_WM_IconifyWindow()
|
||||
#define SDL_IsTextInputActive() host.textmode
|
||||
#endif
|
||||
|
||||
#if !XASH_SDL
|
||||
#define SDL_VERSION_ATLEAST( x, y, z ) 0
|
||||
#endif
|
||||
|
||||
#ifdef __ANDROID__
|
||||
void Android_ShowMouse( qboolean show );
|
||||
void Android_MouseMove( float *x, float *y );
|
||||
|
@ -92,7 +92,7 @@ void Platform_ShellExecute( const char *path, const char *parms )
|
||||
}
|
||||
#endif // __ANDROID__
|
||||
|
||||
#ifdef XASH_DEDICATED
|
||||
#if XASH_MESSAGEBOX == MSGBOX_STDERR
|
||||
void Platform_MessageBox( const char *title, const char *message, qboolean parentMainWindow )
|
||||
{
|
||||
fprintf( stderr,
|
||||
|
@ -15,6 +15,7 @@ GNU General Public License for more details.
|
||||
|
||||
#if defined( XASH_SDL ) && !defined( XASH_DEDICATED )
|
||||
#include <SDL.h>
|
||||
#include <ctype.h>
|
||||
|
||||
#include "common.h"
|
||||
#include "keydefs.h"
|
||||
@ -39,56 +40,57 @@ static int wheelbutton;
|
||||
#define SDL_SCANCODE_BACKSLASH SDLK_BACKSLASH
|
||||
#define SDL_SCANCODE_LEFTBRACKET SDLK_LEFTBRACKET
|
||||
#define SDL_SCANCODE_RIGHTBRACKET SDLK_RIGHTBRACKET
|
||||
#define SDL_SCANCODE_EQUALS: keynum = '='; break;
|
||||
#define SDL_SCANCODE_MINUS: keynum = '-'; break;
|
||||
#define SDL_SCANCODE_TAB: keynum = K_TAB; break;
|
||||
#define SDL_SCANCODE_RETURN: keynum = K_ENTER; break;
|
||||
#define SDL_SCANCODE_ESCAPE: keynum = K_ESCAPE; break;
|
||||
#define SDL_SCANCODE_SPACE: keynum = K_SPACE; break;
|
||||
#define SDL_SCANCODE_BACKSPACE: keynum = K_BACKSPACE; break;
|
||||
#define SDL_SCANCODE_UP: keynum = K_UPARROW; break;
|
||||
#define SDL_SCANCODE_LEFT: keynum = K_LEFTARROW; break;
|
||||
#define SDL_SCANCODE_DOWN: keynum = K_DOWNARROW; break;
|
||||
#define SDL_SCANCODE_RIGHT: keynum = K_RIGHTARROW; break;
|
||||
#define SDL_SCANCODE_LALT:
|
||||
#define SDL_SCANCODE_RALT: keynum = K_ALT; break;
|
||||
#define SDL_SCANCODE_LCTRL:
|
||||
#define SDL_SCANCODE_RCTRL: keynum = K_CTRL; break;
|
||||
#define SDL_SCANCODE_LSHIFT:
|
||||
#define SDL_SCANCODE_RSHIFT: keynum = K_SHIFT; break;
|
||||
#define SDL_SCANCODE_LGUI:
|
||||
#define SDL_SCANCODE_RGUI: keynum = K_WIN; break;
|
||||
#define SDL_SCANCODE_INSERT: keynum = K_INS; break;
|
||||
#define SDL_SCANCODE_DELETE: keynum = K_DEL; break;
|
||||
#define SDL_SCANCODE_PAGEDOWN: keynum = K_PGDN; break;
|
||||
#define SDL_SCANCODE_PAGEUP: keynum = K_PGUP; break;
|
||||
#define SDL_SCANCODE_HOME: keynum = K_HOME; break;
|
||||
#define SDL_SCANCODE_END: keynum = K_END; break;
|
||||
#define SDL_SCANCODE_KP_1: keynum = numLock ? '1' : K_KP_END; break;
|
||||
#define SDL_SCANCODE_KP_2: keynum = numLock ? '2' : K_KP_DOWNARROW; break;
|
||||
#define SDL_SCANCODE_KP_3: keynum = numLock ? '3' : K_KP_PGDN; break;
|
||||
#define SDL_SCANCODE_KP_4: keynum = numLock ? '4' : K_KP_LEFTARROW; break;
|
||||
#define SDL_SCANCODE_KP_5: keynum = numLock ? '5' : K_KP_5; break;
|
||||
#define SDL_SCANCODE_KP_6: keynum = numLock ? '6' : K_KP_RIGHTARROW; break;
|
||||
#define SDL_SCANCODE_KP_7: keynum = numLock ? '7' : K_KP_HOME; break;
|
||||
#define SDL_SCANCODE_KP_8: keynum = numLock ? '8' : K_KP_UPARROW; break;
|
||||
#define SDL_SCANCODE_KP_9: keynum = numLock ? '9' : K_KP_PGUP; break;
|
||||
#define SDL_SCANCODE_KP_0: keynum = numLock ? '0' : K_KP_INS; break;
|
||||
#define SDL_SCANCODE_KP_PERIOD: keynum = K_KP_DEL; break;
|
||||
#define SDL_SCANCODE_KP_ENTER: keynum = K_KP_ENTER; break;
|
||||
#define SDL_SCANCODE_KP_PLUS: keynum = K_KP_PLUS; break;
|
||||
#define SDL_SCANCODE_KP_MINUS: keynum = K_KP_MINUS; break;
|
||||
#define SDL_SCANCODE_KP_DIVIDE: keynum = K_KP_SLASH; break;
|
||||
#define SDL_SCANCODE_KP_MULTIPLY: keynum = '*'; break;
|
||||
#define SDL_SCANCODE_NUMLOCKCLEAR: keynum = K_KP_NUMLOCK; break;
|
||||
#define SDL_SCANCODE_CAPSLOCK: keynum = K_CAPSLOCK; break;
|
||||
#define SDL_SCANCODE_APPLICATION: keynum = K_WIN; break; // (compose key) ???
|
||||
#define SDL_SCANCODE_SLASH: keynum = '/'; break;
|
||||
#define SDL_SCANCODE_PERIOD: keynum = '.'; break;
|
||||
#define SDL_SCANCODE_SEMICOLON: keynum = ';'; break;
|
||||
#define SDL_SCANCODE_APOSTROPHE: keynum = '\''; break;
|
||||
#define SDL_SCANCODE_COMMA: keynum = ','; break;
|
||||
#define SDL_SCANCODE_PRINTSCREEN:
|
||||
#define SDL_SCANCODE_EQUALS SDLK_EQUALS
|
||||
#define SDL_SCANCODE_MINUS SDLK_MINUS
|
||||
#define SDL_SCANCODE_TAB SDLK_TAB
|
||||
#define SDL_SCANCODE_RETURN SDLK_RETURN
|
||||
#define SDL_SCANCODE_ESCAPE SDLK_ESCAPE
|
||||
#define SDL_SCANCODE_SPACE SDLK_SPACE
|
||||
#define SDL_SCANCODE_BACKSPACE SDLK_BACKSPACE
|
||||
#define SDL_SCANCODE_UP SDLK_UP
|
||||
#define SDL_SCANCODE_LEFT SDLK_LEFT
|
||||
#define SDL_SCANCODE_DOWN SDLK_DOWN
|
||||
#define SDL_SCANCODE_RIGHT SDLK_RIGHT
|
||||
#define SDL_SCANCODE_LALT SDLK_LALT
|
||||
#define SDL_SCANCODE_RALT SDLK_RALT
|
||||
#define SDL_SCANCODE_LCTRL SDLK_LCTRL
|
||||
#define SDL_SCANCODE_RCTRL SDLK_RCTRL
|
||||
#define SDL_SCANCODE_LSHIFT SDLK_LSHIFT
|
||||
#define SDL_SCANCODE_RSHIFT SDLK_RSHIFT
|
||||
#define SDL_SCANCODE_LGUI SDLK_LMETA
|
||||
#define SDL_SCANCODE_RGUI SDLK_RMETA
|
||||
#define SDL_SCANCODE_INSERT SDLK_INSERT
|
||||
#define SDL_SCANCODE_DELETE SDLK_DELETE
|
||||
#define SDL_SCANCODE_PAGEDOWN SDLK_PAGEDOWN
|
||||
#define SDL_SCANCODE_PAGEUP SDLK_PAGEUP
|
||||
#define SDL_SCANCODE_HOME SDLK_HOME
|
||||
#define SDL_SCANCODE_END SDLK_END
|
||||
#define SDL_SCANCODE_KP_1 SDLK_KP1
|
||||
#define SDL_SCANCODE_KP_2 SDLK_KP2
|
||||
#define SDL_SCANCODE_KP_3 SDLK_KP3
|
||||
#define SDL_SCANCODE_KP_4 SDLK_KP4
|
||||
#define SDL_SCANCODE_KP_5 SDLK_KP5
|
||||
#define SDL_SCANCODE_KP_6 SDLK_KP6
|
||||
#define SDL_SCANCODE_KP_7 SDLK_KP7
|
||||
#define SDL_SCANCODE_KP_8 SDLK_KP8
|
||||
#define SDL_SCANCODE_KP_9 SDLK_KP9
|
||||
#define SDL_SCANCODE_KP_0 SDLK_KP0
|
||||
#define SDL_SCANCODE_KP_PERIOD SDLK_KP_PERIOD
|
||||
#define SDL_SCANCODE_KP_ENTER SDLK_KP_ENTER
|
||||
#define SDL_SCANCODE_KP_PLUS SDLK_KP_PLUS
|
||||
#define SDL_SCANCODE_KP_MINUS SDLK_KP_MINUS
|
||||
#define SDL_SCANCODE_KP_DIVIDE SDLK_KP_DIVIDE
|
||||
#define SDL_SCANCODE_KP_MULTIPLY SDLK_KP_MULTIPLY
|
||||
#define SDL_SCANCODE_NUMLOCKCLEAR SDLK_NUMLOCK
|
||||
#define SDL_SCANCODE_CAPSLOCK SDLK_CAPSLOCK
|
||||
#define SDL_SCANCODE_SLASH SDLK_SLASH
|
||||
#define SDL_SCANCODE_PERIOD SDLK_PERIOD
|
||||
#define SDL_SCANCODE_SEMICOLON SDLK_SEMICOLON
|
||||
#define SDL_SCANCODE_APOSTROPHE SDLK_QUOTE
|
||||
#define SDL_SCANCODE_COMMA SDLK_COMMA
|
||||
#define SDL_SCANCODE_PRINTSCREEN SDLK_PRINT
|
||||
#define SDL_SCANCODE_UNKNOWN SDLK_UNKNOWN
|
||||
#define SDL_GetScancodeName( x ) "unknown"
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -100,10 +102,13 @@ SDLash_KeyEvent
|
||||
static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
{
|
||||
int down = key.state != SDL_RELEASED;
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
int keynum = key.keysym.scancode;
|
||||
#else
|
||||
int keynum = key.keysym.sym;
|
||||
#endif
|
||||
qboolean numLock = SDL_GetModState() & KMOD_NUM;
|
||||
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( SDL_IsTextInputActive() && down )
|
||||
{
|
||||
if( SDL_GetModState() & KMOD_CTRL )
|
||||
@ -116,8 +121,23 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
#if !SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( keynum >= SDLK_KP0 && keynum <= SDLK_KP9 )
|
||||
keynum -= SDLK_KP0 + '0';
|
||||
|
||||
if( isprint( keynum ) )
|
||||
{
|
||||
if( SDL_GetModState() & KMOD_SHIFT )
|
||||
{
|
||||
keynum = Key_ToUpper( keynum );
|
||||
}
|
||||
|
||||
CL_CharEvent( keynum );
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
|
||||
#define DECLARE_KEY_RANGE( min, max, repl ) \
|
||||
if( keynum >= (min) && keynum <= (max) ) \
|
||||
@ -180,7 +200,6 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
case SDL_SCANCODE_KP_MULTIPLY: keynum = '*'; break;
|
||||
case SDL_SCANCODE_NUMLOCKCLEAR: keynum = K_KP_NUMLOCK; break;
|
||||
case SDL_SCANCODE_CAPSLOCK: keynum = K_CAPSLOCK; break;
|
||||
case SDL_SCANCODE_APPLICATION: keynum = K_WIN; break; // (compose key) ???
|
||||
case SDL_SCANCODE_SLASH: keynum = '/'; break;
|
||||
case SDL_SCANCODE_PERIOD: keynum = '.'; break;
|
||||
case SDL_SCANCODE_SEMICOLON: keynum = ';'; break;
|
||||
@ -193,6 +212,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
break;
|
||||
}
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
case SDL_SCANCODE_APPLICATION: keynum = K_WIN; break; // (compose key) ???
|
||||
// don't console spam on known functional buttons, but not used in engine
|
||||
case SDL_SCANCODE_MUTE:
|
||||
case SDL_SCANCODE_VOLUMEUP:
|
||||
@ -200,7 +220,7 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
case SDL_SCANCODE_BRIGHTNESSDOWN:
|
||||
case SDL_SCANCODE_BRIGHTNESSUP:
|
||||
return;
|
||||
#endif
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
case SDL_SCANCODE_UNKNOWN:
|
||||
{
|
||||
if( down ) Con_Reportf( "SDLash_KeyEvent: Unknown scancode\n" );
|
||||
@ -211,90 +231,24 @@ static void SDLash_KeyEvent( SDL_KeyboardEvent key )
|
||||
return;
|
||||
}
|
||||
}
|
||||
#else
|
||||
DECLARE_KEY_RANGE( SDLK_a, SDLK_z, 'a' )
|
||||
else DECLARE_KEY_RANGE( SDLK_1, SDLK_9, '1' )
|
||||
else DECLARE_KEY_RANGE( SDLK_F1, SDLK_F12, K_F1 )
|
||||
else
|
||||
{
|
||||
switch( keynum )
|
||||
{
|
||||
case SDLK_BACKQUOTE: keynum = '`'; break;
|
||||
case SDLK_0: keynum = '0'; break;
|
||||
case SDLK_BACKSLASH: keynum = '\\'; break;
|
||||
case SDLK_LEFTBRACKET: keynum = '['; break;
|
||||
case SDLK_RIGHTBRACKET: keynum = ']'; break;
|
||||
case SDLK_EQUALS: keynum = '='; break;
|
||||
case SDLK_MINUS: keynum = '-'; break;
|
||||
case SDLK_TAB: keynum = K_TAB; break;
|
||||
case SDLK_RETURN: keynum = K_ENTER; break;
|
||||
case SDLK_ESCAPE: keynum = K_ESCAPE; break;
|
||||
case SDLK_SPACE: keynum = K_SPACE; break;
|
||||
case SDLK_BACKSPACE: keynum = K_BACKSPACE; break;
|
||||
case SDLK_UP: keynum = K_UPARROW; break;
|
||||
case SDLK_LEFT: keynum = K_LEFTARROW; break;
|
||||
case SDLK_DOWN: keynum = K_DOWNARROW; break;
|
||||
case SDLK_RIGHT: keynum = K_RIGHTARROW; break;
|
||||
case SDLK_LALT:
|
||||
case SDLK_RALT: keynum = K_ALT; break;
|
||||
case SDLK_LCTRL:
|
||||
case SDLK_RCTRL: keynum = K_CTRL; break;
|
||||
case SDLK_LSHIFT:
|
||||
case SDLK_RSHIFT: keynum = K_SHIFT; break;
|
||||
case SDLK_LMETA:
|
||||
case SDLK_RMETA: keynum = K_WIN; break;
|
||||
case SDLK_INSERT: keynum = K_INS; break;
|
||||
case SDLK_DELETE: keynum = K_DEL; break;
|
||||
case SDLK_PAGEDOWN: keynum = K_PGDN; break;
|
||||
case SDLK_PAGEUP: keynum = K_PGUP; break;
|
||||
case SDLK_HOME: keynum = K_HOME; break;
|
||||
case SDLK_END: keynum = K_END; break;
|
||||
case SDLK_KP1: keynum = numLock ? '1' : K_KP_END; break;
|
||||
case SDLK_KP2: keynum = numLock ? '2' : K_KP_DOWNARROW; break;
|
||||
case SDLK_KP3: keynum = numLock ? '3' : K_KP_PGDN; break;
|
||||
case SDLK_KP4: keynum = numLock ? '4' : K_KP_LEFTARROW; break;
|
||||
case SDLK_KP5: keynum = numLock ? '5' : K_KP_5; break;
|
||||
case SDLK_KP6: keynum = numLock ? '6' : K_KP_RIGHTARROW; break;
|
||||
case SDLK_KP7: keynum = numLock ? '7' : K_KP_HOME; break;
|
||||
case SDLK_KP8: keynum = numLock ? '8' : K_KP_UPARROW; break;
|
||||
case SDLK_KP9: keynum = numLock ? '9' : K_KP_PGUP; break;
|
||||
case SDLK_KP0: keynum = numLock ? '0' : K_KP_INS; break;
|
||||
case SDLK_KP_PERIOD: keynum = K_KP_DEL; break;
|
||||
case SDLK_KP_ENTER: keynum = K_KP_ENTER; break;
|
||||
case SDLK_KP_PLUS: keynum = K_KP_PLUS; break;
|
||||
case SDLK_KP_MINUS: keynum = K_KP_MINUS; break;
|
||||
case SDLK_KP_DIVIDE: keynum = K_KP_SLASH; break;
|
||||
case SDLK_KP_MULTIPLY: keynum = '*'; break;
|
||||
case SDLK_NUMLOCK: keynum = K_KP_NUMLOCK; break;
|
||||
case SDLK_CAPSLOCK: keynum = K_CAPSLOCK; break;
|
||||
case SDLK_SLASH: keynum = '/'; break;
|
||||
case SDLK_PERIOD: keynum = '.'; break;
|
||||
case SDLK_SEMICOLON: keynum = ';'; break;
|
||||
case SDLK_QUOTE: keynum = '\''; break;
|
||||
case SDLK_COMMA: keynum = ','; break;
|
||||
case SDLK_PRINT:
|
||||
{
|
||||
host.force_draw_version = true;
|
||||
host.force_draw_version_time = host.realtime + FORCE_DRAW_VERSION_TIME;
|
||||
break;
|
||||
}
|
||||
case SDLK_UNKNOWN:
|
||||
{
|
||||
if( down ) Con_Reportf( "SDLash_KeyEvent: Unknown scancode\n" );
|
||||
return;
|
||||
}
|
||||
default:
|
||||
if( down ) Con_Reportf( "SDLash_KeyEvent: Unknown key: %s = %i\n", SDL_GetScancodeName( keynum ), keynum );
|
||||
return;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#undef DECLARE_KEY_RANGE
|
||||
|
||||
Key_Event( keynum, down );
|
||||
}
|
||||
|
||||
static void SDLash_MouseKey( int key, int down, int istouch )
|
||||
{
|
||||
if( CVAR_TO_BOOL( touch_emulate ) )
|
||||
{
|
||||
Touch_KeyEvent( key, down );
|
||||
}
|
||||
else if( in_mouseinitialized && !m_ignore->value && !istouch )
|
||||
{
|
||||
Key_Event( key, down );
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
SDLash_MouseEvent
|
||||
@ -304,14 +258,41 @@ SDLash_MouseEvent
|
||||
static void SDLash_MouseEvent( SDL_MouseButtonEvent button )
|
||||
{
|
||||
int down = button.state != SDL_RELEASED;
|
||||
qboolean istouch;
|
||||
|
||||
if( CVAR_TO_BOOL( touch_emulate ) )
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
istouch = button.which == SDL_TOUCH_MOUSEID;
|
||||
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
istouch = false;
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
|
||||
switch( button.button )
|
||||
{
|
||||
Touch_KeyEvent( K_MOUSE1 - 1 + button.button, down );
|
||||
}
|
||||
else if( in_mouseinitialized && !m_ignore->value && button.which != SDL_TOUCH_MOUSEID )
|
||||
{
|
||||
Key_Event( K_MOUSE1 - 1 + button.button, down );
|
||||
case SDL_BUTTON_LEFT:
|
||||
SDLash_MouseKey( K_MOUSE1, down, istouch );
|
||||
break;
|
||||
case SDL_BUTTON_RIGHT:
|
||||
SDLash_MouseKey( K_MOUSE2, down, istouch );
|
||||
break;
|
||||
case SDL_BUTTON_MIDDLE:
|
||||
SDLash_MouseKey( K_MOUSE3, down, istouch );
|
||||
break;
|
||||
case SDL_BUTTON_X1:
|
||||
SDLash_MouseKey( K_MOUSE4, down, istouch );
|
||||
break;
|
||||
case SDL_BUTTON_X2:
|
||||
SDLash_MouseKey( K_MOUSE5, down, istouch );
|
||||
break;
|
||||
#if ! SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
case SDL_BUTTON_WHEELUP:
|
||||
Key_Event( K_MWHEELUP, down );
|
||||
break;
|
||||
case SDL_BUTTON_WHEELDOWN:
|
||||
Key_Event( K_MWHEELDOWN, down );
|
||||
break;
|
||||
#endif // ! SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
default:
|
||||
Con_Printf( "Unknown mouse button ID: %d\n", button.button );
|
||||
}
|
||||
}
|
||||
|
||||
@ -321,6 +302,7 @@ SDLash_InputEvent
|
||||
|
||||
=============
|
||||
*/
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
static void SDLash_InputEvent( SDL_TextInputEvent input )
|
||||
{
|
||||
char *text;
|
||||
@ -339,6 +321,43 @@ static void SDLash_InputEvent( SDL_TextInputEvent input )
|
||||
CL_CharEvent( ch );
|
||||
}
|
||||
}
|
||||
#endif // SDL_VERSION_AT_LEAST( 2, 0, 0 )
|
||||
|
||||
static void SDLash_ActiveEvent( int gain )
|
||||
{
|
||||
if( gain )
|
||||
{
|
||||
host.status = HOST_FRAME;
|
||||
IN_ActivateMouse(true);
|
||||
if( snd_mute_losefocus->value )
|
||||
{
|
||||
SNDDMA_Activate( true );
|
||||
}
|
||||
host.force_draw_version = true;
|
||||
host.force_draw_version_time = host.realtime + FORCE_DRAW_VERSION_TIME;
|
||||
if( vid_fullscreen->value )
|
||||
VID_SetMode();
|
||||
}
|
||||
else
|
||||
{
|
||||
#if TARGET_OS_IPHONE
|
||||
{
|
||||
// Keep running if ftp server enabled
|
||||
void IOS_StartBackgroundTask( void );
|
||||
IOS_StartBackgroundTask();
|
||||
}
|
||||
#endif
|
||||
host.status = HOST_NOFOCUS;
|
||||
IN_DeactivateMouse();
|
||||
if( snd_mute_losefocus->value )
|
||||
{
|
||||
SNDDMA_Activate( false );
|
||||
}
|
||||
host.force_draw_version = true;
|
||||
host.force_draw_version_time = host.realtime + 2;
|
||||
VID_RestoreScreenResolution();
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
=============
|
||||
@ -360,27 +379,53 @@ static void SDLash_EventFilter( SDL_Event *event )
|
||||
{
|
||||
/* Mouse events */
|
||||
case SDL_MOUSEMOTION:
|
||||
if( !host.mouse_visible && event->motion.which != SDL_TOUCH_MOUSEID )
|
||||
if( !host.mouse_visible
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
&& event->motion.which != SDL_TOUCH_MOUSEID )
|
||||
#else
|
||||
)
|
||||
#endif
|
||||
IN_MouseEvent();
|
||||
break;
|
||||
|
||||
case SDL_MOUSEBUTTONUP:
|
||||
case SDL_MOUSEBUTTONDOWN:
|
||||
|
||||
SDLash_MouseEvent( event->button );
|
||||
break;
|
||||
|
||||
case SDL_MOUSEWHEEL:
|
||||
wheelbutton = event->wheel.y < 0 ? K_MWHEELDOWN : K_MWHEELUP;
|
||||
Key_Event( wheelbutton, true );
|
||||
break;
|
||||
|
||||
/* Keyboard events */
|
||||
case SDL_KEYDOWN:
|
||||
case SDL_KEYUP:
|
||||
SDLash_KeyEvent( event->key );
|
||||
break;
|
||||
|
||||
/* Joystick events */
|
||||
case SDL_JOYAXISMOTION:
|
||||
Joy_AxisMotionEvent( event->jaxis.axis, event->jaxis.value );
|
||||
break;
|
||||
|
||||
case SDL_JOYBALLMOTION:
|
||||
Joy_BallMotionEvent( event->jball.ball, event->jball.xrel, event->jball.yrel );
|
||||
break;
|
||||
|
||||
case SDL_JOYHATMOTION:
|
||||
Joy_HatMotionEvent( event->jhat.hat, event->jhat.value );
|
||||
break;
|
||||
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
case SDL_JOYBUTTONUP:
|
||||
Joy_ButtonEvent( event->jbutton.button, event->jbutton.state );
|
||||
break;
|
||||
|
||||
case SDL_QUIT:
|
||||
Sys_Quit();
|
||||
break;
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
case SDL_MOUSEWHEEL:
|
||||
wheelbutton = event->wheel.y < 0 ? K_MWHEELDOWN : K_MWHEELUP;
|
||||
Key_Event( wheelbutton, true );
|
||||
break;
|
||||
|
||||
/* Touch events */
|
||||
case SDL_FINGERDOWN:
|
||||
case SDL_FINGERUP:
|
||||
@ -394,7 +439,7 @@ static void SDLash_EventFilter( SDL_Event *event )
|
||||
type = event_down;
|
||||
else if( event->type == SDL_FINGERUP )
|
||||
type = event_up ;
|
||||
else if(event->type == SDL_FINGERMOTION )
|
||||
else if( event->type == SDL_FINGERMOTION )
|
||||
type = event_motion;
|
||||
else break;
|
||||
|
||||
@ -435,30 +480,11 @@ static void SDLash_EventFilter( SDL_Event *event )
|
||||
break;
|
||||
}
|
||||
|
||||
|
||||
/* IME */
|
||||
case SDL_TEXTINPUT:
|
||||
SDLash_InputEvent( event->text );
|
||||
break;
|
||||
|
||||
/* Joystick events */
|
||||
case SDL_JOYAXISMOTION:
|
||||
Joy_AxisMotionEvent( event->jaxis.axis, event->jaxis.value );
|
||||
break;
|
||||
|
||||
case SDL_JOYBALLMOTION:
|
||||
Joy_BallMotionEvent( event->jball.ball, event->jball.xrel, event->jball.yrel );
|
||||
break;
|
||||
|
||||
case SDL_JOYHATMOTION:
|
||||
Joy_HatMotionEvent( event->jhat.hat, event->jhat.value );
|
||||
break;
|
||||
|
||||
case SDL_JOYBUTTONDOWN:
|
||||
case SDL_JOYBUTTONUP:
|
||||
Joy_ButtonEvent( event->jbutton.button, event->jbutton.state );
|
||||
break;
|
||||
|
||||
case SDL_JOYDEVICEADDED:
|
||||
Joy_AddEvent();
|
||||
break;
|
||||
@ -508,10 +534,6 @@ static void SDLash_EventFilter( SDL_Event *event )
|
||||
Joy_RemoveEvent( );
|
||||
break;
|
||||
|
||||
case SDL_QUIT:
|
||||
Sys_Quit();
|
||||
break;
|
||||
|
||||
case SDL_WINDOWEVENT:
|
||||
if( event->window.windowID != SDL_GetWindowID( host.hWnd ) )
|
||||
return;
|
||||
@ -540,47 +562,35 @@ static void SDLash_EventFilter( SDL_Event *event )
|
||||
VID_SetMode();
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||
host.status = HOST_FRAME;
|
||||
IN_ActivateMouse(true);
|
||||
if( snd_mute_losefocus->value )
|
||||
{
|
||||
SNDDMA_Activate( true );
|
||||
}
|
||||
host.force_draw_version = true;
|
||||
host.force_draw_version_time = host.realtime + FORCE_DRAW_VERSION_TIME;
|
||||
if( vid_fullscreen->value )
|
||||
VID_SetMode();
|
||||
SDLash_ActiveEvent( true );
|
||||
break;
|
||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||
#if TARGET_OS_IPHONE
|
||||
{
|
||||
// Keep running if ftp server enabled
|
||||
void IOS_StartBackgroundTask( void );
|
||||
IOS_StartBackgroundTask();
|
||||
}
|
||||
#endif
|
||||
host.status = HOST_NOFOCUS;
|
||||
IN_DeactivateMouse();
|
||||
if( snd_mute_losefocus->value )
|
||||
{
|
||||
SNDDMA_Activate( false );
|
||||
}
|
||||
host.force_draw_version = true;
|
||||
host.force_draw_version_time = host.realtime + 2;
|
||||
VID_RestoreScreenResolution();
|
||||
SDLash_ActiveEvent( false );
|
||||
break;
|
||||
case SDL_WINDOWEVENT_RESIZED:
|
||||
case SDL_WINDOWEVENT_MAXIMIZED:
|
||||
{
|
||||
int w = VID_MIN_WIDTH, h = VID_MIN_HEIGHT;
|
||||
if( vid_fullscreen->value )
|
||||
break;
|
||||
|
||||
VID_SaveWindowSize( event->window.data1, event->window.data2 );
|
||||
SCR_VidInit(); // tell the client.dll what vid_mode has changed
|
||||
SDL_GL_GetDrawableSize( host.hWnd, &w, &h );
|
||||
R_SaveVideoMode( w, h );
|
||||
SCR_VidInit(); // tell the client.dll that vid_mode has changed
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
#else
|
||||
case SDL_VIDEORESIZE:
|
||||
R_SaveVideoMode( event->resize.w, event->resize.h );
|
||||
SCR_VidInit();
|
||||
break; // tell the client.dll that vid_mode has changed
|
||||
case SDL_ACTIVEEVENT:
|
||||
SDLash_ActiveEvent( event->active.gain );
|
||||
break;
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,9 @@ GNU General Public License for more details.
|
||||
#define SDL_OpenAudioDevice( a, b, c, d, e ) SDL_OpenAudio( ( c ), ( d ) )
|
||||
#define SDL_CloseAudioDevice( a ) SDL_CloseAudio()
|
||||
#define SDL_PauseAudioDevice( a, b ) SDL_PauseAudio( ( b ) )
|
||||
#define SDLash_IsAudioError( x ) ( x ) != 0
|
||||
#else
|
||||
#define SDLash_IsAudioError( x ) ( x ) == 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
@ -50,6 +53,11 @@ void SDL_SoundCallback( void *userdata, Uint8 *stream, int len )
|
||||
int pos = dma.samplepos << 1;
|
||||
int wrapped = pos + len - size;
|
||||
|
||||
#if ! SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( !dma.buffer )
|
||||
return;
|
||||
#endif
|
||||
|
||||
if( wrapped < 0 )
|
||||
{
|
||||
memcpy( stream, dma.buffer + pos, len );
|
||||
@ -97,7 +105,7 @@ qboolean SNDDMA_Init( void )
|
||||
|
||||
sdl_dev = SDL_OpenAudioDevice( NULL, 0, &desired, &obtained, 0 );
|
||||
|
||||
if( !sdl_dev )
|
||||
if( SDLash_IsAudioError( sdl_dev ))
|
||||
{
|
||||
Con_Printf( "Couldn't open SDL audio: %s\n", SDL_GetError( ) );
|
||||
return false;
|
||||
@ -122,7 +130,7 @@ qboolean SNDDMA_Init( void )
|
||||
if( !samplecount )
|
||||
samplecount = 0x8000;
|
||||
dma.samples = samplecount * obtained.channels;
|
||||
dma.buffer = Z_Malloc( dma.samples * 2 );
|
||||
dma.buffer = Z_Calloc( dma.samples * 2 );
|
||||
dma.samplepos = 0;
|
||||
|
||||
Con_Printf( "Using SDL audio driver: %s @ %d Hz\n", SDL_GetCurrentAudioDriver( ), obtained.freq );
|
||||
|
@ -38,7 +38,9 @@ void Platform_Sleep( int msec )
|
||||
}
|
||||
#endif // XASH_TIMER == TIMER_SDL
|
||||
|
||||
#if XASH_MESSAGEBOX == MSGBOX_SDL
|
||||
void Platform_MessageBox( const char *title, const char *message, qboolean parentMainWindow )
|
||||
{
|
||||
SDL_ShowSimpleMessageBox( SDL_MESSAGEBOX_ERROR, title, message, parentMainWindow ? host.hWnd : NULL );
|
||||
}
|
||||
#endif // XASH_MESSAGEBOX == MSGBOX_SDL
|
||||
|
@ -57,7 +57,7 @@ qboolean SW_CreateBuffer( int width, int height, uint *stride, uint *bpp, uint *
|
||||
// guess
|
||||
if( format == SDL_PIXELFORMAT_UNKNOWN )
|
||||
{
|
||||
if( glw_state.desktopBitsPixel == 16 )
|
||||
if( refState.desktopBitsPixel == 16 )
|
||||
format = SDL_PIXELFORMAT_RGB565;
|
||||
else
|
||||
format = SDL_PIXELFORMAT_RGBA8888;
|
||||
@ -234,7 +234,9 @@ void SW_UnlockBuffer( void )
|
||||
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_UpdateWindowSurface( host.hWnd );
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_Flip( host.hWnd );
|
||||
#endif
|
||||
}
|
||||
|
||||
int R_MaxVideoModes( void )
|
||||
@ -269,7 +271,6 @@ static void R_InitVideoModes( void )
|
||||
for( i = 0; i < modes; i++ )
|
||||
{
|
||||
int j;
|
||||
qboolean skip = false;
|
||||
SDL_DisplayMode mode;
|
||||
|
||||
if( SDL_GetDisplayMode( displayIndex, i, &mode ) )
|
||||
@ -286,7 +287,6 @@ static void R_InitVideoModes( void )
|
||||
if( mode.w == vidmodes[j].width &&
|
||||
mode.h == vidmodes[j].height )
|
||||
{
|
||||
skip = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -300,8 +300,38 @@ static void R_InitVideoModes( void )
|
||||
num_vidmodes++;
|
||||
}
|
||||
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_Rect **modes = SDL_ListModes( NULL, SDL_FULLSCREEN );
|
||||
int len = 0, i = 0, j;
|
||||
|
||||
# error TODO
|
||||
if( !modes || modes == (void*)-1 )
|
||||
return;
|
||||
|
||||
for( len = 0; modes[len]; len++ );
|
||||
|
||||
vidmodes = Mem_Malloc( host.mempool, len * sizeof( vidmode_t ) );
|
||||
|
||||
// from smallest to largest
|
||||
for( ; i < len; i++ )
|
||||
{
|
||||
SDL_Rect *mode = modes[len - i - 1];
|
||||
|
||||
for( j = 0; j < num_vidmodes; j++ )
|
||||
{
|
||||
if( mode->w == vidmodes[j].width &&
|
||||
mode->h == vidmodes[j].height )
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
if( j != num_vidmodes )
|
||||
continue;
|
||||
|
||||
vidmodes[num_vidmodes].width = mode->w;
|
||||
vidmodes[num_vidmodes].height = mode->h;
|
||||
vidmodes[num_vidmodes].desc = copystring( va( "%ix%i", mode->w, mode->h ));
|
||||
|
||||
num_vidmodes++;
|
||||
}
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
|
||||
}
|
||||
@ -388,9 +418,9 @@ GL_GetProcAddress
|
||||
void *GL_GetProcAddress( const char *name )
|
||||
{
|
||||
#if defined( XASH_NANOGL )
|
||||
void *func = nanoGL_GetProcAddress(name);
|
||||
void *func = nanoGL_GetProcAddress( name );
|
||||
#else
|
||||
void *func = SDL_GL_GetProcAddress(name);
|
||||
void *func = SDL_GL_GetProcAddress( name );
|
||||
#endif
|
||||
|
||||
if( !func )
|
||||
@ -511,6 +541,7 @@ void VID_SaveWindowSize( int width, int height )
|
||||
|
||||
static qboolean VID_SetScreenResolution( int width, int height )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_DisplayMode want, got;
|
||||
Uint32 wndFlags = 0;
|
||||
static string wndname;
|
||||
@ -539,13 +570,16 @@ static qboolean VID_SetScreenResolution( int width, int height )
|
||||
SDL_SetWindowGrab( host.hWnd, SDL_TRUE );
|
||||
SDL_SetWindowSize( host.hWnd, got.w, got.h );
|
||||
|
||||
VID_SaveWindowSize( got.w, got.h );
|
||||
|
||||
VID_SaveWindowSize( gow.w, got.h );
|
||||
#else
|
||||
VID_SaveWindowSize( width, height );
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
|
||||
void VID_RestoreScreenResolution( void )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( !Cvar_VariableInteger("fullscreen") )
|
||||
{
|
||||
SDL_SetWindowBordered( host.hWnd, SDL_TRUE );
|
||||
@ -556,6 +590,7 @@ void VID_RestoreScreenResolution( void )
|
||||
SDL_MinimizeWindow( host.hWnd );
|
||||
SDL_SetWindowFullscreen( host.hWnd, 0 );
|
||||
}
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
}
|
||||
|
||||
#if defined(_WIN32) && !defined(XASH_64BIT) // ICO support only for Win32
|
||||
@ -582,6 +617,7 @@ VID_CreateWindow
|
||||
qboolean VID_CreateWindow( int width, int height, qboolean fullscreen )
|
||||
{
|
||||
static string wndname;
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
Uint32 wndFlags = SDL_WINDOW_OPENGL | SDL_WINDOW_SHOWN | SDL_WINDOW_MOUSE_FOCUS;
|
||||
rgbdata_t *icon = NULL;
|
||||
qboolean iconLoaded = false;
|
||||
@ -733,7 +769,53 @@ qboolean VID_CreateWindow( int width, int height, qboolean fullscreen )
|
||||
|
||||
}
|
||||
|
||||
VID_SaveWindowSize( width, height );
|
||||
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
Uint32 flags = 0;
|
||||
|
||||
if( fullscreen )
|
||||
{
|
||||
// flags |= SDL_FULLSCREEN;
|
||||
}
|
||||
|
||||
if( glw_state.software )
|
||||
{
|
||||
// flags |= SDL_ASYNCBLIT;
|
||||
}
|
||||
else
|
||||
{
|
||||
flags |= SDL_OPENGL;
|
||||
}
|
||||
|
||||
while( glw_state.safe >= SAFE_NO && glw_state.safe < SAFE_LAST )
|
||||
{
|
||||
host.hWnd = sw.surf = SDL_SetVideoMode( width, height, 0, flags );
|
||||
|
||||
// we have window, exit loop
|
||||
if( host.hWnd )
|
||||
break;
|
||||
|
||||
Con_Reportf( S_ERROR "VID_CreateWindow: couldn't create '%s' with safegl level %d: %s\n", wndname, glw_state.safe, SDL_GetError());
|
||||
|
||||
glw_state.safe++;
|
||||
|
||||
if( !gl_wgl_msaa_samples->value && glw_state.safe == SAFE_NOMSAA )
|
||||
glw_state.safe++; // no need to skip msaa, if we already disabled it
|
||||
|
||||
GL_SetupAttributes(); // re-choose attributes
|
||||
|
||||
// try again create window
|
||||
}
|
||||
|
||||
// window creation has failed...
|
||||
if( glw_state.safe >= SAFE_LAST )
|
||||
{
|
||||
return false;
|
||||
}
|
||||
|
||||
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
|
||||
VID_SaveVideoMode( width, height );
|
||||
|
||||
return true;
|
||||
}
|
||||
@ -750,7 +832,9 @@ void VID_DestroyWindow( void )
|
||||
VID_RestoreScreenResolution();
|
||||
if( host.hWnd )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_DestroyWindow ( host.hWnd );
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
host.hWnd = NULL;
|
||||
}
|
||||
|
||||
@ -767,14 +851,20 @@ GL_SetupAttributes
|
||||
*/
|
||||
static void GL_SetupAttributes( void )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_GL_ResetAttributes();
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
|
||||
ref.dllFuncs.GL_SetupAttributes( glw_state.safe );
|
||||
}
|
||||
|
||||
void GL_SwapBuffers( void )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_GL_SwapWindow( host.hWnd );
|
||||
#else // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_Flip( host.hWnd );
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
}
|
||||
|
||||
int GL_SetAttribute( int attr, int val )
|
||||
@ -792,12 +882,20 @@ int GL_SetAttribute( int attr, int val )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_MULTISAMPLEBUFFERS );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_MULTISAMPLESAMPLES );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_ACCELERATED_VISUAL );
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_MAJOR_VERSION );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_MINOR_VERSION );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_EGL );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_FLAGS );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_SHARE_WITH_CURRENT_CONTEXT );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_FRAMEBUFFER_SRGB_CAPABLE );
|
||||
case REF_GL_CONTEXT_PROFILE_MASK:
|
||||
#ifdef SDL_HINT_OPENGL_ES_DRIVER
|
||||
if( val == REF_GL_CONTEXT_PROFILE_ES )
|
||||
SDL_SetHint(SDL_HINT_OPENGL_ES_DRIVER, "1");
|
||||
#endif // SDL_HINT_OPENGL_ES_DRIVER
|
||||
return SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, val );
|
||||
#endif
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 4 )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_RELEASE_BEHAVIOR );
|
||||
#endif
|
||||
@ -805,16 +903,9 @@ int GL_SetAttribute( int attr, int val )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_RESET_NOTIFICATION );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_NO_ERROR );
|
||||
#endif
|
||||
case REF_GL_CONTEXT_PROFILE_MASK:
|
||||
#ifdef SDL_HINT_OPENGL_ES_DRIVER
|
||||
if (val == REF_GL_CONTEXT_PROFILE_ES)
|
||||
SDL_SetHint(SDL_HINT_OPENGL_ES_DRIVER, "1");
|
||||
#endif // SDL_HINT_OPENGL_ES_DRIVER
|
||||
return SDL_GL_SetAttribute( SDL_GL_CONTEXT_PROFILE_MASK, val );
|
||||
#undef MAP_REF_API_ATTRIBUTE_TO_SDL
|
||||
}
|
||||
|
||||
ASSERT( 0 );
|
||||
return -1;
|
||||
}
|
||||
|
||||
@ -833,12 +924,15 @@ int GL_GetAttribute( int attr, int *val )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_MULTISAMPLEBUFFERS );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_MULTISAMPLESAMPLES );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_ACCELERATED_VISUAL );
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_MAJOR_VERSION );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_MINOR_VERSION );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_EGL );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_FLAGS );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_SHARE_WITH_CURRENT_CONTEXT );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_FRAMEBUFFER_SRGB_CAPABLE );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_PROFILE_MASK );
|
||||
#endif
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 4 )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_RELEASE_BEHAVIOR );
|
||||
#endif
|
||||
@ -846,11 +940,9 @@ int GL_GetAttribute( int attr, int *val )
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_RESET_NOTIFICATION );
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_NO_ERROR );
|
||||
#endif
|
||||
MAP_REF_API_ATTRIBUTE_TO_SDL( GL_CONTEXT_PROFILE_MASK );
|
||||
#undef MAP_REF_API_ATTRIBUTE_TO_SDL
|
||||
}
|
||||
|
||||
ASSERT( 0 );
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -865,18 +957,23 @@ R_Init_Video
|
||||
*/
|
||||
qboolean R_Init_Video( const int type )
|
||||
{
|
||||
SDL_DisplayMode displayMode;
|
||||
string safe;
|
||||
qboolean retval;
|
||||
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_DisplayMode displayMode;
|
||||
SDL_GetCurrentDisplayMode(0, &displayMode);
|
||||
glw_state.desktopBitsPixel = SDL_BITSPERPIXEL(displayMode.format);
|
||||
glw_state.desktopWidth = displayMode.w;
|
||||
glw_state.desktopHeight = displayMode.h;
|
||||
refState.desktopBitsPixel = SDL_BITSPERPIXEL( displayMode.format );
|
||||
#else
|
||||
refState.desktopBitsPixel = 32;
|
||||
#endif
|
||||
|
||||
#if ! SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_VideoInit( "caca", 0 );
|
||||
#else
|
||||
#if !defined(_WIN32)
|
||||
SDL_SetHint( "SDL_VIDEO_X11_XRANDR", "1" );
|
||||
SDL_SetHint( "SDL_VIDEO_X11_XVIDMODE", "1" );
|
||||
#endif
|
||||
#endif
|
||||
|
||||
R_InitVideoModes();
|
||||
@ -932,16 +1029,16 @@ qboolean R_Init_Video( const int type )
|
||||
|
||||
rserr_t R_ChangeDisplaySettings( int width, int height, qboolean fullscreen )
|
||||
{
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_DisplayMode displayMode;
|
||||
|
||||
SDL_GetCurrentDisplayMode( 0, &displayMode );
|
||||
|
||||
Con_Reportf( "R_ChangeDisplaySettings: Setting video mode to %dx%d %s\n", width, height, fullscreen ? "fullscreen" : "windowed" );
|
||||
|
||||
// check our desktop attributes
|
||||
glw_state.desktopBitsPixel = SDL_BITSPERPIXEL( displayMode.format );
|
||||
glw_state.desktopWidth = displayMode.w;
|
||||
glw_state.desktopHeight = displayMode.h;
|
||||
refState.desktopBitsPixel = SDL_BITSPERPIXEL( displayMode.format );
|
||||
#endif
|
||||
|
||||
Con_Reportf( "R_ChangeDisplaySettings: Setting video mode to %dx%d %s\n", width, height, fullscreen ? "fullscreen" : "windowed" );
|
||||
|
||||
refState.fullScreen = fullscreen;
|
||||
|
||||
@ -958,6 +1055,7 @@ rserr_t R_ChangeDisplaySettings( int width, int height, qboolean fullscreen )
|
||||
else
|
||||
{
|
||||
VID_RestoreScreenResolution();
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( SDL_SetWindowFullscreen( host.hWnd, 0 ) )
|
||||
return rserr_invalid_fullscreen;
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 5 )
|
||||
@ -965,7 +1063,9 @@ rserr_t R_ChangeDisplaySettings( int width, int height, qboolean fullscreen )
|
||||
#endif
|
||||
SDL_SetWindowBordered( host.hWnd, SDL_TRUE );
|
||||
SDL_SetWindowSize( host.hWnd, width, height );
|
||||
VID_SaveWindowSize( width, height );
|
||||
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
VID_SaveVideoMode( width, height );
|
||||
}
|
||||
|
||||
return rserr_ok;
|
||||
@ -987,6 +1087,7 @@ qboolean VID_SetMode( void )
|
||||
iScreenWidth = Cvar_VariableInteger( "width" );
|
||||
iScreenHeight = Cvar_VariableInteger( "height" );
|
||||
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
if( iScreenWidth < VID_MIN_WIDTH ||
|
||||
iScreenHeight < VID_MIN_HEIGHT ) // trying to get resolution automatically by default
|
||||
{
|
||||
@ -1001,12 +1102,13 @@ qboolean VID_SetMode( void )
|
||||
iScreenWidth = DEFAULT_MODE_WIDTH;
|
||||
iScreenHeight = DEFAULT_MODE_HEIGHT;
|
||||
#endif
|
||||
|
||||
if( !FBitSet( vid_fullscreen->flags, FCVAR_CHANGED ) )
|
||||
Cvar_SetValue( "fullscreen", DEFAULT_FULLSCREEN );
|
||||
else
|
||||
ClearBits( vid_fullscreen->flags, FCVAR_CHANGED );
|
||||
}
|
||||
#endif // SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
|
||||
if( !FBitSet( vid_fullscreen->flags, FCVAR_CHANGED ) )
|
||||
Cvar_SetValue( "fullscreen", DEFAULT_FULLSCREEN );
|
||||
else
|
||||
ClearBits( vid_fullscreen->flags, FCVAR_CHANGED );
|
||||
|
||||
SetBits( gl_vsync->flags, FCVAR_CHANGED );
|
||||
fullscreen = Cvar_VariableInteger("fullscreen") != 0;
|
||||
@ -1049,7 +1151,7 @@ R_Free_Video
|
||||
==================
|
||||
*/
|
||||
void R_Free_Video( void )
|
||||
{
|
||||
{
|
||||
GL_DeleteContext ();
|
||||
|
||||
VID_DestroyWindow ();
|
||||
@ -1057,6 +1159,10 @@ void R_Free_Video( void )
|
||||
R_FreeVideoModes();
|
||||
|
||||
ref.dllFuncs.GL_ClearExtensions();
|
||||
|
||||
#if SDL_VERSION_ATLEAST( 2, 0, 0 )
|
||||
SDL_VideoQuit();
|
||||
#endif
|
||||
}
|
||||
|
||||
#endif // XASH_DEDICATED
|
||||
|
@ -53,9 +53,9 @@ void Platform_ShellExecute( const char *path, const char *parms )
|
||||
ShellExecute( NULL, "open", path, parms, NULL, SW_SHOW );
|
||||
}
|
||||
|
||||
#ifdef XASH_DEDICATED
|
||||
#if XASH_MESSAGEBOX == MSGBOX_WIN32
|
||||
void Platform_MessageBox( const char *title, const char *message, qboolean parentMainWindow )
|
||||
{
|
||||
MessageBox( parentMainWindow ? host.hWnd : NULL, message, title, MB_OK|MB_SETFOREGROUND|MB_ICONSTOP );
|
||||
}
|
||||
#endif
|
||||
#endif // XASH_MESSAGEBOX == MSGBOX_WIN32
|
||||
|
Loading…
Reference in New Issue
Block a user