[Orxonox-commit 3348] r8036 - code/branches/usability/src/libraries/core/input

landauf at orxonox.net landauf at orxonox.net
Sun Mar 6 19:12:12 CET 2011


Author: landauf
Date: 2011-03-06 19:12:11 +0100 (Sun, 06 Mar 2011)
New Revision: 8036

Modified:
   code/branches/usability/src/libraries/core/input/InputBuffer.cc
   code/branches/usability/src/libraries/core/input/InputBuffer.h
   code/branches/usability/src/libraries/core/input/Keyboard.cc
   code/branches/usability/src/libraries/core/input/Keyboard.h
Log:
moved keycode translator from InputBuffer to Keyboard, now it works also in the GUI

Modified: code/branches/usability/src/libraries/core/input/InputBuffer.cc
===================================================================
--- code/branches/usability/src/libraries/core/input/InputBuffer.cc	2011-03-06 15:32:05 UTC (rev 8035)
+++ code/branches/usability/src/libraries/core/input/InputBuffer.cc	2011-03-06 18:12:11 UTC (rev 8036)
@@ -46,20 +46,6 @@
                                0123456789 \
                                \\\"(){}[]<>.:,;_-+*/=!?|$&%^~#";
 
-        this->keyTranslator_[KeyCode::Numpad0]      = '0';
-        this->keyTranslator_[KeyCode::Numpad1]      = '1';
-        this->keyTranslator_[KeyCode::Numpad2]      = '2';
-        this->keyTranslator_[KeyCode::Numpad3]      = '3';
-        this->keyTranslator_[KeyCode::Numpad4]      = '4';
-        this->keyTranslator_[KeyCode::Numpad5]      = '5';
-        this->keyTranslator_[KeyCode::Numpad6]      = '6';
-        this->keyTranslator_[KeyCode::Numpad7]      = '7';
-        this->keyTranslator_[KeyCode::Numpad8]      = '8';
-        this->keyTranslator_[KeyCode::Numpad9]      = '9';
-        this->keyTranslator_[KeyCode::NumpadPeriod] = '.';
-        this->keyTranslator_[KeyCode::Divide]       = '/';
-        this->keyTranslator_[KeyCode::NumpadEnter]  = '\n';
-
         this->lastKey_ = KeyCode::Unassigned;
         this->timeSinceKeyPressed_ = 0.0f;
         this->timeSinceKeyRepeated_ = 0.0f;
@@ -241,11 +227,7 @@
             }
         }
 
-        std::map<KeyCode::ByEnum, char>::iterator it = this->keyTranslator_.find(evt.getKeyCode());
-        if (it != this->keyTranslator_.end())
-            this->insert(it->second);
-        else
-            this->insert(static_cast<char>(evt.getText()));
+        this->insert(static_cast<char>(evt.getText()));
     }
 
     /**

Modified: code/branches/usability/src/libraries/core/input/InputBuffer.h
===================================================================
--- code/branches/usability/src/libraries/core/input/InputBuffer.h	2011-03-06 15:32:05 UTC (rev 8035)
+++ code/branches/usability/src/libraries/core/input/InputBuffer.h	2011-03-06 18:12:11 UTC (rev 8036)
@@ -177,7 +177,6 @@
             std::string buffer_;
             std::list<BaseInputBufferListenerTuple*> listeners_;
             std::string allowedChars_;
-            std::map<KeyCode::ByEnum, char> keyTranslator_;
             unsigned int maxLength_;
             unsigned int cursor_;
 

Modified: code/branches/usability/src/libraries/core/input/Keyboard.cc
===================================================================
--- code/branches/usability/src/libraries/core/input/Keyboard.cc	2011-03-06 15:32:05 UTC (rev 8035)
+++ code/branches/usability/src/libraries/core/input/Keyboard.cc	2011-03-06 18:12:11 UTC (rev 8036)
@@ -35,18 +35,28 @@
     bool Keyboard::keyPressed(const OIS::KeyEvent& arg)
     {
         // update modifiers
-        if (arg.key == OIS::KC_RMENU    || arg.key == OIS::KC_LMENU)
-            modifiers_ |= KeyboardModifier::Alt;   // alt key
-        if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL)
-            modifiers_ |= KeyboardModifier::Ctrl;  // ctrl key
-        if (arg.key == OIS::KC_RSHIFT   || arg.key == OIS::KC_LSHIFT)
-            modifiers_ |= KeyboardModifier::Shift; // shift key
+        switch (arg.key)
+        {
+            case OIS::KC_RMENU:
+            case OIS::KC_LMENU:
+                modifiers_ |= KeyboardModifier::Alt;   // alt key
+                break;
+            case OIS::KC_RCONTROL:
+            case OIS::KC_LCONTROL:
+                modifiers_ |= KeyboardModifier::Ctrl;  // ctrl key
+                break;
+            case OIS::KC_RSHIFT:
+            case OIS::KC_LSHIFT:
+                modifiers_ |= KeyboardModifier::Shift; // shift key
+                break;
+            case OIS::KC_TAB:
+                // Do not distribute the alt+tab event (messes with the operating system)
+                if ((modifiers_ & KeyboardModifier::Alt) != 0)
+                    return true;
+            default:;
+        }
 
-        // Do not distribute the alt+tab event (messes with the operating system)
-        if ((modifiers_ & KeyboardModifier::Alt) != 0 && arg.key == OIS::KC_TAB)
-            return true;
-
-        KeyEvent evt(arg);
+        KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0);
         super::buttonPressed(evt);
         return true;
     }
@@ -55,15 +65,47 @@
     bool Keyboard::keyReleased(const OIS::KeyEvent& arg)
     {
         // update modifiers
-        if (arg.key == OIS::KC_RMENU    || arg.key == OIS::KC_LMENU)
-            modifiers_ &= ~KeyboardModifier::Alt;   // alt key
-        if (arg.key == OIS::KC_RCONTROL || arg.key == OIS::KC_LCONTROL)
-            modifiers_ &= ~KeyboardModifier::Ctrl;  // ctrl key
-        if (arg.key == OIS::KC_RSHIFT   || arg.key == OIS::KC_LSHIFT)
-            modifiers_ &= ~KeyboardModifier::Shift; // shift key
+        switch (arg.key)
+        {
+            case OIS::KC_RMENU:
+            case OIS::KC_LMENU:
+                modifiers_ &= ~KeyboardModifier::Alt;   // alt key
+                break;
+            case OIS::KC_RCONTROL:
+            case OIS::KC_LCONTROL:
+                modifiers_ &= ~KeyboardModifier::Ctrl;  // ctrl key
+                break;
+            case OIS::KC_RSHIFT:
+            case OIS::KC_LSHIFT:
+                modifiers_ &= ~KeyboardModifier::Shift; // shift key
+                break;
+            default:;
+        }
 
-        KeyEvent evt(arg);
+        KeyEvent evt(static_cast<KeyCode::ByEnum>(arg.key), Keyboard::getKeyText(arg), 0);
         super::buttonReleased(evt);
         return true;
     }
+
+    /// A map which returns the corresponding chars for some key codes
+    unsigned int Keyboard::getKeyText(const OIS::KeyEvent& arg)
+    {
+        switch (arg.key)
+        {
+            case OIS::KC_NUMPAD0:     return static_cast<unsigned int>('0');
+            case OIS::KC_NUMPAD1:     return static_cast<unsigned int>('1');
+            case OIS::KC_NUMPAD2:     return static_cast<unsigned int>('2');
+            case OIS::KC_NUMPAD3:     return static_cast<unsigned int>('3');
+            case OIS::KC_NUMPAD4:     return static_cast<unsigned int>('4');
+            case OIS::KC_NUMPAD5:     return static_cast<unsigned int>('5');
+            case OIS::KC_NUMPAD6:     return static_cast<unsigned int>('6');
+            case OIS::KC_NUMPAD7:     return static_cast<unsigned int>('7');
+            case OIS::KC_NUMPAD8:     return static_cast<unsigned int>('8');
+            case OIS::KC_NUMPAD9:     return static_cast<unsigned int>('9');
+            case OIS::KC_DECIMAL:     return static_cast<unsigned int>('.');
+            case OIS::KC_DIVIDE:      return static_cast<unsigned int>('/');
+            case OIS::KC_NUMPADENTER: return static_cast<unsigned int>('\n');
+            default:                  return arg.text;
+        }
+    }
 }

Modified: code/branches/usability/src/libraries/core/input/Keyboard.h
===================================================================
--- code/branches/usability/src/libraries/core/input/Keyboard.h	2011-03-06 15:32:05 UTC (rev 8035)
+++ code/branches/usability/src/libraries/core/input/Keyboard.h	2011-03-06 18:12:11 UTC (rev 8036)
@@ -82,6 +82,8 @@
         //! Returns the class name as string
         static std::string getClassNameImpl() { return "Keyboard"; }
 
+        static unsigned int getKeyText(const OIS::KeyEvent& arg);
+
         //! Bit mask representing keyboard modifiers
         int modifiers_;
     };




More information about the Orxonox-commit mailing list