All pastes #770969 Raw Edit

input.cxx

public diff v1 · immutable
·published 2007-11-12 18:50 UTC
rendered paste body
diff --git a/src/Main/FGManipulator.cxx b/src/Main/FGManipulator.cxxindex 0586419..191f6fd 100644--- a/src/Main/FGManipulator.cxx+++ b/src/Main/FGManipulator.cxx@@ -276,5 +276,23 @@ void FGManipulator::handleKey(const osgGA::GUIEventAdapter& ea, int& key,     currentModifiers = modifiers;     if (eventType == osgGA::GUIEventAdapter::KEYUP)        modifiers |= KEYMOD_RELEASED;++    if (key >= 0 && key < sizeof(release_keys)) {+        if (modifiers & KEYMOD_RELEASED) {+            key = release_keys[key];+        } else {+            release_keys[key] = key;+            if (key >= 1 && key <= 26) {+                release_keys[key + '@'] = key;+                release_keys[key + '`'] = key;+            } else if (key >= 'A' && key <= 'Z') {+                release_keys[key - '@'] = key;+                release_keys[tolower(key)] = key;+            } else if (key >= 'a' && key <= 'z') {+                release_keys[key - '`'] = key;+                release_keys[toupper(key)] = key;+            }+        }+    } }×diff --git a/src/Main/FGManipulator.hxx b/src/Main/FGManipulator.hxxindex 4ad190d..edfcd9f 100644--- a/src/Main/FGManipulator.hxx+++ b/src/Main/FGManipulator.hxx@@ -139,5 +139,6 @@ protected:     bool mouseWarped;     // workaround for osgViewer double scroll events     bool scrollButtonPressed;+    int release_keys[128]; }; #endif