Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
Menu
Open sidebar
fengzch-das
OIS
Commits
c02cf281
Commit
c02cf281
authored
Nov 06, 2015
by
TheOnlyJoey
Browse files
Introduced getAsKeyCode (Currently just for linux) to be able to map string to keycode
parent
a3f509e2
Changes
5
Hide whitespace changes
Inline
Side-by-side
Showing
5 changed files
with
459 additions
and
427 deletions
+459
-427
includes/OISKeyboard.h
includes/OISKeyboard.h
+12
-0
includes/linux/LinuxKeyboard.h
includes/linux/LinuxKeyboard.h
+3
-0
includes/mac/MacKeyboard.h
includes/mac/MacKeyboard.h
+1
-0
includes/win32/Win32KeyBoard.h
includes/win32/Win32KeyBoard.h
+3
-0
src/linux/LinuxKeyboard.cpp
src/linux/LinuxKeyboard.cpp
+440
-427
No files found.
includes/OISKeyboard.h
View file @
c02cf281
...
@@ -281,6 +281,18 @@ namespace OIS
...
@@ -281,6 +281,18 @@ namespace OIS
Alt
=
0x0000100
Alt
=
0x0000100
};
};
/**
@remarks
Translates string to KeyCode representation.
For example, "Enter" will be KC_ENTER - Locale
specific of course.
@param str
string to convert
@returns
The matching KeyCode
*/
virtual
OIS
::
KeyCode
getAsKeyCode
(
std
::
string
str
)
=
0
;
/**
/**
@remarks
@remarks
Check modifier status
Check modifier status
...
...
includes/linux/LinuxKeyboard.h
View file @
c02cf281
...
@@ -42,6 +42,9 @@ namespace OIS
...
@@ -42,6 +42,9 @@ namespace OIS
/** @copydoc Keyboard::getAsString */
/** @copydoc Keyboard::getAsString */
virtual
const
std
::
string
&
getAsString
(
KeyCode
kc
);
virtual
const
std
::
string
&
getAsString
(
KeyCode
kc
);
/** @copydoc Keyboard::getAsKeyCode */
virtual
OIS
::
KeyCode
getAsKeyCode
(
std
::
string
str
);
/** @copydoc Keyboard::copyKeyStates */
/** @copydoc Keyboard::copyKeyStates */
virtual
void
copyKeyStates
(
char
keys
[
256
]
)
const
;
virtual
void
copyKeyStates
(
char
keys
[
256
]
)
const
;
...
...
includes/mac/MacKeyboard.h
View file @
c02cf281
...
@@ -54,6 +54,7 @@ namespace OIS
...
@@ -54,6 +54,7 @@ namespace OIS
// Returns a description of the given key
// Returns a description of the given key
virtual
std
::
string
&
getAsString
(
KeyCode
key
);
virtual
std
::
string
&
getAsString
(
KeyCode
key
);
virtual
KeyCode
getAsKeyCode
(
std
::
string
str
)
{
/*TODO: Implement OS version*/
;}
virtual
Interface
*
queryInterface
(
Interface
::
IType
type
)
{
return
0
;
}
virtual
Interface
*
queryInterface
(
Interface
::
IType
type
)
{
return
0
;
}
...
...
includes/win32/Win32KeyBoard.h
View file @
c02cf281
...
@@ -50,6 +50,9 @@ namespace OIS
...
@@ -50,6 +50,9 @@ namespace OIS
/** @copydoc Keyboard::getAsString */
/** @copydoc Keyboard::getAsString */
virtual
const
std
::
string
&
getAsString
(
KeyCode
kc
);
virtual
const
std
::
string
&
getAsString
(
KeyCode
kc
);
/** @copydoc Keyboard::getAsKeyCode */
virtual
KeyCode
getAsKeyCode
(
std
::
string
str
)
{
/*TODO: Implement OS version*/
;}
/** @copydoc Keyboard::copyKeyStates */
/** @copydoc Keyboard::copyKeyStates */
virtual
void
copyKeyStates
(
char
keys
[
256
])
const
;
virtual
void
copyKeyStates
(
char
keys
[
256
])
const
;
...
...
src/linux/LinuxKeyboard.cpp
View file @
c02cf281
/*
/*
The zlib/libpng License
The zlib/libpng License
Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)
Copyright (c) 2005-2007 Phillip Castaneda (pjcast -- www.wreckedgames.com)
This software is provided 'as-is', without any express or implied warranty. In no event will
This software is provided 'as-is', without any express or implied warranty. In no event will
the authors be held liable for any damages arising from the use of this software.
the authors be held liable for any damages arising from the use of this software.
Permission is granted to anyone to use this software for any purpose, including commercial
Permission is granted to anyone to use this software for any purpose, including commercial
applications, and to alter it and redistribute it freely, subject to the following
applications, and to alter it and redistribute it freely, subject to the following
restrictions:
restrictions:
1. The origin of this software must not be misrepresented; you must not claim that
1. The origin of this software must not be misrepresented; you must not claim that
you wrote the original software. If you use this software in a product,
you wrote the original software. If you use this software in a product,
an acknowledgment in the product documentation would be appreciated but is
an acknowledgment in the product documentation would be appreciated but is
not required.
not required.
2. Altered source versions must be plainly marked as such, and must not be
2. Altered source versions must be plainly marked as such, and must not be
misrepresented as being the original software.
misrepresented as being the original software.
3. This notice may not be removed or altered from any source distribution.
3. This notice may not be removed or altered from any source distribution.
*/
*/
#include "linux/LinuxInputManager.h"
#include "linux/LinuxInputManager.h"
#include "linux/LinuxKeyboard.h"
#include "linux/LinuxKeyboard.h"
#include "OISException.h"
#include "OISException.h"
#include "OISEvents.h"
#include "OISEvents.h"
#include <X11/keysym.h>
#include <X11/keysym.h>
#include <X11/Xutil.h>
#include <X11/Xutil.h>
#include <cstring>
#include <cstring>
using
namespace
OIS
;
using
namespace
OIS
;
#include <iostream>
#include <iostream>
//-------------------------------------------------------------------//
//-------------------------------------------------------------------//
LinuxKeyboard
::
LinuxKeyboard
(
InputManager
*
creator
,
bool
buffered
,
bool
grab
)
LinuxKeyboard
::
LinuxKeyboard
(
InputManager
*
creator
,
bool
buffered
,
bool
grab
)
:
Keyboard
(
creator
->
inputSystemName
(),
buffered
,
0
,
creator
)
:
Keyboard
(
creator
->
inputSystemName
(),
buffered
,
0
,
creator
)
{
{
setlocale
(
LC_CTYPE
,
""
);
//Set the locale to (hopefully) the users LANG UTF-8 Env var
setlocale
(
LC_CTYPE
,
""
);
//Set the locale to (hopefully) the users LANG UTF-8 Env var
display
=
0
;
display
=
0
;
window
=
0
;
window
=
0
;
grabKeyboard
=
grab
;
grabKeyboard
=
grab
;
keyFocusLost
=
false
;
keyFocusLost
=
false
;
//X Key Map to KeyCode
//X Key Map to KeyCode
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_1
,
KC_1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_1
,
KC_1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_2
,
KC_2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_2
,
KC_2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_3
,
KC_3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_3
,
KC_3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_4
,
KC_4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_4
,
KC_4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_5
,
KC_5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_5
,
KC_5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_6
,
KC_6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_6
,
KC_6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_7
,
KC_7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_7
,
KC_7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_8
,
KC_8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_8
,
KC_8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_9
,
KC_9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_9
,
KC_9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_0
,
KC_0
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_0
,
KC_0
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_BackSpace
,
KC_BACK
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_BackSpace
,
KC_BACK
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_minus
,
KC_MINUS
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_minus
,
KC_MINUS
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_equal
,
KC_EQUALS
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_equal
,
KC_EQUALS
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_space
,
KC_SPACE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_space
,
KC_SPACE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_comma
,
KC_COMMA
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_comma
,
KC_COMMA
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_period
,
KC_PERIOD
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_period
,
KC_PERIOD
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_backslash
,
KC_BACKSLASH
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_backslash
,
KC_BACKSLASH
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_slash
,
KC_SLASH
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_slash
,
KC_SLASH
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_bracketleft
,
KC_LBRACKET
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_bracketleft
,
KC_LBRACKET
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_bracketright
,
KC_RBRACKET
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_bracketright
,
KC_RBRACKET
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Escape
,
KC_ESCAPE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Escape
,
KC_ESCAPE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Caps_Lock
,
KC_CAPITAL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Caps_Lock
,
KC_CAPITAL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Tab
,
KC_TAB
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Tab
,
KC_TAB
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Return
,
KC_RETURN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Return
,
KC_RETURN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Control_L
,
KC_LCONTROL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Control_L
,
KC_LCONTROL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Control_R
,
KC_RCONTROL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Control_R
,
KC_RCONTROL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_colon
,
KC_COLON
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_colon
,
KC_COLON
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_semicolon
,
KC_SEMICOLON
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_semicolon
,
KC_SEMICOLON
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_apostrophe
,
KC_APOSTROPHE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_apostrophe
,
KC_APOSTROPHE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_grave
,
KC_GRAVE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_grave
,
KC_GRAVE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_b
,
KC_B
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_b
,
KC_B
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_a
,
KC_A
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_a
,
KC_A
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_c
,
KC_C
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_c
,
KC_C
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_d
,
KC_D
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_d
,
KC_D
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_e
,
KC_E
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_e
,
KC_E
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_f
,
KC_F
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_f
,
KC_F
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_g
,
KC_G
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_g
,
KC_G
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_h
,
KC_H
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_h
,
KC_H
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_i
,
KC_I
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_i
,
KC_I
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_j
,
KC_J
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_j
,
KC_J
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_k
,
KC_K
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_k
,
KC_K
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_l
,
KC_L
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_l
,
KC_L
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_m
,
KC_M
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_m
,
KC_M
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_n
,
KC_N
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_n
,
KC_N
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_o
,
KC_O
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_o
,
KC_O
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_p
,
KC_P
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_p
,
KC_P
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_q
,
KC_Q
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_q
,
KC_Q
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_r
,
KC_R
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_r
,
KC_R
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_s
,
KC_S
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_s
,
KC_S
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_t
,
KC_T
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_t
,
KC_T
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_u
,
KC_U
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_u
,
KC_U
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_v
,
KC_V
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_v
,
KC_V
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_w
,
KC_W
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_w
,
KC_W
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_x
,
KC_X
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_x
,
KC_X
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_y
,
KC_Y
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_y
,
KC_Y
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_z
,
KC_Z
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_z
,
KC_Z
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F1
,
KC_F1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F1
,
KC_F1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F2
,
KC_F2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F2
,
KC_F2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F3
,
KC_F3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F3
,
KC_F3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F4
,
KC_F4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F4
,
KC_F4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F5
,
KC_F5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F5
,
KC_F5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F6
,
KC_F6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F6
,
KC_F6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F7
,
KC_F7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F7
,
KC_F7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F8
,
KC_F8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F8
,
KC_F8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F9
,
KC_F9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F9
,
KC_F9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F10
,
KC_F10
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F10
,
KC_F10
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F11
,
KC_F11
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F11
,
KC_F11
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F12
,
KC_F12
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F12
,
KC_F12
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F13
,
KC_F13
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F13
,
KC_F13
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F14
,
KC_F14
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F14
,
KC_F14
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F15
,
KC_F15
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_F15
,
KC_F15
));
//Keypad
//Keypad
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_0
,
KC_NUMPAD0
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_0
,
KC_NUMPAD0
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_1
,
KC_NUMPAD1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_1
,
KC_NUMPAD1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_2
,
KC_NUMPAD2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_2
,
KC_NUMPAD2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_3
,
KC_NUMPAD3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_3
,
KC_NUMPAD3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_4
,
KC_NUMPAD4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_4
,
KC_NUMPAD4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_5
,
KC_NUMPAD5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_5
,
KC_NUMPAD5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_6
,
KC_NUMPAD6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_6
,
KC_NUMPAD6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_7
,
KC_NUMPAD7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_7
,
KC_NUMPAD7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_8
,
KC_NUMPAD8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_8
,
KC_NUMPAD8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_9
,
KC_NUMPAD9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_9
,
KC_NUMPAD9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Add
,
KC_ADD
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Add
,
KC_ADD
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Subtract
,
KC_SUBTRACT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Subtract
,
KC_SUBTRACT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Decimal
,
KC_DECIMAL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Decimal
,
KC_DECIMAL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Equal
,
KC_NUMPADEQUALS
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Equal
,
KC_NUMPADEQUALS
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Divide
,
KC_DIVIDE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Divide
,
KC_DIVIDE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Multiply
,
KC_MULTIPLY
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Multiply
,
KC_MULTIPLY
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Enter
,
KC_NUMPADENTER
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Enter
,
KC_NUMPADENTER
));
//Keypad with numlock off
//Keypad with numlock off
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Home
,
KC_NUMPAD7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Home
,
KC_NUMPAD7
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Up
,
KC_NUMPAD8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Up
,
KC_NUMPAD8
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Page_Up
,
KC_NUMPAD9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Page_Up
,
KC_NUMPAD9
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Left
,
KC_NUMPAD4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Left
,
KC_NUMPAD4
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Begin
,
KC_NUMPAD5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Begin
,
KC_NUMPAD5
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Right
,
KC_NUMPAD6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Right
,
KC_NUMPAD6
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_End
,
KC_NUMPAD1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_End
,
KC_NUMPAD1
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Down
,
KC_NUMPAD2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Down
,
KC_NUMPAD2
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Page_Down
,
KC_NUMPAD3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Page_Down
,
KC_NUMPAD3
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Insert
,
KC_NUMPAD0
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Insert
,
KC_NUMPAD0
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Delete
,
KC_DECIMAL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_KP_Delete
,
KC_DECIMAL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Up
,
KC_UP
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Up
,
KC_UP
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Down
,
KC_DOWN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Down
,
KC_DOWN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Left
,
KC_LEFT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Left
,
KC_LEFT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Right
,
KC_RIGHT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Right
,
KC_RIGHT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Page_Up
,
KC_PGUP
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Page_Up
,
KC_PGUP
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Page_Down
,
KC_PGDOWN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Page_Down
,
KC_PGDOWN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Home
,
KC_HOME
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Home
,
KC_HOME
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_End
,
KC_END
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_End
,
KC_END
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Num_Lock
,
KC_NUMLOCK
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Num_Lock
,
KC_NUMLOCK
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Print
,
KC_SYSRQ
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Print
,
KC_SYSRQ
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Scroll_Lock
,
KC_SCROLL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Scroll_Lock
,
KC_SCROLL
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Pause
,
KC_PAUSE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Pause
,
KC_PAUSE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Shift_R
,
KC_RSHIFT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Shift_R
,
KC_RSHIFT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Shift_L
,
KC_LSHIFT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Shift_L
,
KC_LSHIFT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Alt_R
,
KC_RMENU
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Alt_R
,
KC_RMENU
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Alt_L
,
KC_LMENU
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Alt_L
,
KC_LMENU
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Insert
,
KC_INSERT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Insert
,
KC_INSERT
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Delete
,
KC_DELETE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Delete
,
KC_DELETE
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Super_L
,
KC_LWIN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Super_L
,
KC_LWIN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Super_R
,
KC_RWIN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Super_R
,
KC_RWIN
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Menu
,
KC_APPS
));
keyConversion
.
insert
(
XtoOIS_KeyMap
::
value_type
(
XK_Menu
,
KC_APPS
));
static_cast
<
LinuxInputManager
*>
(
mCreator
)
->
_setKeyboardUsed
(
true
);
static_cast
<
LinuxInputManager
*>
(
mCreator
)
->
_setKeyboardUsed
(
true
);
}
}
//-------------------------------------------------------------------//
//-------------------------------------------------------------------//
void
LinuxKeyboard
::
_initialize
()
void
LinuxKeyboard
::
_initialize
()
{
{
//Clear our keyboard state buffer
//Clear our keyboard state buffer
memset
(
&
KeyBuffer
,
0
,
256
);
memset
(
&
KeyBuffer
,
0
,
256
);
mModifiers
=
0
;
mModifiers
=
0
;
if
(
display
)
XCloseDisplay
(
display
);
if
(
display
)
XCloseDisplay
(
display
);
display
=
0
;
display
=
0
;
window
=
static_cast
<
LinuxInputManager
*>
(
mCreator
)
->
_getWindow
();
window
=
static_cast
<
LinuxInputManager
*>
(
mCreator
)
->
_getWindow
();
//Create our local X mListener connection
//Create our local X mListener connection
if
(
!
(
display
=
XOpenDisplay
(
0
))
)
if
(
!
(
display
=
XOpenDisplay
(
0
))
)
OIS_EXCEPT
(
E_General
,
"LinuxKeyboard::_initialize >> Error opening X!"
);
OIS_EXCEPT
(
E_General
,
"LinuxKeyboard::_initialize >> Error opening X!"
);
//Set it to recieve Input events
//Set it to recieve Input events
if
(
XSelectInput
(
display
,
window
,
KeyPressMask
|
KeyReleaseMask
)
==
BadWindow
)
if
(
XSelectInput
(
display
,
window
,
KeyPressMask
|
KeyReleaseMask
)
==
BadWindow
)
OIS_EXCEPT
(
E_General
,
"LinuxKeyboard::_initialize: X error!"
);
OIS_EXCEPT
(
E_General
,
"LinuxKeyboard::_initialize: X error!"
);
if
(
grabKeyboard
)
if
(
grabKeyboard
)
XGrabKeyboard
(
display
,
window
,
True
,
GrabModeAsync
,
GrabModeAsync
,
CurrentTime
);
XGrabKeyboard
(
display
,
window
,
True
,
GrabModeAsync
,
GrabModeAsync
,
CurrentTime
);
keyFocusLost
=
false
;
keyFocusLost
=
false
;
}
}
//-------------------------------------------------------------------//
//-------------------------------------------------------------------//
LinuxKeyboard
::~
LinuxKeyboard
()
LinuxKeyboard
::~
LinuxKeyboard
()
{
{
if
(
display
)
if
(
display
)
{
{
if
(
grabKeyboard
)
if
(
grabKeyboard
)
XUngrabKeyboard
(
display
,
CurrentTime
);
XUngrabKeyboard
(
display
,
CurrentTime
);
XCloseDisplay
(
display
);
XCloseDisplay
(
display
);
}
}
static_cast
<
LinuxInputManager
*>
(
mCreator
)
->
_setKeyboardUsed
(
true
);
static_cast
<
LinuxInputManager
*>
(
mCreator
)
->
_setKeyboardUsed
(
true
);
}
}
//-------------------------------------------------------------------//
//-------------------------------------------------------------------//
unsigned
int
UTF8ToUTF32
(
unsigned
char
*
buf
)
unsigned
int
UTF8ToUTF32
(
unsigned
char
*
buf
)
{
{
unsigned
char
&
FirstChar
=
buf
[
0
];
unsigned
char
&
FirstChar
=
buf
[
0
];
if
(
FirstChar
<
128
)
if
(
FirstChar
<
128
)
return
FirstChar
;
return
FirstChar
;
unsigned
int
val
=
0
;
unsigned
int
val
=
0
;
unsigned
int
len
=
0
;
unsigned
int
len
=
0
;
if
((
FirstChar
&
0xE0
)
==
0xC0
)
//2 Chars
if
((
FirstChar
&
0xE0
)
==
0xC0
)
//2 Chars
{
{
len
=
2
;
len
=
2
;
val
=
FirstChar
&
0x1F
;
val
=
FirstChar
&
0x1F
;
}
}
else
if
((
FirstChar
&
0xF0
)
==
0xE0
)
//3 Chars
else
if
((
FirstChar
&
0xF0
)
==
0xE0
)
//3 Chars
{
{
len
=
3
;
len
=
3
;
val
=
FirstChar
&
0x0F
;
val
=
FirstChar
&
0x0F
;
}
}
else
if
((
FirstChar
&
0xF8
)
==
0xF0
)
//4 Chars
else
if
((
FirstChar
&
0xF8
)
==
0xF0
)
//4 Chars
{
{
len
=
4
;
len
=
4
;
val
=
FirstChar
&
0x07
;
val
=
FirstChar
&
0x07
;
}
}
else
if
((
FirstChar
&
0xFC
)
==
0xF8
)
//5 Chars
else
if
((
FirstChar
&
0xFC
)
==
0xF8
)
//5 Chars
{
{
len
=
5
;
len
=
5
;
val
=
FirstChar
&
0x03
;
val
=
FirstChar
&
0x03
;
}
}
else
// if((FirstChar & 0xFE) == 0xFC) //6 Chars
else
// if((FirstChar & 0xFE) == 0xFC) //6 Chars
{
{
len
=
6
;
len
=
6
;
val
=
FirstChar
&
0x01
;
val
=
FirstChar
&
0x01
;
}
}
for
(
int
i
=
1
;
i
<
len
;
i
++
)
for
(
int
i
=
1
;
i
<
len
;
i
++
)
val
=
(
val
<<
6
)
|
(
buf
[
i
]
&
0x3F
);
val
=
(
val
<<
6
)
|
(
buf
[
i
]
&
0x3F
);
return
val
;
return
val
;
}
}
//-------------------------------------------------------------------//
//-------------------------------------------------------------------//
bool
LinuxKeyboard
::
isKeyDown
(
KeyCode
key
)
const
bool
LinuxKeyboard
::
isKeyDown
(
KeyCode
key
)
const
{
{
return
(
KeyBuffer
[
key
]);
return
(
KeyBuffer
[
key
]);
}
}
//-------------------------------------------------------------------//
//-------------------------------------------------------------------//
void
LinuxKeyboard
::
capture
()
void
LinuxKeyboard
::
capture
()
{
{
KeySym
key
;
KeySym
key
;
XEvent
event
;
XEvent
event
;
LinuxInputManager
*
linMan
=
static_cast
<
LinuxInputManager
*>
(
mCreator
);
LinuxInputManager
*
linMan
=
static_cast
<
LinuxInputManager
*>
(
mCreator
);
while
(
XPending
(
display
)
>
0
)
while
(
XPending
(
display
)
>
0
)
{
{
XNextEvent
(
display
,
&
event
);
XNextEvent
(
display
,
&
event
);
if
(
KeyPress
==
event
.
type
)
{
if
(
KeyPress
==
event
.
type
)
unsigned
int
character
=
0
;
{
unsigned
int
character
=
0
;
if
(
mTextMode
!=
Off
)
{
if
(
mTextMode
!=
Off
)
unsigned
char
buffer
[
6
]
=
{
0
,
0
,
0
,
0
,
0
,
0
};
{
XLookupString
(
&
event
.
xkey
,
(
char
*
)
buffer
,
6
,
&
key
,
0
);
unsigned
char
buffer
[
6
]
=
{
0
,
0
,
0
,
0
,
0
,
0
};
XLookupString
(
&
event
.
xkey
,
(
char
*
)
buffer
,
6
,
&
key
,
0
);
if
(
mTextMode
==
Unicode
)
character
=
UTF8ToUTF32
(
buffer
);
if
(
mTextMode
==
Unicode
)
else
if
(
mTextMode
==
Ascii
)
character
=
UTF8ToUTF32
(
buffer
);
character
=
buffer
[
0
];
else
if
(
mTextMode
==
Ascii
)
}
character
=
buffer
[
0
];
}
//Mask out the modifier states X11 sets and read again
event
.
xkey
.
state
&=
~
ShiftMask
;
//Mask out the modifier states X11 sets and read again
event
.
xkey
.
state
&=
~
LockMask
;
event
.
xkey
.
state
&=
~
ShiftMask
;
XLookupString
(
&
event
.
xkey
,
0
,
0
,
&
key
,
0
);
event
.
xkey
.
state
&=
~
LockMask
;
XLookupString
(
&
event
.
xkey
,
0
,
0
,
&
key
,
0
);
_injectKeyDown
(
key
,
character
);
_injectKeyDown
(
key
,
character
);
//Just printing out some debugging info.. to verify all chars are mapped
//std::cout << "KEY PRESSED X=" << event.xkey.keycode;
//Just printing out some debugging info.. to verify all chars are mapped
//std::cout << "\n KeySym=" << key << std::endl;
//std::cout << "KEY PRESSED X=" << event.xkey.keycode;
//std::cout << "\n KeySym=" << key << std::endl;
//Check for Alt-Tab
if
(
event
.
xkey
.
state
&
Mod1Mask
&&
key
==
XK_Tab
)
//Check for Alt-Tab
linMan
->
_setGrabState
(
false
);
if
(
event
.
xkey
.
state
&
Mod1Mask
&&
key
==
XK_Tab
)
}
linMan
->
_setGrabState
(
false
);
else
if
(
KeyRelease
==
event
.
type
)
}
else
if
(
KeyRelease
==
event
.
type
)
{
{
if
(
!
_isKeyRepeat
(
event
))
if
(
!
_isKeyRepeat
(
event
))
{
{
//Mask out the modifier states X sets.. or we will get improper values
//Mask out the modifier states X sets.. or we will get improper values
event
.
xkey
.
state
&=
~
ShiftMask
;
event
.
xkey
.
state
&=
~
ShiftMask
;
event
.
xkey
.
state
&=
~
LockMask
;
event
.
xkey
.
state
&=
~
LockMask
;
XLookupString
(
&
event
.
xkey
,
NULL
,
0
,
&
key
,
NULL
);
XLookupString
(
&
event
.
xkey
,
NULL
,
0
,
&
key
,
NULL
);
_injectKeyUp
(
key
);
}
_injectKeyUp
(
key
);
}
}
}
}
}
//If grabbing mode is on.. Handle focus lost/gained via Alt-Tab and mouse clicks
if
(
grabKeyboard
)
//If grabbing mode is on.. Handle focus lost/gained via Alt-Tab and mouse clicks
{
if
(
grabKeyboard
)
if
(
linMan
->
_getGrabState
()
==
false
)
{
{
if
(
linMan
->
_getGrabState
()
==
false
)
// are no longer grabbing
{
if
(
keyFocusLost
==
false
)
// are no longer grabbing
{
if
(
keyFocusLost
==
false
)
//UnGrab KeyBoard
{
XUngrabKeyboard
(
display
,
CurrentTime
);
//UnGrab KeyBoard
keyFocusLost
=
true
;
XUngrabKeyboard
(
display
,
CurrentTime
);
}
keyFocusLost
=
true
;
}
}
else
}
{
else
//We are grabbing - and regained focus
{
if
(
keyFocusLost
==
true
)
//We are grabbing - and regained focus
{
if
(
keyFocusLost
==
true
)
//ReGrab KeyBoard
{
XGrabKeyboard
(
display
,
window
,
True
,
GrabModeAsync
,
GrabModeAsync
,
CurrentTime
);
//ReGrab KeyBoard
keyFocusLost
=
false
;
XGrabKeyboard
(
display
,
window
,
True
,
GrabModeAsync
,
GrabModeAsync
,
CurrentTime
);
}
keyFocusLost
=
false
;
}
}
}
}
}
}
}
//-------------------------------------------------------------------//
void
LinuxKeyboard
::
setBuffered
(
bool
buffered
)
//-------------------------------------------------------------------//
{
void
LinuxKeyboard
::
setBuffered
(
bool
buffered
)
mBuffered
=
buffered
;
{
}
mBuffered
=
buffered
;
}
//-------------------------------------------------------------------//
bool
LinuxKeyboard
::
_injectKeyDown
(
KeySym
key
,
int
text
)
//-------------------------------------------------------------------//
{
bool
LinuxKeyboard
::
_injectKeyDown
(
KeySym
key
,
int
text
)
KeyCode
kc
=
keyConversion
[
key
];
{
KeyBuffer
[
kc
]
=
1
;
KeyCode
kc
=
keyConversion
[
key
];
KeyBuffer
[
kc
]
=
1
;
//Turn on modifier flags
if
(
kc
==
KC_LCONTROL
||
kc
==
KC_RCONTROL
)
//Turn on modifier flags
mModifiers
|=
Ctrl
;
if
(
kc
==
KC_LCONTROL
||
kc
==
KC_RCONTROL
)
else
if
(
kc
==
KC_LSHIFT
||
kc
==
KC_RSHIFT
)
mModifiers
|=
Ctrl
;
mModifiers
|=
Shift
;
else
if
(
kc
==
KC_LSHIFT
||
kc
==
KC_RSHIFT
)
else
if
(
kc
==
KC_LMENU
||
kc
==
KC_RMENU
)
mModifiers
|=
Shift
;
mModifiers
|=
Alt
;
else
if
(
kc
==
KC_LMENU
||
kc
==
KC_RMENU
)
mModifiers
|=
Alt
;
if
(
mBuffered
&&
mListener
)
return
mListener
->
keyPressed
(
KeyEvent
(
this
,
kc
,
text
));
if
(
mBuffered
&&
mListener
)
return
mListener
->
keyPressed
(
KeyEvent
(
this
,
kc
,
text
));
return
true
;
}
return
true
;
}
//-------------------------------------------------------------------//
bool
LinuxKeyboard
::
_injectKeyUp
(
KeySym
key
)
//-------------------------------------------------------------------//
{
bool
LinuxKeyboard
::
_injectKeyUp
(
KeySym
key
)
KeyCode
kc
=
keyConversion
[
key
];
{
KeyBuffer
[
kc
]
=
0
;
KeyCode
kc
=
keyConversion
[
key
];
KeyBuffer
[
kc
]
=
0
;
//Turn off modifier flags
if
(
kc
==
KC_LCONTROL
||
kc
==
KC_RCONTROL
)
//Turn off modifier flags
mModifiers
&=
~
Ctrl
;
if
(
kc
==
KC_LCONTROL
||
kc
==
KC_RCONTROL
)
else
if
(
kc
==
KC_LSHIFT
||
kc
==
KC_RSHIFT
)
mModifiers
&=
~
Ctrl
;
mModifiers
&=
~
Shift
;
else
if
(
kc
==
KC_LSHIFT
||
kc
==
KC_RSHIFT
)
else
if
(
kc
==
KC_LMENU
||
kc
==
KC_RMENU
)
mModifiers
&=
~
Shift
;
mModifiers
&=
~
Alt
;
else
if
(
kc
==
KC_LMENU
||
kc
==
KC_RMENU
)
mModifiers
&=
~
Alt
;
if
(
mBuffered
&&
mListener
)
return
mListener
->
keyReleased
(
KeyEvent
(
this
,
kc
,
0
));
if
(
mBuffered
&&
mListener
)
return
mListener
->
keyReleased
(
KeyEvent
(
this
,
kc
,
0
));
return
true
;
}
return
true
;
}
//-------------------------------------------------------------------//
const
std
::
string
&
LinuxKeyboard
::
getAsString
(
KeyCode
kc
)
//-------------------------------------------------------------------//
{
const
std
::
string
&
LinuxKeyboard
::
getAsString
(
KeyCode
kc
)
mGetString
=
"Unknown"
;
{
char
*
temp
=
0
;
mGetString
=
"Unknown"
;
char
*
temp
=
0
;
XtoOIS_KeyMap
::
iterator
i
=
keyConversion
.
begin
(),
e
=
keyConversion
.
end
();
XtoOIS_KeyMap
::
iterator
i
=
keyConversion
.
begin
(),
e
=
keyConversion
.
end
();
for
(
;
i
!=
e
;
++
i
)
{
for
(
;
i
!=
e
;
++
i
)
if
(
i
->
second
==
kc
)
{
{
if
(
i
->
second
==
kc
)
temp
=
XKeysymToString
(
i
->
first
);
{
if
(
temp
)
temp
=
XKeysymToString
(
i
->
first
);
mGetString
=
temp
;
if
(
temp
)
break
;
mGetString
=
temp
;
}
break
;
}
}
}
return
mGetString
;
}
return
mGetString
;
}
//-------------------------------------------------------------------//
void
LinuxKeyboard
::
copyKeyStates
(
char
keys
[
256
]
)
const
//-------------------------------------------------------------------//
{
OIS
::
KeyCode
LinuxKeyboard
::
getAsKeyCode
(
std
::
string
str
)
memcpy
(
keys
,
KeyBuffer
,
256
);
{
}
OIS
::
KeyCode
mGetKeyCode
;
KeySym
X11Key
=
XStringToKeysym
(
str
.
c_str
());
mGetKeyCode
=
keyConversion
.
at
(
X11Key
);
return
mGetKeyCode
;
}
//-------------------------------------------------------------------//
void
LinuxKeyboard
::
copyKeyStates
(
char
keys
[
256
]
)
const
{
memcpy
(
keys
,
KeyBuffer
,
256
);
}
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment