-/* $Id$
-
-This file is part of libmspgbase
-Copyright © 2007 Mikko Rasa, Mikkosoft Productions
-Distributed under the LGPL
-*/
-
#include <map>
-#ifndef WIN32
+#ifdef WIN32
+#include <windows.h>
+#else
+#include <X11/X.h>
#include <X11/keysym.h>
#endif
#include <msp/core/except.h>
#endif
};
+unsigned modmap[Msp::Input::N_MODS_]=
+{
+#ifndef WIN32
+ ShiftMask, ControlMask, Mod1Mask, Mod4Mask
+#else
+ 1, 2, 4, 8
+#endif
+};
+
}
namespace Msp {
unsigned key_from_sys(unsigned code)
{
- static bool init_done=false;
+ static bool init_done = false;
static map<unsigned, unsigned> reverse_map;
if(!init_done)
{
for(unsigned i=0; i<N_KEYS_; ++i)
if(keymap[i])
- reverse_map[keymap[i]]=i;
+ reverse_map[keymap[i]] = i;
- init_done=true;
+ init_done = true;
}
- map<unsigned, unsigned>::const_iterator i=reverse_map.find(code);
+ map<unsigned, unsigned>::const_iterator i = reverse_map.find(code);
if(i!=reverse_map.end())
return i->second;
unsigned key_to_sys(unsigned key)
{
- if(key>N_KEYS_)
+ if(key>=N_KEYS_)
throw InvalidParameterValue("Key out of range");
return keymap[key];
}
+unsigned mod_from_sys(unsigned mod)
+{
+ unsigned result = 0;
+ for(unsigned i=0; i<N_MODS_; ++i)
+ if(mod&modmap[i])
+ result |= 1<<i;
+ return result;
+}
+
} // namespace Input
} // namespace Msp