mirror of
https://github.com/ZDoom/gzdoom-gles.git
synced 2024-12-01 16:41:22 +00:00
- Removed XCursor code since SDL2 has proper color cursor support.
- Improved international keyboard support by falling back to scan codes if we don't recognize a keycode. - Clear out any residual mouse movement when entering relative mouse mode.
This commit is contained in:
parent
4aef696007
commit
a7b33a8ce3
5 changed files with 93 additions and 105 deletions
|
@ -189,19 +189,6 @@ else( WIN32 )
|
||||||
set( NO_GTK ON )
|
set( NO_GTK ON )
|
||||||
endif( GTK2_FOUND )
|
endif( GTK2_FOUND )
|
||||||
endif( NOT NO_GTK )
|
endif( NOT NO_GTK )
|
||||||
|
|
||||||
# Check for Xcursor library and header files
|
|
||||||
find_library( XCURSOR_LIB Xcursor )
|
|
||||||
if( XCURSOR_LIB )
|
|
||||||
find_file( XCURSOR_HEADER "X11/Xcursor/Xcursor.h" )
|
|
||||||
if( XCURSOR_HEADER )
|
|
||||||
add_definitions( -DUSE_XCURSOR=1 )
|
|
||||||
message( STATUS "Found Xcursor at ${XCURSOR_LIB}" )
|
|
||||||
set( ZDOOM_LIBS ${ZDOOM_LIBS} ${XCURSOR_LIB} )
|
|
||||||
else( XCURSOR_HEADER )
|
|
||||||
unset( XCURSOR_LIB )
|
|
||||||
endif( XCURSOR_HEADER )
|
|
||||||
endif( XCURSOR_LIB )
|
|
||||||
endif( APPLE )
|
endif( APPLE )
|
||||||
set( NASM_NAMES nasm )
|
set( NASM_NAMES nasm )
|
||||||
|
|
||||||
|
|
|
@ -9,22 +9,6 @@
|
||||||
#include "v_palette.h"
|
#include "v_palette.h"
|
||||||
#include "textures.h"
|
#include "textures.h"
|
||||||
|
|
||||||
#ifdef USE_XCURSOR
|
|
||||||
// Xlib has its own GC, so don't let it interfere.
|
|
||||||
#define GC XGC
|
|
||||||
#include <X11/Xcursor/Xcursor.h>
|
|
||||||
#undef GC
|
|
||||||
|
|
||||||
bool UseXCursor;
|
|
||||||
SDL_Cursor *X11Cursor;
|
|
||||||
SDL_Cursor *FirstCursor;
|
|
||||||
|
|
||||||
SDL_Cursor *CreateColorCursor(FTexture *cursorpic)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
bool I_SetCursor(FTexture *cursorpic)
|
bool I_SetCursor(FTexture *cursorpic)
|
||||||
{
|
{
|
||||||
static SDL_Cursor *cursor;
|
static SDL_Cursor *cursor;
|
||||||
|
@ -38,21 +22,6 @@ bool I_SetCursor(FTexture *cursorpic)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef USE_XCURSOR
|
|
||||||
if (UseXCursor)
|
|
||||||
{
|
|
||||||
if (FirstCursor == NULL)
|
|
||||||
{
|
|
||||||
FirstCursor = SDL_GetCursor();
|
|
||||||
}
|
|
||||||
X11Cursor = CreateColorCursor(cursorpic);
|
|
||||||
if (X11Cursor != NULL)
|
|
||||||
{
|
|
||||||
SDL_SetCursor(X11Cursor);
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
if (cursorSurface == NULL)
|
if (cursorSurface == NULL)
|
||||||
cursorSurface = SDL_CreateRGBSurface (0, 32, 32, 32, MAKEARGB(0,255,0,0), MAKEARGB(0,0,255,0), MAKEARGB(0,0,0,255), MAKEARGB(255,0,0,0));
|
cursorSurface = SDL_CreateRGBSurface (0, 32, 32, 32, MAKEARGB(0,255,0,0), MAKEARGB(0,0,255,0), MAKEARGB(0,0,0,255), MAKEARGB(255,0,0,0));
|
||||||
|
|
||||||
|
@ -82,14 +51,6 @@ bool I_SetCursor(FTexture *cursorpic)
|
||||||
SDL_FreeSurface(cursorSurface);
|
SDL_FreeSurface(cursorSurface);
|
||||||
cursorSurface = NULL;
|
cursorSurface = NULL;
|
||||||
}
|
}
|
||||||
#ifdef USE_XCURSOR
|
|
||||||
if (X11Cursor != NULL)
|
|
||||||
{
|
|
||||||
SDL_SetCursor(FirstCursor);
|
|
||||||
SDL_FreeCursor(X11Cursor);
|
|
||||||
X11Cursor = NULL;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
|
@ -35,19 +35,18 @@ EXTERN_CVAR (Bool, fullscreen)
|
||||||
extern int WaitingForKey, chatmodeon;
|
extern int WaitingForKey, chatmodeon;
|
||||||
extern constate_e ConsoleState;
|
extern constate_e ConsoleState;
|
||||||
|
|
||||||
static TMap<SDL_Keycode, BYTE> KeySymToDIK;
|
|
||||||
static bool DownState[SDL_NUM_SCANCODES];
|
static bool DownState[SDL_NUM_SCANCODES];
|
||||||
|
|
||||||
static SDL_Keycode DIKToKeySym[256] =
|
static const SDL_Keycode DIKToKeySym[256] =
|
||||||
{
|
{
|
||||||
0, SDLK_ESCAPE, '1', '2', '3', '4', '5', '6',
|
0, SDLK_ESCAPE, SDLK_1, SDLK_2, SDLK_3, SDLK_4, SDLK_5, SDLK_6,
|
||||||
'7', '8', '9', '0', '-', '=', SDLK_BACKSPACE, SDLK_TAB,
|
SDLK_7, SDLK_8, SDLK_9, SDLK_0,SDLK_MINUS, SDLK_EQUALS, SDLK_BACKSPACE, SDLK_TAB,
|
||||||
'q', 'w', 'e', 'r', 't', 'y', 'u', 'i',
|
SDLK_q, SDLK_w, SDLK_e, SDLK_r, SDLK_t, SDLK_y, SDLK_u, SDLK_i,
|
||||||
'o', 'p', '[', ']', SDLK_RETURN, SDLK_LCTRL, 'a', 's',
|
SDLK_o, SDLK_p, SDLK_LEFTBRACKET, SDLK_RIGHTBRACKET, SDLK_RETURN, SDLK_LCTRL, SDLK_a, SDLK_s,
|
||||||
'd', 'f', 'g', 'h', 'j', 'k', 'l', SDLK_SEMICOLON,
|
SDLK_d, SDLK_f, SDLK_g, SDLK_h, SDLK_j, SDLK_k, SDLK_l, SDLK_SEMICOLON,
|
||||||
'\'', '`', SDLK_LSHIFT, '\\', 'z', 'x', 'c', 'v',
|
SDLK_QUOTE, SDLK_BACKQUOTE, SDLK_LSHIFT, SDLK_BACKSLASH, SDLK_z, SDLK_x, SDLK_c, SDLK_v,
|
||||||
'b', 'n', 'm', ',', '.', '/', SDLK_RSHIFT, SDLK_KP_MULTIPLY,
|
SDLK_b, SDLK_n, SDLK_m, SDLK_COMMA, SDLK_PERIOD, SDLK_SLASH, SDLK_RSHIFT, SDLK_KP_MULTIPLY,
|
||||||
SDLK_LALT, ' ', SDLK_CAPSLOCK, SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5,
|
SDLK_LALT, SDLK_SPACE, SDLK_CAPSLOCK, SDLK_F1, SDLK_F2, SDLK_F3, SDLK_F4, SDLK_F5,
|
||||||
SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_NUMLOCKCLEAR, SDLK_SCROLLLOCK, SDLK_KP_7,
|
SDLK_F6, SDLK_F7, SDLK_F8, SDLK_F9, SDLK_F10, SDLK_NUMLOCKCLEAR, SDLK_SCROLLLOCK, SDLK_KP_7,
|
||||||
SDLK_KP_8, SDLK_KP_9, SDLK_KP_MINUS, SDLK_KP_4, SDLK_KP_5, SDLK_KP_6, SDLK_KP_PLUS, SDLK_KP_1,
|
SDLK_KP_8, SDLK_KP_9, SDLK_KP_MINUS, SDLK_KP_4, SDLK_KP_5, SDLK_KP_6, SDLK_KP_PLUS, SDLK_KP_1,
|
||||||
SDLK_KP_2, SDLK_KP_3, SDLK_KP_0, SDLK_KP_PERIOD, 0, 0, 0, SDLK_F11,
|
SDLK_KP_2, SDLK_KP_3, SDLK_KP_0, SDLK_KP_PERIOD, 0, 0, 0, SDLK_F11,
|
||||||
|
@ -62,24 +61,58 @@ static SDL_Keycode DIKToKeySym[256] =
|
||||||
0, 0, 0, 0, SDLK_KP_ENTER, SDLK_RCTRL, 0, 0,
|
0, 0, 0, 0, SDLK_KP_ENTER, SDLK_RCTRL, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, SDLK_KP_DIVIDE, 0, SDLK_SYSREQ,
|
0, 0, 0, SDLK_KP_COMMA, 0, SDLK_KP_DIVIDE, 0, SDLK_SYSREQ,
|
||||||
SDLK_RALT, 0, 0, 0, 0, 0, 0, 0,
|
SDLK_RALT, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, SDLK_PAUSE, 0, SDLK_HOME,
|
0, 0, 0, 0, 0, SDLK_PAUSE, 0, SDLK_HOME,
|
||||||
SDLK_UP, SDLK_PAGEUP, 0, SDLK_LEFT, 0, SDLK_RIGHT, 0, SDLK_END,
|
SDLK_UP, SDLK_PAGEUP, 0, SDLK_LEFT, 0, SDLK_RIGHT, 0, SDLK_END,
|
||||||
SDLK_DOWN, SDLK_PAGEDOWN, SDLK_INSERT, SDLK_DELETE, 0, 0, 0, 0,
|
SDLK_DOWN, SDLK_PAGEDOWN, SDLK_INSERT, SDLK_DELETE, 0, 0, 0, 0,
|
||||||
0, 0, 0, SDLK_LGUI, SDLK_RGUI, SDLK_MENU, SDLK_POWER, 0,
|
0, 0, 0, SDLK_LGUI, SDLK_RGUI, SDLK_MENU, SDLK_POWER, SDLK_SLEEP,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, SDLK_AC_SEARCH, SDLK_AC_BOOKMARKS, SDLK_AC_REFRESH,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
SDLK_AC_STOP, SDLK_AC_FORWARD, SDLK_AC_BACK, SDLK_COMPUTER, SDLK_MAIL, SDLK_MEDIASELECT, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0,
|
0, 0, 0, 0, 0, 0, 0, 0,
|
||||||
0, 0, 0, 0, 0, 0, 0, 0
|
0, 0, 0, 0, 0, 0, 0, 0
|
||||||
};
|
};
|
||||||
|
|
||||||
static void FlushDIKState (int low=0, int high=NUM_KEYS-1)
|
static const SDL_Scancode DIKToKeyScan[256] =
|
||||||
{
|
{
|
||||||
}
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_ESCAPE, SDL_SCANCODE_1, SDL_SCANCODE_2, SDL_SCANCODE_3, SDL_SCANCODE_4, SDL_SCANCODE_5, SDL_SCANCODE_6,
|
||||||
|
SDL_SCANCODE_7, SDL_SCANCODE_8, SDL_SCANCODE_9, SDL_SCANCODE_0 ,SDL_SCANCODE_MINUS, SDL_SCANCODE_EQUALS, SDL_SCANCODE_BACKSPACE, SDL_SCANCODE_TAB,
|
||||||
|
SDL_SCANCODE_Q, SDL_SCANCODE_W, SDL_SCANCODE_E, SDL_SCANCODE_R, SDL_SCANCODE_T, SDL_SCANCODE_Y, SDL_SCANCODE_U, SDL_SCANCODE_I,
|
||||||
|
SDL_SCANCODE_O, SDL_SCANCODE_P, SDL_SCANCODE_LEFTBRACKET, SDL_SCANCODE_RIGHTBRACKET, SDL_SCANCODE_RETURN, SDL_SCANCODE_LCTRL, SDL_SCANCODE_A, SDL_SCANCODE_S,
|
||||||
|
SDL_SCANCODE_D, SDL_SCANCODE_F, SDL_SCANCODE_G, SDL_SCANCODE_H, SDL_SCANCODE_J, SDL_SCANCODE_K, SDL_SCANCODE_L, SDL_SCANCODE_SEMICOLON,
|
||||||
|
SDL_SCANCODE_APOSTROPHE, SDL_SCANCODE_GRAVE, SDL_SCANCODE_LSHIFT, SDL_SCANCODE_BACKSLASH, SDL_SCANCODE_Z, SDL_SCANCODE_X, SDL_SCANCODE_C, SDL_SCANCODE_V,
|
||||||
|
SDL_SCANCODE_B, SDL_SCANCODE_N, SDL_SCANCODE_M, SDL_SCANCODE_COMMA, SDL_SCANCODE_PERIOD, SDL_SCANCODE_SLASH, SDL_SCANCODE_RSHIFT, SDL_SCANCODE_KP_MULTIPLY,
|
||||||
|
SDL_SCANCODE_LALT, SDL_SCANCODE_SPACE, SDL_SCANCODE_CAPSLOCK, SDL_SCANCODE_F1, SDL_SCANCODE_F2, SDL_SCANCODE_F3, SDL_SCANCODE_F4, SDL_SCANCODE_F5,
|
||||||
|
SDL_SCANCODE_F6, SDL_SCANCODE_F7, SDL_SCANCODE_F8, SDL_SCANCODE_F9, SDL_SCANCODE_F10, SDL_SCANCODE_NUMLOCKCLEAR, SDL_SCANCODE_SCROLLLOCK, SDL_SCANCODE_KP_7,
|
||||||
|
SDL_SCANCODE_KP_8, SDL_SCANCODE_KP_9, SDL_SCANCODE_KP_MINUS, SDL_SCANCODE_KP_4, SDL_SCANCODE_KP_5, SDL_SCANCODE_KP_6, SDL_SCANCODE_KP_PLUS, SDL_SCANCODE_KP_1,
|
||||||
|
SDL_SCANCODE_KP_2, SDL_SCANCODE_KP_3, SDL_SCANCODE_KP_0, SDL_SCANCODE_KP_PERIOD, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_F11,
|
||||||
|
SDL_SCANCODE_F12, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_F13, SDL_SCANCODE_F14, SDL_SCANCODE_F15, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_KP_EQUALS, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_KP_ENTER, SDL_SCANCODE_RCTRL, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_KP_COMMA, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_KP_DIVIDE, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_SYSREQ,
|
||||||
|
SDL_SCANCODE_RALT, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_PAUSE, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_HOME,
|
||||||
|
SDL_SCANCODE_UP, SDL_SCANCODE_PAGEUP, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_LEFT, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_RIGHT, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_END,
|
||||||
|
SDL_SCANCODE_DOWN, SDL_SCANCODE_PAGEDOWN, SDL_SCANCODE_INSERT, SDL_SCANCODE_DELETE, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_LGUI, SDL_SCANCODE_RGUI, SDL_SCANCODE_MENU, SDL_SCANCODE_POWER, SDL_SCANCODE_SLEEP,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_AC_SEARCH, SDL_SCANCODE_AC_BOOKMARKS, SDL_SCANCODE_AC_REFRESH,
|
||||||
|
SDL_SCANCODE_AC_STOP, SDL_SCANCODE_AC_FORWARD, SDL_SCANCODE_AC_BACK, SDL_SCANCODE_COMPUTER, SDL_SCANCODE_MAIL, SDL_SCANCODE_MEDIASELECT, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN,
|
||||||
|
SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN, SDL_SCANCODE_UNKNOWN
|
||||||
|
};
|
||||||
|
|
||||||
static void InitKeySymMap ()
|
static TMap<SDL_Keycode, BYTE> InitKeySymMap ()
|
||||||
{
|
{
|
||||||
|
TMap<SDL_Keycode, BYTE> KeySymToDIK;
|
||||||
|
|
||||||
for (int i = 0; i < 256; ++i)
|
for (int i = 0; i < 256; ++i)
|
||||||
{
|
{
|
||||||
KeySymToDIK[DIKToKeySym[i]] = i;
|
KeySymToDIK[DIKToKeySym[i]] = i;
|
||||||
|
@ -90,7 +123,23 @@ static void InitKeySymMap ()
|
||||||
KeySymToDIK[SDLK_RALT] = DIK_LMENU;
|
KeySymToDIK[SDLK_RALT] = DIK_LMENU;
|
||||||
// Depending on your Linux flavor, you may get SDLK_PRINT or SDLK_SYSREQ
|
// Depending on your Linux flavor, you may get SDLK_PRINT or SDLK_SYSREQ
|
||||||
KeySymToDIK[SDLK_PRINTSCREEN] = DIK_SYSRQ;
|
KeySymToDIK[SDLK_PRINTSCREEN] = DIK_SYSRQ;
|
||||||
|
|
||||||
|
return KeySymToDIK;
|
||||||
}
|
}
|
||||||
|
static const TMap<SDL_Keycode, BYTE> KeySymToDIK(InitKeySymMap());
|
||||||
|
|
||||||
|
static TMap<SDL_Scancode, BYTE> InitKeyScanMap ()
|
||||||
|
{
|
||||||
|
TMap<SDL_Scancode, BYTE> KeyScanToDIK;
|
||||||
|
|
||||||
|
for (int i = 0; i < 256; ++i)
|
||||||
|
{
|
||||||
|
KeyScanToDIK[DIKToKeyScan[i]] = i;
|
||||||
|
}
|
||||||
|
|
||||||
|
return KeyScanToDIK;
|
||||||
|
}
|
||||||
|
static const TMap<SDL_Scancode, BYTE> KeyScanToDIK(InitKeyScanMap());
|
||||||
|
|
||||||
static void I_CheckGUICapture ()
|
static void I_CheckGUICapture ()
|
||||||
{
|
{
|
||||||
|
@ -110,7 +159,6 @@ static void I_CheckGUICapture ()
|
||||||
GUICapture = wantCapt;
|
GUICapture = wantCapt;
|
||||||
if (wantCapt)
|
if (wantCapt)
|
||||||
{
|
{
|
||||||
FlushDIKState ();
|
|
||||||
memset (DownState, 0, sizeof(DownState));
|
memset (DownState, 0, sizeof(DownState));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -118,6 +166,8 @@ static void I_CheckGUICapture ()
|
||||||
|
|
||||||
void I_SetMouseCapture()
|
void I_SetMouseCapture()
|
||||||
{
|
{
|
||||||
|
// Clear out any mouse movement.
|
||||||
|
SDL_GetRelativeMouseState (NULL, NULL);
|
||||||
SDL_SetRelativeMouseMode (SDL_TRUE);
|
SDL_SetRelativeMouseMode (SDL_TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -193,7 +243,7 @@ static bool inGame()
|
||||||
|
|
||||||
static void I_CheckNativeMouse ()
|
static void I_CheckNativeMouse ()
|
||||||
{
|
{
|
||||||
bool focus = SDL_GetMouseFocus() != NULL;
|
bool focus = SDL_GetKeyboardFocus() != NULL;
|
||||||
bool fs = screen->IsFullscreen();
|
bool fs = screen->IsFullscreen();
|
||||||
|
|
||||||
bool wantNative = !focus || (!use_mouse || GUICapture || paused || demoplayback || !inGame());
|
bool wantNative = !focus || (!use_mouse || GUICapture || paused || demoplayback || !inGame());
|
||||||
|
@ -202,11 +252,10 @@ static void I_CheckNativeMouse ()
|
||||||
{
|
{
|
||||||
NativeMouse = wantNative;
|
NativeMouse = wantNative;
|
||||||
SDL_ShowCursor (wantNative);
|
SDL_ShowCursor (wantNative);
|
||||||
SDL_SetRelativeMouseMode (wantNative ? SDL_FALSE : SDL_TRUE);
|
|
||||||
if (wantNative)
|
if (wantNative)
|
||||||
{
|
I_ReleaseMouseCapture ();
|
||||||
FlushDIKState (KEY_MOUSE1, KEY_MOUSE8);
|
else
|
||||||
}
|
I_SetMouseCapture ();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -226,10 +275,6 @@ void MessagePump (const SDL_Event &sev)
|
||||||
{
|
{
|
||||||
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
case SDL_WINDOWEVENT_FOCUS_GAINED:
|
||||||
case SDL_WINDOWEVENT_FOCUS_LOST:
|
case SDL_WINDOWEVENT_FOCUS_LOST:
|
||||||
if (sev.window.event == SDL_WINDOWEVENT_FOCUS_LOST)
|
|
||||||
{ // kill focus
|
|
||||||
FlushDIKState ();
|
|
||||||
}
|
|
||||||
S_SetSoundPaused(sev.window.event == SDL_WINDOWEVENT_FOCUS_GAINED);
|
S_SetSoundPaused(sev.window.event == SDL_WINDOWEVENT_FOCUS_GAINED);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -309,7 +354,16 @@ void MessagePump (const SDL_Event &sev)
|
||||||
if (!GUICapture)
|
if (!GUICapture)
|
||||||
{
|
{
|
||||||
event.type = sev.type == SDL_KEYDOWN ? EV_KeyDown : EV_KeyUp;
|
event.type = sev.type == SDL_KEYDOWN ? EV_KeyDown : EV_KeyUp;
|
||||||
event.data1 = KeySymToDIK[sev.key.keysym.sym];
|
|
||||||
|
// Try to look up our key mapped key for conversion to DirectInput.
|
||||||
|
// If that fails, then we'll do a lookup against the scan code,
|
||||||
|
// which may not return the right key, but at least the key should
|
||||||
|
// work in the game.
|
||||||
|
if (const BYTE *dik = KeySymToDIK.CheckKey (sev.key.keysym.sym))
|
||||||
|
event.data1 = *dik;
|
||||||
|
else if (const BYTE *dik = KeyScanToDIK.CheckKey (sev.key.keysym.scancode))
|
||||||
|
event.data1 = *dik;
|
||||||
|
|
||||||
if (event.data1)
|
if (event.data1)
|
||||||
{
|
{
|
||||||
if (sev.key.keysym.sym < 256)
|
if (sev.key.keysym.sym < 256)
|
||||||
|
@ -327,20 +381,17 @@ void MessagePump (const SDL_Event &sev)
|
||||||
((sev.key.keysym.mod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
((sev.key.keysym.mod & KMOD_CTRL) ? GKM_CTRL : 0) |
|
||||||
((sev.key.keysym.mod & KMOD_ALT) ? GKM_ALT : 0);
|
((sev.key.keysym.mod & KMOD_ALT) ? GKM_ALT : 0);
|
||||||
|
|
||||||
//if (sev.key.keysym.sym < SDLK_LAST)
|
if (event.subtype == EV_GUI_KeyDown)
|
||||||
{
|
{
|
||||||
if (event.subtype == EV_GUI_KeyDown)
|
if (DownState[sev.key.keysym.scancode])
|
||||||
{
|
{
|
||||||
if (DownState[sev.key.keysym.scancode])
|
event.subtype = EV_GUI_KeyRepeat;
|
||||||
{
|
|
||||||
event.subtype = EV_GUI_KeyRepeat;
|
|
||||||
}
|
|
||||||
DownState[sev.key.keysym.scancode] = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
DownState[sev.key.keysym.scancode] = 0;
|
|
||||||
}
|
}
|
||||||
|
DownState[sev.key.keysym.scancode] = 1;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
DownState[sev.key.keysym.scancode] = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (sev.key.keysym.sym)
|
switch (sev.key.keysym.sym)
|
||||||
|
@ -430,10 +481,5 @@ void I_StartTic ()
|
||||||
void I_ProcessJoysticks ();
|
void I_ProcessJoysticks ();
|
||||||
void I_StartFrame ()
|
void I_StartFrame ()
|
||||||
{
|
{
|
||||||
if (KeySymToDIK[SDLK_BACKSPACE] == 0)
|
|
||||||
{
|
|
||||||
InitKeySymMap ();
|
|
||||||
}
|
|
||||||
|
|
||||||
I_ProcessJoysticks();
|
I_ProcessJoysticks();
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,10 +85,6 @@ void Mac_I_FatalError(const char* errortext);
|
||||||
|
|
||||||
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
// EXTERNAL DATA DECLARATIONS ----------------------------------------------
|
||||||
|
|
||||||
#ifdef USE_XCURSOR
|
|
||||||
extern bool UseXCursor;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
// PUBLIC DATA DEFINITIONS -------------------------------------------------
|
||||||
|
|
||||||
#ifndef NO_GTK
|
#ifndef NO_GTK
|
||||||
|
@ -279,9 +275,6 @@ int main (int argc, char **argv)
|
||||||
atterm (SDL_Quit);
|
atterm (SDL_Quit);
|
||||||
|
|
||||||
printf("Using video driver %s\n", SDL_GetCurrentVideoDriver());
|
printf("Using video driver %s\n", SDL_GetCurrentVideoDriver());
|
||||||
#ifdef USE_XCURSOR
|
|
||||||
UseXCursor = (strcmp(SDL_GetCurrentVideoDriver(), "x11") == 0);
|
|
||||||
#endif
|
|
||||||
printf("\n");
|
printf("\n");
|
||||||
|
|
||||||
#ifdef __APPLE__
|
#ifdef __APPLE__
|
||||||
|
|
|
@ -361,7 +361,8 @@ SDLFB::~SDLFB ()
|
||||||
if (Texture)
|
if (Texture)
|
||||||
SDL_DestroyTexture (Texture);
|
SDL_DestroyTexture (Texture);
|
||||||
SDL_DestroyRenderer (Renderer);
|
SDL_DestroyRenderer (Renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
SDL_DestroyWindow (Screen);
|
SDL_DestroyWindow (Screen);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -657,6 +658,6 @@ ADD_STAT (blit)
|
||||||
{
|
{
|
||||||
FString out;
|
FString out;
|
||||||
out.Format ("blit=%04.1f ms flip=%04.1f ms",
|
out.Format ("blit=%04.1f ms flip=%04.1f ms",
|
||||||
BlitCycles.Time() * 1e-3, SDLFlipCycles.TimeMS());
|
BlitCycles.TimeMS(), SDLFlipCycles.TimeMS());
|
||||||
return out;
|
return out;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue