]> git.tdb.fi Git - libs/gltk.git/blobdiff - source/systemkeyboardinput.cpp
Simplify constructors with C++11
[libs/gltk.git] / source / systemkeyboardinput.cpp
index f5657bd7d49066d4c854279bfbfde8705ddbd55a..3c4439856944f71becb1414a05c7541ef44f1995 100644 (file)
@@ -19,8 +19,14 @@ bool SystemKeyboardInput::key_press(unsigned key)
        if(!root.is_visible())
                return false;
 
-       // TODO modifiers
-       if(root.key_press(key, 0))
+       if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
+               modifier_state |= MOD_SHIFT;
+       else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
+               modifier_state |= MOD_CTRL;
+       else if(key==Input::KEY_ALT_L || key==Input::KEY_ALT_R)
+               modifier_state |= MOD_ALT;
+
+       if(root.key_press(key, modifier_state))
                return true;
        
        switch(key)
@@ -29,7 +35,7 @@ bool SystemKeyboardInput::key_press(unsigned key)
        case Input::KEY_RIGHT: return root.navigate(NAV_RIGHT);
        case Input::KEY_UP: return root.navigate(NAV_UP);
        case Input::KEY_DOWN: return root.navigate(NAV_DOWN);
-       case Input::KEY_TAB: return root.navigate(NAV_NEXT);
+       case Input::KEY_TAB: return root.navigate((modifier_state&MOD_SHIFT) ? NAV_PREVIOUS : NAV_NEXT);
        case Input::KEY_SPACE: return root.navigate(NAV_ACTIVATE);
        case Input::KEY_ENTER: return root.navigate(NAV_ACCEPT);
        case Input::KEY_ESC: return root.navigate(NAV_CANCEL);
@@ -41,7 +47,18 @@ bool SystemKeyboardInput::key_press(unsigned key)
 bool SystemKeyboardInput::key_release(unsigned key)
 {
        if(root.is_visible())
-               return root.key_release(key, 0);
+       {
+               bool result = root.key_release(key, modifier_state);
+
+               if(key==Input::KEY_SHIFT_L || key==Input::KEY_SHIFT_R)
+                       modifier_state &= ~MOD_SHIFT;
+               else if(key==Input::KEY_CTRL_L || key==Input::KEY_CTRL_R)
+                       modifier_state &= ~MOD_CTRL;
+               else if(key==Input::KEY_ALT_L || key==Input::KEY_ALT_R)
+                       modifier_state &= ~MOD_ALT;
+
+               return result;
+       }
        else
                return false;
 }