52 lines
1.4 KiB
C++
52 lines
1.4 KiB
C++
|
#include "precomp_wasabi_bfc.h"
|
||
|
#include "std_keyboard.h"
|
||
|
|
||
|
int Std::keyDown(int code)
|
||
|
{
|
||
|
#ifdef WIN32
|
||
|
return !!(GetKeyState(code) & 0x8000);
|
||
|
#elif defined(LINUX)
|
||
|
if ( code == MK_RBUTTON || code == MK_LBUTTON ) {
|
||
|
Window t1, t2;
|
||
|
int rx, ry, wx, wy;
|
||
|
unsigned int buttons;
|
||
|
|
||
|
XQueryPointer( Linux::getDisplay(), Linux::RootWin(), &t1, &t2,
|
||
|
&rx, &ry, &wx, &wy, &buttons );
|
||
|
|
||
|
if ( code == MK_RBUTTON )
|
||
|
return buttons & Button3Mask;
|
||
|
else
|
||
|
return buttons & Button1Mask;
|
||
|
}
|
||
|
|
||
|
int code1 = XKeysymToKeycode( Linux::getDisplay(), code & 0xFFFF );
|
||
|
int code2 = XKeysymToKeycode( Linux::getDisplay(), (code>>16) & 0xFFFF );
|
||
|
|
||
|
char keys_return[32] = {0};
|
||
|
XQueryKeymap( Linux::getDisplay(), keys_return );
|
||
|
|
||
|
if ( code1 && code2 )
|
||
|
return (keys_return[ (code1 >> 3) & 31 ] & (1 << (code1 & 7))) ||
|
||
|
(keys_return[ (code2 >> 3) & 31 ] & (1 << (code2 & 7)));
|
||
|
|
||
|
return (keys_return[ (code1 >> 3) & 31 ] & (1 << (code1 & 7)));
|
||
|
#else
|
||
|
return 0;
|
||
|
#warning port me!
|
||
|
#endif
|
||
|
}
|
||
|
|
||
|
// TODO: add async flag to be able to choose between GetKeyState/GetAsyncKeyState (win32) GetCurrentKeyModifiers/GetCurrentEventkeyModifiers (mac)
|
||
|
bool Std::keyModifier(int code)
|
||
|
{
|
||
|
#ifdef WIN32
|
||
|
return !!(GetKeyState(code) & 0x8000);
|
||
|
#elif defined(__APPLE__)
|
||
|
return GetCurrentKeyModifiers() & code;
|
||
|
#elif defined(LINUX)
|
||
|
#error port me
|
||
|
#endif
|
||
|
}
|
||
|
|