Show
Ignore:
Timestamp:
01/27/11 17:23:48 (2 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/examples/osgkeyboard/osgkeyboard.cpp

    r8079 r12125  
    4343        osg::Group* getScene() { return _scene.get(); } 
    4444         
    45         void keyChange(int key,int value); 
     45        void keyChange(int key, int virtualKey, int value); 
    4646         
    4747protected: 
     
    5050 
    5151        osg::Switch* addKey(osg::Vec3& pos, int key,const std::string& text,float width, float height); 
    52         osg::Switch* addKey(int key,osg::Switch* sw); 
    5352 
    5453        void createKeyboard(); 
     
    6261}; 
    6362 
    64 void KeyboardModel::keyChange(int key,int value) 
     63void KeyboardModel::keyChange(int key, int virtualKey, int value) 
    6564{ 
    6665    osg::notify(osg::INFO) << "key value change, code="<<std::hex << key << "\t value="<< value << std::dec  << std::endl; 
    6766 
    6867    // toggle the keys graphical representation on or off via osg::Swithc 
    69     KeyModelMap::iterator itr = _keyModelMap.find(key); 
     68    KeyModelMap::iterator itr = _keyModelMap.find(virtualKey); 
    7069    if (itr!=_keyModelMap.end()) 
    7170    { 
     
    148147} 
    149148 
    150 osg::Switch* KeyboardModel::addKey(int key,osg::Switch* sw) 
    151 { 
    152     _keyModelMap[key] = sw; 
    153     return sw; 
    154 } 
    155  
    156149void KeyboardModel::createKeyboard() 
    157150{ 
     
    176169 
    177170    addKey(pos,osgGA::GUIEventAdapter::KEY_Shift_L,"Shift",2.0f,0.5f); 
    178     addKey(pos,'\\',"\\",1.0f,1.0f); 
    179     addKey('Z',addKey(pos,'z',"Z",1.0f,1.0f)); 
    180     addKey('X',addKey(pos,'x',"X",1.0f,1.0f)); 
    181     addKey('C',addKey(pos,'c',"C",1.0f,1.0f)); 
    182     addKey('V',addKey(pos,'v',"V",1.0f,1.0f)); 
    183     addKey('B',addKey(pos,'b',"B",1.0f,1.0f)); 
    184     addKey('N',addKey(pos,'n',"N",1.0f,1.0f)); 
    185     addKey('M',addKey(pos,'m',"M",1.0f,1.0f)); 
    186     addKey('<',addKey(pos,',',",",1.0f,1.0f)); 
    187     addKey('>',addKey(pos,'.',".",1.0f,1.0f)); 
    188     addKey('?',addKey(pos,'/',"/",1.0f,1.0f)); 
     171    addKey(pos,osgGA::GUIEventAdapter::KEY_Backslash,"\\",1.0f,1.0f); 
     172    addKey(pos,osgGA::GUIEventAdapter::KEY_Z,"Z",1.0f,1.0f); 
     173    addKey(pos,osgGA::GUIEventAdapter::KEY_X,"X",1.0f,1.0f); 
     174    addKey(pos,osgGA::GUIEventAdapter::KEY_C,"C",1.0f,1.0f); 
     175    addKey(pos,osgGA::GUIEventAdapter::KEY_V,"V",1.0f,1.0f); 
     176    addKey(pos,osgGA::GUIEventAdapter::KEY_B,"B",1.0f,1.0f); 
     177    addKey(pos,osgGA::GUIEventAdapter::KEY_N,"N",1.0f,1.0f); 
     178    addKey(pos,osgGA::GUIEventAdapter::KEY_M,"M",1.0f,1.0f); 
     179    addKey(pos,osgGA::GUIEventAdapter::KEY_Comma,",",1.0f,1.0f); 
     180    addKey(pos,osgGA::GUIEventAdapter::KEY_Period,".",1.0f,1.0f); 
     181    addKey(pos,osgGA::GUIEventAdapter::KEY_Slash,"/",1.0f,1.0f); 
    189182    addKey(pos,osgGA::GUIEventAdapter::KEY_Shift_R,"Shift",2.0f,0.5f); 
    190183 
     
    193186     
    194187    addKey(pos,osgGA::GUIEventAdapter::KEY_Caps_Lock,"Caps",2.0f,0.5f); 
    195     addKey('A',addKey(pos,'a',"A",1.0f,1.0f)); 
    196     addKey('S',addKey(pos,'s',"S",1.0f,1.0f)); 
    197     addKey('D',addKey(pos,'d',"D",1.0f,1.0f)); 
    198     addKey('F',addKey(pos,'f',"F",1.0f,1.0f)); 
    199     addKey('G',addKey(pos,'g',"G",1.0f,1.0f)); 
    200     addKey('H',addKey(pos,'h',"H",1.0f,1.0f)); 
    201     addKey('J',addKey(pos,'j',"J",1.0f,1.0f)); 
    202     addKey('K',addKey(pos,'k',"K",1.0f,1.0f)); 
    203     addKey('L',addKey(pos,'l',"L",1.0f,1.0f)); 
    204     addKey(':',addKey(pos,';',";",1.0f,1.0f)); 
    205     addKey('@',addKey(pos,'\'',"'",1.0f,1.0f)); 
    206     addKey('~',addKey(pos,'#',"#",1.0f,1.0f)); 
     188    addKey(pos,osgGA::GUIEventAdapter::KEY_A,"A",1.0f,1.0f); 
     189    addKey(pos,osgGA::GUIEventAdapter::KEY_S,"S",1.0f,1.0f); 
     190    addKey(pos,osgGA::GUIEventAdapter::KEY_D,"D",1.0f,1.0f); 
     191    addKey(pos,osgGA::GUIEventAdapter::KEY_F,"F",1.0f,1.0f); 
     192    addKey(pos,osgGA::GUIEventAdapter::KEY_G,"G",1.0f,1.0f); 
     193    addKey(pos,osgGA::GUIEventAdapter::KEY_H,"H",1.0f,1.0f); 
     194    addKey(pos,osgGA::GUIEventAdapter::KEY_J,"J",1.0f,1.0f); 
     195    addKey(pos,osgGA::GUIEventAdapter::KEY_K,"K",1.0f,1.0f); 
     196    addKey(pos,osgGA::GUIEventAdapter::KEY_L,"L",1.0f,1.0f); 
     197    addKey(pos,osgGA::GUIEventAdapter::KEY_Semicolon,";",1.0f,1.0f); 
     198    addKey(pos,osgGA::GUIEventAdapter::KEY_Quote,"'",1.0f,1.0f); 
     199    addKey(pos,osgGA::GUIEventAdapter::KEY_Hash,"#",1.0f,1.0f); 
    207200    addKey(pos,osgGA::GUIEventAdapter::KEY_Return,"Return",4.0f,0.5f); 
    208201 
     
    211204     
    212205    addKey(pos,osgGA::GUIEventAdapter::KEY_Tab,"Tab",2.0f,0.5f); 
    213     addKey('Q',addKey(pos,'q',"Q",1.0f,1.0f)); 
    214     addKey('W',addKey(pos,'w',"W",1.0f,1.0f)); 
    215     addKey('E',addKey(pos,'e',"E",1.0f,1.0f)); 
    216     addKey('R',addKey(pos,'r',"R",1.0f,1.0f)); 
    217     addKey('T',addKey(pos,'t',"T",1.0f,1.0f)); 
    218     addKey('Y',addKey(pos,'y',"Y",1.0f,1.0f)); 
    219     addKey('U',addKey(pos,'u',"U",1.0f,1.0f)); 
    220     addKey('I',addKey(pos,'i',"I",1.0f,1.0f)); 
    221     addKey('O',addKey(pos,'o',"O",1.0f,1.0f)); 
    222     addKey('P',addKey(pos,'p',"P",1.0f,1.0f)); 
    223     addKey('{',addKey(pos,'[',"[",1.0f,1.0f)); 
    224     addKey('}',addKey(pos,']',"]",1.0f,1.0f)); 
     206    addKey(pos,osgGA::GUIEventAdapter::KEY_Q,"Q",1.0f,1.0f); 
     207    addKey(pos,osgGA::GUIEventAdapter::KEY_W,"W",1.0f,1.0f); 
     208    addKey(pos,osgGA::GUIEventAdapter::KEY_E,"E",1.0f,1.0f); 
     209    addKey(pos,osgGA::GUIEventAdapter::KEY_R,"R",1.0f,1.0f); 
     210    addKey(pos,osgGA::GUIEventAdapter::KEY_T,"T",1.0f,1.0f); 
     211    addKey(pos,osgGA::GUIEventAdapter::KEY_Y,"Y",1.0f,1.0f); 
     212    addKey(pos,osgGA::GUIEventAdapter::KEY_U,"U",1.0f,1.0f); 
     213    addKey(pos,osgGA::GUIEventAdapter::KEY_I,"I",1.0f,1.0f); 
     214    addKey(pos,osgGA::GUIEventAdapter::KEY_O,"O",1.0f,1.0f); 
     215    addKey(pos,osgGA::GUIEventAdapter::KEY_P,"P",1.0f,1.0f); 
     216    addKey(pos,osgGA::GUIEventAdapter::KEY_Leftbracket,"[",1.0f,1.0f); 
     217    addKey(pos,osgGA::GUIEventAdapter::KEY_Rightbracket,"]",1.0f,1.0f); 
    225218 
    226219    pos.x() = 0.0f; 
    227220    pos.z() += 1.0f; 
    228221     
    229     addKey(pos,'`',"`",1.0f,1.0f); 
    230     addKey(pos,'1',"1",1.0f,1.0f); 
    231     addKey(pos,'2',"2",1.0f,1.0f); 
    232     addKey(pos,'3',"3",1.0f,1.0f); 
    233     addKey(pos,'4',"4",1.0f,1.0f); 
    234     addKey(pos,'5',"5",1.0f,1.0f); 
    235     addKey(pos,'6',"6",1.0f,1.0f); 
    236     addKey(pos,'7',"7",1.0f,1.0f); 
    237     addKey(pos,'8',"8",1.0f,1.0f); 
    238     addKey(pos,'9',"9",1.0f,1.0f); 
    239     addKey(pos,'0',"0",1.0f,1.0f); 
    240     addKey(pos,'-',"-",1.0f,1.0f); 
    241     addKey(pos,'=',"=",1.0f,1.0f); 
     222    addKey(pos,osgGA::GUIEventAdapter::KEY_Backquote,"`",1.0f,1.0f); 
     223    addKey(pos,osgGA::GUIEventAdapter::KEY_1,"1",1.0f,1.0f); 
     224    addKey(pos,osgGA::GUIEventAdapter::KEY_2,"2",1.0f,1.0f); 
     225    addKey(pos,osgGA::GUIEventAdapter::KEY_3,"3",1.0f,1.0f); 
     226    addKey(pos,osgGA::GUIEventAdapter::KEY_4,"4",1.0f,1.0f); 
     227    addKey(pos,osgGA::GUIEventAdapter::KEY_5,"5",1.0f,1.0f); 
     228    addKey(pos,osgGA::GUIEventAdapter::KEY_6,"6",1.0f,1.0f); 
     229    addKey(pos,osgGA::GUIEventAdapter::KEY_7,"7",1.0f,1.0f); 
     230    addKey(pos,osgGA::GUIEventAdapter::KEY_8,"8",1.0f,1.0f); 
     231    addKey(pos,osgGA::GUIEventAdapter::KEY_9,"9",1.0f,1.0f); 
     232    addKey(pos,osgGA::GUIEventAdapter::KEY_0,"0",1.0f,1.0f); 
     233    addKey(pos,osgGA::GUIEventAdapter::KEY_Minus,"-",1.0f,1.0f); 
     234    addKey(pos,osgGA::GUIEventAdapter::KEY_Equals,"=",1.0f,1.0f); 
    242235    addKey(pos,osgGA::GUIEventAdapter::KEY_BackSpace,"Backspace",3.0f,0.5f); 
    243236 
     
    406399                case(osgGA::GUIEventAdapter::KEYDOWN): 
    407400                { 
    408                     _keyboardModel->keyChange(ea.getKey(),1); 
     401                    _keyboardModel->keyChange(ea.getKey(), ea.getUnmodifiedKey(),1); 
    409402                    return true; 
    410403                } 
    411404                case(osgGA::GUIEventAdapter::KEYUP): 
    412405                { 
    413                     _keyboardModel->keyChange(ea.getKey(),0); 
     406                    _keyboardModel->keyChange(ea.getKey(), ea.getUnmodifiedKey(),0); 
    414407                    return true; 
    415408                }