Show
Ignore:
Timestamp:
01/27/11 17:23:48 (3 years ago)
Author:
robert
Message:

From Alexander Sinditskiy, "reason of this changes described in http://forum.openscenegraph.org/viewtopic.php?t=7596

and another problem is:
example osgkeyboard is not work (keys not highlight) if user have 2 keyboard layout native and english and current user layout is native

I try to explain my changes

we need something that is identify key without modifier keys and layout -> this is UnmodifedKey?

I think osg must have its own UnmodifiedKeys? table. Code must be run same on different platforms. This can de guaranteed by UnmodifiedKeys? table.

Mikhail Izmestev helped me. He implemented VirtualKey? changes in GraphicsWindowX11"

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • OpenSceneGraph/trunk/src/osgViewer/GraphicsWindowWin32.cpp

    r11812 r12125  
    402402            _keymap[VK_F11          ] = osgGA::GUIEventAdapter::KEY_F11; 
    403403            _keymap[VK_F12          ] = osgGA::GUIEventAdapter::KEY_F12; 
    404             _keymap[0xc0            ] = '`'; 
    405             _keymap['0'             ] = '0'; 
    406             _keymap['1'             ] = '1'; 
    407             _keymap['2'             ] = '2'; 
    408             _keymap['3'             ] = '3'; 
    409             _keymap['4'             ] = '4'; 
    410             _keymap['5'             ] = '5'; 
    411             _keymap['6'             ] = '6'; 
    412             _keymap['7'             ] = '7'; 
    413             _keymap['8'             ] = '8'; 
    414             _keymap['9'             ] = '9'; 
    415             _keymap[0xbd            ] = '-'; 
    416             _keymap[0xbb            ] = '='; 
     404            _keymap[0xc0            ] = osgGA::GUIEventAdapter::KEY_Backquote; 
     405            _keymap['0'             ] = osgGA::GUIEventAdapter::KEY_0; 
     406            _keymap['1'             ] = osgGA::GUIEventAdapter::KEY_1; 
     407            _keymap['2'             ] = osgGA::GUIEventAdapter::KEY_2; 
     408            _keymap['3'             ] = osgGA::GUIEventAdapter::KEY_3; 
     409            _keymap['4'             ] = osgGA::GUIEventAdapter::KEY_4; 
     410            _keymap['5'             ] = osgGA::GUIEventAdapter::KEY_5; 
     411            _keymap['6'             ] = osgGA::GUIEventAdapter::KEY_6; 
     412            _keymap['7'             ] = osgGA::GUIEventAdapter::KEY_7; 
     413            _keymap['8'             ] = osgGA::GUIEventAdapter::KEY_8; 
     414            _keymap['9'             ] = osgGA::GUIEventAdapter::KEY_9; 
     415            _keymap[0xbd            ] = osgGA::GUIEventAdapter::KEY_Minus; 
     416            _keymap[0xbb            ] = osgGA::GUIEventAdapter::KEY_Equals; 
    417417            _keymap[VK_BACK         ] = osgGA::GUIEventAdapter::KEY_BackSpace; 
    418418            _keymap[VK_TAB          ] = osgGA::GUIEventAdapter::KEY_Tab; 
    419             _keymap['A'             ] = 'A'; 
    420             _keymap['B'             ] = 'B'; 
    421             _keymap['C'             ] = 'C'; 
    422             _keymap['D'             ] = 'D'; 
    423             _keymap['E'             ] = 'E'; 
    424             _keymap['F'             ] = 'F'; 
    425             _keymap['G'             ] = 'G'; 
    426             _keymap['H'             ] = 'H'; 
    427             _keymap['I'             ] = 'I'; 
    428             _keymap['J'             ] = 'J'; 
    429             _keymap['K'             ] = 'K'; 
    430             _keymap['L'             ] = 'L'; 
    431             _keymap['M'             ] = 'M'; 
    432             _keymap['N'             ] = 'N'; 
    433             _keymap['O'             ] = 'O'; 
    434             _keymap['P'             ] = 'P'; 
    435             _keymap['Q'             ] = 'Q'; 
    436             _keymap['R'             ] = 'R'; 
    437             _keymap['S'             ] = 'S'; 
    438             _keymap['T'             ] = 'T'; 
    439             _keymap['U'             ] = 'U'; 
    440             _keymap['V'             ] = 'V'; 
    441             _keymap['W'             ] = 'W'; 
    442             _keymap['X'             ] = 'X'; 
    443             _keymap['Y'             ] = 'Y'; 
    444             _keymap['Z'             ] = 'Z'; 
    445             _keymap[0xdb            ] = '['; 
    446             _keymap[0xdd            ] = ']'; 
    447             _keymap[0xdc            ] = '\\'; 
     419            _keymap['A'             ] = osgGA::GUIEventAdapter::KEY_A; 
     420            _keymap['B'             ] = osgGA::GUIEventAdapter::KEY_B; 
     421            _keymap['C'             ] = osgGA::GUIEventAdapter::KEY_C; 
     422            _keymap['D'             ] = osgGA::GUIEventAdapter::KEY_D; 
     423            _keymap['E'             ] = osgGA::GUIEventAdapter::KEY_E; 
     424            _keymap['F'             ] = osgGA::GUIEventAdapter::KEY_F; 
     425            _keymap['G'             ] = osgGA::GUIEventAdapter::KEY_G; 
     426            _keymap['H'             ] = osgGA::GUIEventAdapter::KEY_H; 
     427            _keymap['I'             ] = osgGA::GUIEventAdapter::KEY_I; 
     428            _keymap['J'             ] = osgGA::GUIEventAdapter::KEY_J; 
     429            _keymap['K'             ] = osgGA::GUIEventAdapter::KEY_K; 
     430            _keymap['L'             ] = osgGA::GUIEventAdapter::KEY_L; 
     431            _keymap['M'             ] = osgGA::GUIEventAdapter::KEY_M; 
     432            _keymap['N'             ] = osgGA::GUIEventAdapter::KEY_N; 
     433            _keymap['O'             ] = osgGA::GUIEventAdapter::KEY_O; 
     434            _keymap['P'             ] = osgGA::GUIEventAdapter::KEY_P; 
     435            _keymap['Q'             ] = osgGA::GUIEventAdapter::KEY_Q; 
     436            _keymap['R'             ] = osgGA::GUIEventAdapter::KEY_R; 
     437            _keymap['S'             ] = osgGA::GUIEventAdapter::KEY_S; 
     438            _keymap['T'             ] = osgGA::GUIEventAdapter::KEY_T; 
     439            _keymap['U'             ] = osgGA::GUIEventAdapter::KEY_U; 
     440            _keymap['V'             ] = osgGA::GUIEventAdapter::KEY_V; 
     441            _keymap['W'             ] = osgGA::GUIEventAdapter::KEY_W; 
     442            _keymap['X'             ] = osgGA::GUIEventAdapter::KEY_X; 
     443            _keymap['Y'             ] = osgGA::GUIEventAdapter::KEY_Y; 
     444            _keymap['Z'             ] = osgGA::GUIEventAdapter::KEY_Z; 
     445            _keymap[0xdb            ] = osgGA::GUIEventAdapter::KEY_Leftbracket; 
     446            _keymap[0xdd            ] = osgGA::GUIEventAdapter::KEY_Rightbracket; 
     447            _keymap[0xdc            ] = osgGA::GUIEventAdapter::KEY_Backslash; 
    448448            _keymap[VK_CAPITAL      ] = osgGA::GUIEventAdapter::KEY_Caps_Lock; 
    449             _keymap[0xba            ] = ';'; 
    450             _keymap[0xde            ] = '\''; 
     449            _keymap[0xba            ] = osgGA::GUIEventAdapter::KEY_Semicolon; 
     450            _keymap[0xde            ] = osgGA::GUIEventAdapter::KEY_Quote; 
    451451            _keymap[VK_RETURN       ] = osgGA::GUIEventAdapter::KEY_Return; 
    452452            _keymap[VK_LSHIFT       ] = osgGA::GUIEventAdapter::KEY_Shift_L; 
    453             _keymap[0xbc            ] = ','; 
    454             _keymap[0xbe            ] = '.'; 
    455             _keymap[0xbf            ] = '/'; 
     453            _keymap[0xbc            ] = osgGA::GUIEventAdapter::KEY_Comma; 
     454            _keymap[0xbe            ] = osgGA::GUIEventAdapter::KEY_Period; 
     455            _keymap[0xbf            ] = osgGA::GUIEventAdapter::KEY_Slash; 
    456456            _keymap[VK_RSHIFT       ] = osgGA::GUIEventAdapter::KEY_Shift_R; 
    457457            _keymap[VK_LCONTROL     ] = osgGA::GUIEventAdapter::KEY_Control_L; 
    458458            _keymap[VK_LWIN         ] = osgGA::GUIEventAdapter::KEY_Super_L; 
    459             _keymap[VK_SPACE        ] = ' '; 
     459            _keymap[VK_SPACE        ] = osgGA::GUIEventAdapter::KEY_Space; 
    460460            _keymap[VK_LMENU        ] = osgGA::GUIEventAdapter::KEY_Alt_L; 
    461461            _keymap[VK_RMENU        ] = osgGA::GUIEventAdapter::KEY_Alt_R; 
     
    22382238} 
    22392239 
    2240 void GraphicsWindowWin32::adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol, unsigned int& modifierMask ) 
     2240void GraphicsWindowWin32::adaptKey( WPARAM wParam, LPARAM lParam, int& keySymbol, unsigned int& modifierMask, int& unmodifiedKeySymbol) 
    22412241{ 
    22422242    modifierMask = 0; 
     
    23042304        keySymbol = osgGA::GUIEventAdapter::KEY_KP_Enter; 
    23052305    } 
    2306     else if ((keySymbol & 0xff00)==0)  
     2306     
     2307    unmodifiedKeySymbol = keySymbol; 
     2308         
     2309    if ((keySymbol & 0xff00)==0)  
    23072310    { 
    23082311        char asciiKey[2]; 
     
    24802483            { 
    24812484                int keySymbol = 0; 
     2485                int unmodifiedKeySymbol = 0; 
    24822486                unsigned int modifierMask = 0; 
    2483                 adaptKey(wParam, lParam, keySymbol, modifierMask); 
    2484                 _keyMap[keySymbol] = true; 
     2487                adaptKey(wParam, lParam, keySymbol, modifierMask, unmodifiedKeySymbol); 
     2488                _keyMap[std::make_pair(keySymbol,unmodifiedKeySymbol)] = true; 
    24852489                //getEventQueue()->getCurrentEventState()->setModKeyMask(modifierMask); 
    2486                 getEventQueue()->keyPress(keySymbol, eventTime); 
     2490                getEventQueue()->keyPress(keySymbol, eventTime, unmodifiedKeySymbol); 
    24872491            } 
    24882492            break; 
     
    24952499            { 
    24962500                int keySymbol = 0; 
     2501                int unmodifiedKeySymbol = 0; 
    24972502                unsigned int modifierMask = 0; 
    2498                 adaptKey(wParam, lParam, keySymbol, modifierMask); 
    2499                 _keyMap[keySymbol] = false; 
     2503                adaptKey(wParam, lParam, keySymbol, modifierMask, unmodifiedKeySymbol); 
     2504                _keyMap[std::make_pair(keySymbol, unmodifiedKeySymbol)] = false; 
    25002505                //getEventQueue()->getCurrentEventState()->setModKeyMask(modifierMask); 
    2501                 getEventQueue()->keyRelease(keySymbol, eventTime); 
     2506                getEventQueue()->keyRelease(keySymbol, eventTime, unmodifiedKeySymbol); 
    25022507            } 
    25032508            break; 
     
    25392544 
    25402545            // Release all keys that were pressed when the window lost focus. 
    2541             for (std::map<int, bool>::iterator key = _keyMap.begin(); 
     2546            for (std::map<std::pair<int, int>, bool>::iterator key = _keyMap.begin(); 
    25422547                 key != _keyMap.end(); ++key) 
    25432548            { 
    25442549                if (key->second) 
    25452550                { 
    2546                     getEventQueue()->keyRelease(key->first); 
     2551                    getEventQueue()->keyRelease(key->first.first, key->first.second); 
    25472552                    key->second = false; 
    25482553                }