Added support for remapping of Win32 key symbols to

osgGA::GUIEventAdpater::KeySymbols.
This commit is contained in:
Robert Osfield
2003-03-24 15:13:00 +00:00
parent 19e2368991
commit 09acadb560
2 changed files with 138 additions and 11 deletions

View File

@@ -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);
};

View File

@@ -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;
}