diff --git a/include/osgGA/StateSetManipulator b/include/osgGA/StateSetManipulator index abf30d236..30ce9cd32 100644 --- a/include/osgGA/StateSetManipulator +++ b/include/osgGA/StateSetManipulator @@ -69,6 +69,19 @@ public: void cyclePolygonMode(); + + void setKeyEventToggleBackfaceCulling(int key) { _keyEventToggleBackfaceCulling = key; } + int getKeyEventToggleBackfaceCulling() const { return _keyEventToggleBackfaceCulling; } + + void setKeyEventToggleLighting(int key) { _keyEventToggleLighting = key; } + int getKeyEventToggleLighting() const { return _keyEventToggleLighting; } + + void setKeyEventToggleTexturing(int key) { _keyEventToggleTexturing = key; } + int getKeyEventToggleTexturing() const { return _keyEventToggleTexturing; } + + void setKeyEventCyclePolygonMode(int key) { _keyEventCyclePolygonMode = key; } + int getKeyEventCyclePolygonMode() const { return _keyEventCyclePolygonMode; } + protected: virtual ~StateSetManipulator(); @@ -81,6 +94,11 @@ protected: bool _texture; unsigned int _maxNumOfTextureUnits; + int _keyEventToggleBackfaceCulling; + int _keyEventToggleLighting; + int _keyEventToggleTexturing; + int _keyEventCyclePolygonMode; + osg::PolygonMode* getOrCreatePolygonMode(); }; diff --git a/src/osgGA/StateSetManipulator.cpp b/src/osgGA/StateSetManipulator.cpp index 30b56f900..a4be13f7b 100644 --- a/src/osgGA/StateSetManipulator.cpp +++ b/src/osgGA/StateSetManipulator.cpp @@ -21,7 +21,11 @@ StateSetManipulator::StateSetManipulator(osg::StateSet* stateset): _backface(false), _lighting(false), _texture(false), - _maxNumOfTextureUnits(4) + _maxNumOfTextureUnits(4), + _keyEventToggleBackfaceCulling('b'), + _keyEventToggleLighting('l'), + _keyEventToggleTexturing('t'), + _keyEventCyclePolygonMode('w') { setStateSet(stateset); } @@ -72,62 +76,44 @@ bool StateSetManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& aa) if (ea.getHandled()) return false; - if(ea.getEventType()==GUIEventAdapter::KEYDOWN) + if (ea.getEventType()==osgGA::GUIEventAdapter::KEYDOWN) { - switch( ea.getKey() ) + if ( ea.getKey() == _keyEventToggleBackfaceCulling ) + { + setBackfaceEnabled(!getBackfaceEnabled()); + aa.requestRedraw(); + return true; + } + if ( ea.getKey() == _keyEventToggleLighting ) { - - case 'b' : - setBackfaceEnabled(!getBackfaceEnabled()); - aa.requestRedraw(); - return true; - break; - - case 'l' : setLightingEnabled(!getLightingEnabled()); aa.requestRedraw(); return true; - break; - - case 't' : + } + if ( ea.getKey() == _keyEventToggleTexturing ) + { setTextureEnabled(!getTextureEnabled()); aa.requestRedraw(); return true; - break; - - case 'w' : + } + if ( ea.getKey() == _keyEventCyclePolygonMode ) + { cyclePolygonMode(); aa.requestRedraw(); - break; - -#if COMPILE_TEXENVFILTER_USAGE - case 'm' : - { - osg::TexEnvFilter* texenvfilter = dynamic_cast(_stateset->getTextureAttribute(0,osg::StateAttribute::TEXENVFILTER)); - if (!texenvfilter) - { - texenvfilter = new osg::TexEnvFilter; - _stateset->setTextureAttribute(0,texenvfilter); - } - - // cycle through the available modes. - texenvfilter->setLodBias(texenvfilter->getLodBias()+0.1); - aa.requestRedraw(); - } - break; -#endif + return true; } } + return false; } void StateSetManipulator::getUsage(osg::ApplicationUsage& usage) const { - usage.addKeyboardMouseBinding("b","Toggle backface culling"); - usage.addKeyboardMouseBinding("l","Toggle lighting"); - usage.addKeyboardMouseBinding("t","Toggle texturing"); - usage.addKeyboardMouseBinding("w","Toggle polygon fill mode between fill, line (wire frame) and points"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleBackfaceCulling),"Toggle backface culling"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleLighting),"Toggle lighting"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventToggleTexturing),"Toggle texturing"); + usage.addKeyboardMouseBinding(reinterpret_cast(&_keyEventCyclePolygonMode),"Toggle polygon fill mode between fill, line (wire frame) and points"); }