Added support for remapping of Win32 key symbols to
osgGA::GUIEventAdpater::KeySymbols.
This commit is contained in:
@@ -127,6 +127,11 @@ class OSGPRODUCER_EXPORT EventAdapter : public osgGA::GUIEventAdapter
|
||||
static int _s_my;
|
||||
static int _s_modKeyMask;
|
||||
|
||||
typedef std::map<int,int> KeySymbolMap;
|
||||
static KeySymbolMap s_keySymbolMap;
|
||||
static bool s_keySymbolMapInitialized;
|
||||
|
||||
bool initKeySymbolMap();
|
||||
int adaptKeySymbol(Producer::KeySymbol key);
|
||||
|
||||
};
|
||||
|
||||
@@ -14,11 +14,15 @@ int EventAdapter::_s_Ymax = 1024;
|
||||
int EventAdapter::_s_mx = 0;
|
||||
int EventAdapter::_s_my = 0;
|
||||
|
||||
EventAdapter::KeySymbolMap EventAdapter::s_keySymbolMap;
|
||||
bool EventAdapter::s_keySymbolMapInitialized = false;
|
||||
|
||||
static float s_xOffset=1.0f;
|
||||
static float s_xScale=0.5f;
|
||||
static float s_yOffset=1.0f;
|
||||
static float s_yScale=0.5f;
|
||||
|
||||
|
||||
EventAdapter::EventAdapter()
|
||||
{
|
||||
_eventType = NONE; // adaptor does not encapsulate any events.
|
||||
@@ -183,17 +187,135 @@ void EventAdapter::adaptFrame(double time)
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
int EventAdapter::adaptKeySymbol(Producer::KeySymbol key)
|
||||
bool EventAdapter::initKeySymbolMap()
|
||||
{
|
||||
#ifdef WIN32
|
||||
// need to implement some kind of mapping, perhaps using an std::map?
|
||||
if (key==VK_ESCAPE) return KEY_Escape;
|
||||
return key;
|
||||
|
||||
#else
|
||||
// assume Producer is working under X11, so we have a 1:1 mapping
|
||||
// between X11 key symbols and osgGA::GUIEventAdapter::KeySymbols.
|
||||
return key;
|
||||
#endif
|
||||
#ifdef WIN32
|
||||
|
||||
/*
|
||||
// not mapped yet as I can't see an
|
||||
// obvious mapping to X11/osgGA::GUIEventAdapter::KeySymbol.
|
||||
s_keySymbolMap[VK_CAPITAL] = ;
|
||||
s_keySymbolMap[VK_CONVERT] = ;
|
||||
s_keySymbolMap[VK_NONCONVERT] = ;
|
||||
s_keySymbolMap[VK_ACCEPT] = ;
|
||||
s_keySymbolMap[VK_SNAPSHOT] = ;
|
||||
|
||||
s_keySymbolMap[VK_LWIN] = ;
|
||||
s_keySymbolMap[VK_RWIN] = ;
|
||||
s_keySymbolMap[VK_APPS] = ;
|
||||
|
||||
s_keySymbolMap[VK_ATTN] = ;
|
||||
s_keySymbolMap[VK_CRSEL] = ;
|
||||
s_keySymbolMap[VK_EXSEL] = ;
|
||||
s_keySymbolMap[VK_EREOF] = ;
|
||||
s_keySymbolMap[VK_PLAY] = ;
|
||||
s_keySymbolMap[VK_ZOOM] = ;
|
||||
s_keySymbolMap[VK_NONAME] = ;
|
||||
s_keySymbolMap[VK_PA1] = ;
|
||||
*/
|
||||
|
||||
// mapped to osgGA::GUIEventAdapter::KeySymbol
|
||||
s_keySymbolMap[VK_CANCEL] = KEY_Cancel;
|
||||
|
||||
s_keySymbolMap[VK_BACK] = KEY_BackSpace;
|
||||
s_keySymbolMap[VK_TAB] = KEY_Tab;
|
||||
|
||||
s_keySymbolMap[VK_CLEAR] = KEY_Clear;
|
||||
s_keySymbolMap[VK_RETURN] = KEY_Return;
|
||||
|
||||
s_keySymbolMap[VK_SHIFT] = KEY_Shift_Lock;
|
||||
s_keySymbolMap[VK_CONTROL] = KEY_Control_L;
|
||||
s_keySymbolMap[VK_MENU] = KEY_Menu;
|
||||
s_keySymbolMap[VK_PAUSE ] = KEY_Pause;
|
||||
|
||||
s_keySymbolMap[VK_ESCAPE] = KEY_Escape;
|
||||
|
||||
s_keySymbolMap[VK_MODECHANGE] = KEY_Mode_switch;
|
||||
|
||||
s_keySymbolMap[VK_SPACE] = 0x20
|
||||
s_keySymbolMap[VK_PRIOR] = KEY_Prior;
|
||||
s_keySymbolMap[VK_NEXT] = KEY_Next;
|
||||
s_keySymbolMap[VK_END] = KEY_End;
|
||||
s_keySymbolMap[VK_HOME] = KEY_Home;
|
||||
s_keySymbolMap[VK_LEFT] = KEY_Left;
|
||||
s_keySymbolMap[VK_UP] = KEY_Up;
|
||||
s_keySymbolMap[VK_RIGHT] = KEY_Right;
|
||||
s_keySymbolMap[VK_DOWN] = KEY_Down;
|
||||
s_keySymbolMap[VK_SELECT] = KEY_Select;
|
||||
s_keySymbolMap[VK_PRINT] = KEY_Print;
|
||||
s_keySymbolMap[VK_EXECUTE] = KEY_Execute;
|
||||
s_keySymbolMap[VK_INSERT] = KEY_Insert;
|
||||
s_keySymbolMap[VK_DELETE] = KEY_Delete;
|
||||
s_keySymbolMap[VK_HELP] = KEY_Help;
|
||||
|
||||
s_keySymbolMap[VK_NUMPAD0] = KEY_KP_0;
|
||||
s_keySymbolMap[VK_NUMPAD1] = KEY_KP_1;
|
||||
s_keySymbolMap[VK_NUMPAD2] = KEY_KP_2;
|
||||
s_keySymbolMap[VK_NUMPAD3] = KEY_KP_3;
|
||||
s_keySymbolMap[VK_NUMPAD4] = KEY_KP_4;
|
||||
s_keySymbolMap[VK_NUMPAD5] = KEY_KP_5;
|
||||
s_keySymbolMap[VK_NUMPAD6] = KEY_KP_6;
|
||||
s_keySymbolMap[VK_NUMPAD7] = KEY_KP_7;
|
||||
s_keySymbolMap[VK_NUMPAD8] = KEY_KP_8;
|
||||
s_keySymbolMap[VK_NUMPAD9] = KEY_KP_9;
|
||||
s_keySymbolMap[VK_MULTIPLY] = KEY_KP_Multiply;
|
||||
s_keySymbolMap[VK_ADD] = KEY_KP_Add;
|
||||
s_keySymbolMap[VK_SEPARATOR] = KEY_KP_Separator;
|
||||
s_keySymbolMap[VK_SUBTRACT] = KEY_KP_Subtract;
|
||||
s_keySymbolMap[VK_DECIMAL] = KEY_KP_Decimal;
|
||||
s_keySymbolMap[VK_DIVIDE] = KEY_KP_Divide;
|
||||
s_keySymbolMap[VK_F1] = KEY_F1;
|
||||
s_keySymbolMap[VK_F2] = KEY_F2;
|
||||
s_keySymbolMap[VK_F3] = KEY_F3;
|
||||
s_keySymbolMap[VK_F4] = KEY_F4;
|
||||
s_keySymbolMap[VK_F5] = KEY_F5;
|
||||
s_keySymbolMap[VK_F6] = KEY_F6;
|
||||
s_keySymbolMap[VK_F7] = KEY_F7;
|
||||
s_keySymbolMap[VK_F8] = KEY_F8;
|
||||
s_keySymbolMap[VK_F9] = KEY_F9;
|
||||
s_keySymbolMap[VK_F10] = KEY_F10;
|
||||
s_keySymbolMap[VK_F11] = KEY_F11;
|
||||
s_keySymbolMap[VK_F12] = KEY_F12;
|
||||
s_keySymbolMap[VK_F13] = KEY_F13;
|
||||
s_keySymbolMap[VK_F14] = KEY_F14;
|
||||
s_keySymbolMap[VK_F15] = KEY_F15;
|
||||
s_keySymbolMap[VK_F16] = KEY_F16;
|
||||
s_keySymbolMap[VK_F17] = KEY_F17;
|
||||
s_keySymbolMap[VK_F18] = KEY_F18;
|
||||
s_keySymbolMap[VK_F19] = KEY_F19;
|
||||
s_keySymbolMap[VK_F20] = KEY_F20;
|
||||
s_keySymbolMap[VK_F21] = KEY_F21;
|
||||
s_keySymbolMap[VK_F22] = KEY_F22;
|
||||
s_keySymbolMap[VK_F23] = KEY_F23;
|
||||
s_keySymbolMap[VK_F24] = KEY_F24;
|
||||
|
||||
s_keySymbolMap[VK_NUMLOCK] = KEY_Num_Lock;
|
||||
s_keySymbolMap[VK_SCROLL] = KEY_Scroll_Lock;
|
||||
|
||||
s_keySymbolMap[VK_LSHIFT] = KEY_Shift_L;
|
||||
s_keySymbolMap[VK_RSHIFT] = KEY_Shift_R;
|
||||
s_keySymbolMap[VK_LCONTROL] = KEY_Control_L;
|
||||
s_keySymbolMap[VK_RCONTROL] = KEY_Control_R;
|
||||
s_keySymbolMap[VK_LMENU] = KEY_Menu;
|
||||
s_keySymbolMap[VK_RMENU] = KEY_Menu;
|
||||
s_keySymbolMap[VK_OEM_CLEAR] = KEY_Clear;
|
||||
#else
|
||||
|
||||
// no mapping required for non windows (i.e. X11 based)
|
||||
// since the osgGA::GUIEventAdapter::KeySybol values are
|
||||
// take from X11/keysymdef.h
|
||||
|
||||
#endif
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int EventAdapter::adaptKeySymbol(Producer::KeySymbol key)
|
||||
{
|
||||
if (!s_keySymbolMapInitialized) s_keySymbolMapInitialized = initKeySymbolMap();
|
||||
|
||||
KeySymbolMap::iterator itr = s_keySymbolMap.find(key);
|
||||
if (itr!=s_keySymbolMap.end()) return itr->second;
|
||||
else return key;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user