diff --git a/applications/osgviewer/osgviewer.cpp b/applications/osgviewer/osgviewer.cpp index 1f3a662ae..a0f8c2b8b 100644 --- a/applications/osgviewer/osgviewer.cpp +++ b/applications/osgviewer/osgviewer.cpp @@ -19,6 +19,7 @@ #include #include #include +#include #include #include @@ -30,172 +31,6 @@ #include -class ThreadingHandler : public osgGA::GUIEventHandler -{ -public: - - ThreadingHandler() - { - _tickOrLastKeyPress = osg::Timer::instance()->tick(); - } - - - bool handle(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa) - { - osgViewer::Viewer* viewer = dynamic_cast(&aa); - if (!viewer) return false; - - switch(ea.getEventType()) - { - case(osgGA::GUIEventAdapter::KEYUP): - { - - double delta = osg::Timer::instance()->delta_s(_tickOrLastKeyPress, osg::Timer::instance()->tick()); - - if (ea.getKey()=='m' && delta>1.0) - { - - _tickOrLastKeyPress = osg::Timer::instance()->tick(); - - switch(viewer->getThreadingModel()) - { - case(osgViewer::Viewer::SingleThreaded): - viewer->setThreadingModel(osgViewer::Viewer::CullDrawThreadPerContext); - osg::notify(osg::NOTICE)<<"Threading model 'CullDrawThreadPerContext' selected."<setThreadingModel(osgViewer::Viewer::DrawThreadPerContext); - osg::notify(osg::NOTICE)<<"Threading model 'DrawThreadPerContext' selected."<setThreadingModel(osgViewer::Viewer::CullThreadPerCameraDrawThreadPerContext); - osg::notify(osg::NOTICE)<<"Threading model 'CullThreadPerCameraDrawThreadPerContext' selected."<setThreadingModel(osgViewer::Viewer::SingleThreaded); - osg::notify(osg::NOTICE)<<"Threading model 'SingleThreaded' selected."<setThreadingModel(viewer->suggestBestThreadingModel()); - osg::notify(osg::NOTICE)<<"Threading model 'AutomaticSelection' selected."<getEndBarrierPosition()) - { - case(osgViewer::Viewer::BeforeSwapBuffers): - viewer->setEndBarrierPosition(osgViewer::Viewer::AfterSwapBuffers); - osg::notify(osg::NOTICE)<<"Threading model 'AfterSwapBuffers' selected."<setEndBarrierPosition(osgViewer::Viewer::BeforeSwapBuffers); - osg::notify(osg::NOTICE)<<"Threading model 'BeforeSwapBuffers' selected."<(&aa); - if (!viewer) return false; - - switch(ea.getEventType()) - { - case(osgGA::GUIEventAdapter::KEYUP): - { - if (ea.getKey()=='f') - { - osgViewer::Viewer::Windows windows; - viewer->getWindows(windows); - - for(osgViewer::Viewer::Windows::iterator itr = windows.begin(); - itr != windows.end(); - ++itr) - { - toggleFullscreen(*itr); - } - } - } - default: break; - } - - return false; - } - - /** Get the keyboard and mouse usage of this manipulator.*/ - virtual void getUsage(osg::ApplicationUsage& usage) const - { - usage.addKeyboardMouseBinding("f","Toggle full screen."); - } - - - void toggleFullscreen(osgViewer::GraphicsWindow* window) - { - - osg::GraphicsContext::WindowingSystemInterface* wsi = osg::GraphicsContext::getWindowingSystemInterface(); - if (!wsi) - { - osg::notify(osg::NOTICE)<<"Error, no WindowSystemInterface available, cannot toggle window fullscreen."<getScreenResolution(*(window->getTraits()), screen_width, screen_height); - - int x, y, width, height; - window->getWindowRectangle(x, y, width, height); - - bool isFullScreen = x==0 && y==0 && width==screen_width && height==screen_height; - if (isFullScreen) - { - window->setWindowRectangle(screen_width/4, screen_height/4, screen_width/2, screen_height/2); - window->setWindowDecoration(true); - } - else - { - window->setWindowDecoration(false); - window->setWindowRectangle(0, 0, screen_width, screen_height); - } - - window->grabFocusIfPointerInWindow(); - - return; - - } - - - - bool _done; -}; - int main(int argc, char** argv) { // use an ArgumentParser object to manage the program arguments. @@ -271,11 +106,11 @@ int main(int argc, char** argv) viewer.addEventHandler( new osgGA::StateSetManipulator(viewer.getCamera()->getOrCreateStateSet()) ); // add the thread model handler - viewer.addEventHandler(new ThreadingHandler); + viewer.addEventHandler(new osgViewer::ThreadingHandler); - // add the full screen toggle handler - viewer.addEventHandler(new FullScreenToggleHandler); - + // add the window size toggle handler + viewer.addEventHandler(new osgViewer::WindowSizeHandler); + // add the stats handler viewer.addEventHandler(new osgViewer::StatsHandler); diff --git a/include/osgViewer/ViewerEventHandler b/include/osgViewer/ViewerEventHandler index cbd3e041c..e59e2156e 100644 --- a/include/osgViewer/ViewerEventHandler +++ b/include/osgViewer/ViewerEventHandler @@ -18,14 +18,14 @@ namespace osgViewer { - /** - Handler allowing to change the screen resolution (in windowed mode) and toggle between fullscreen and windowed mode. - */ - class OSGVIEWER_EXPORT ScreenHandler : public osgGA::GUIEventHandler - { - public: +/** +Handler allowing to change the screen resolution (in windowed mode) and toggle between fullscreen and windowed mode. +*/ +class OSGVIEWER_EXPORT WindowSizeHandler : public osgGA::GUIEventHandler +{ +public: - ScreenHandler(); + WindowSizeHandler(); /** Get the keyboard and mouse usage of this manipulator.*/ virtual void getUsage(osg::ApplicationUsage &usage) const; @@ -46,7 +46,7 @@ namespace osgViewer { virtual bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa); - protected: +protected: void toggleFullscreen(osgViewer::GraphicsWindow *window); void changeWindowedResolution(osgViewer::GraphicsWindow *window, bool increase); @@ -61,14 +61,14 @@ namespace osgViewer { bool _changeWindowedResolution; std::vector _resolutionList; int _currentResolutionIndex; - }; +}; - /** - Handler allowing to change the viewer threading model - */ - class OSGVIEWER_EXPORT ThreadingHandler : public osgGA::GUIEventHandler - { - public: +/** +Handler allowing to change the viewer threading model +*/ +class OSGVIEWER_EXPORT ThreadingHandler : public osgGA::GUIEventHandler +{ +public: ThreadingHandler(); @@ -89,7 +89,7 @@ namespace osgViewer { bool handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa); - protected: +protected: int _keyEventChangeThreadingModel; bool _changeThreadingModel; @@ -99,7 +99,8 @@ namespace osgViewer { osg::Timer_t _tickOrLastKeyPress; bool _done; - }; +}; + } #endif diff --git a/src/osgViewer/ViewerEventHandler.cpp b/src/osgViewer/ViewerEventHandler.cpp index ca1b8471f..35363c071 100644 --- a/src/osgViewer/ViewerEventHandler.cpp +++ b/src/osgViewer/ViewerEventHandler.cpp @@ -18,16 +18,16 @@ namespace osgViewer { /* -** ScreenHandler +** WindowSizeHandler */ -ScreenHandler::ScreenHandler() : -_keyEventToggleFullscreen('f'), -_toggleFullscreen(true), -_keyEventWindowedResolutionUp('>'), -_keyEventWindowedResolutionDown('<'), -_changeWindowedResolution(true), -_currentResolutionIndex(-1) +WindowSizeHandler::WindowSizeHandler() : + _keyEventToggleFullscreen('f'), + _toggleFullscreen(true), + _keyEventWindowedResolutionUp('>'), + _keyEventWindowedResolutionDown('<'), + _changeWindowedResolution(true), + _currentResolutionIndex(-1) { _resolutionList.push_back(osg::Vec2(640, 480)); _resolutionList.push_back(osg::Vec2(800, 600)); @@ -50,20 +50,20 @@ _currentResolutionIndex(-1) _resolutionList.push_back(osg::Vec2(3840, 2400)); } -void ScreenHandler::getUsage(osg::ApplicationUsage &usage) const +void WindowSizeHandler::getUsage(osg::ApplicationUsage &usage) const { usage.addKeyboardMouseBinding("f", "Toggle full screen."); usage.addKeyboardMouseBinding(">", "Increase the screen resolution (in windowed mode)."); usage.addKeyboardMouseBinding("<", "Decrease the screen resolution (in windowed mode)."); } -bool ScreenHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa) +bool WindowSizeHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAdapter &aa) { osgViewer::Viewer *viewer = dynamic_cast(&aa); if (viewer == NULL) { - return (false); + return false; } switch(ea.getEventType()) @@ -79,9 +79,9 @@ bool ScreenHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAda itr != windows.end(); ++itr) { - this->toggleFullscreen(*itr); + toggleFullscreen(*itr); } - return (true); + return true; } else if (_changeWindowedResolution == true && ea.getKey() == _keyEventWindowedResolutionUp) { @@ -93,9 +93,9 @@ bool ScreenHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAda itr != windows.end(); ++itr) { - this->changeWindowedResolution(*itr, true); + changeWindowedResolution(*itr, true); } - return (true); + return true; } else if (_changeWindowedResolution == true && ea.getKey() == _keyEventWindowedResolutionDown) { @@ -107,19 +107,19 @@ bool ScreenHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIActionAda itr != windows.end(); ++itr) { - this->changeWindowedResolution(*itr, false); + changeWindowedResolution(*itr, false); } - return (true); + return true; } break; } default: break; } - return (false); + return false; } -void ScreenHandler::toggleFullscreen(osgViewer::GraphicsWindow *window) +void WindowSizeHandler::toggleFullscreen(osgViewer::GraphicsWindow *window) { osg::GraphicsContext::WindowingSystemInterface *wsi = osg::GraphicsContext::getWindowingSystemInterface(); @@ -149,7 +149,7 @@ void ScreenHandler::toggleFullscreen(osgViewer::GraphicsWindow *window) if (_currentResolutionIndex == -1) { - _currentResolutionIndex = this->getNearestResolution(screenWidth, screenHeight, screenWidth / 2, screenHeight / 2); + _currentResolutionIndex = getNearestResolution(screenWidth, screenHeight, screenWidth / 2, screenHeight / 2); } resolution = _resolutionList[_currentResolutionIndex]; window->setWindowDecoration(true); @@ -165,7 +165,7 @@ void ScreenHandler::toggleFullscreen(osgViewer::GraphicsWindow *window) window->grabFocusIfPointerInWindow(); } -void ScreenHandler::changeWindowedResolution(osgViewer::GraphicsWindow *window, bool increase) +void WindowSizeHandler::changeWindowedResolution(osgViewer::GraphicsWindow *window, bool increase) { osg::GraphicsContext::WindowingSystemInterface *wsi = osg::GraphicsContext::getWindowingSystemInterface(); @@ -195,7 +195,7 @@ void ScreenHandler::changeWindowedResolution(osgViewer::GraphicsWindow *window, if (_currentResolutionIndex == -1) { - _currentResolutionIndex = this->getNearestResolution(screenWidth, screenHeight, width, height); + _currentResolutionIndex = getNearestResolution(screenWidth, screenHeight, width, height); } if (increase == true) @@ -232,7 +232,7 @@ void ScreenHandler::changeWindowedResolution(osgViewer::GraphicsWindow *window, } } -unsigned int ScreenHandler::getNearestResolution(int screenWidth, int screenHeight, int width, int height) const +unsigned int WindowSizeHandler::getNearestResolution(int screenWidth, int screenHeight, int width, int height) const { unsigned int position = 0; unsigned int result = 0; @@ -261,10 +261,10 @@ unsigned int ScreenHandler::getNearestResolution(int screenWidth, int screenHeig */ ThreadingHandler::ThreadingHandler() : -_keyEventChangeThreadingModel('m'), -_changeThreadingModel(true), -_keyEventChangeEndBarrierPosition('e'), -_changeEndBarrierPosition(true) + _keyEventChangeThreadingModel('m'), + _changeThreadingModel(true), + _keyEventChangeEndBarrierPosition('e'), + _changeEndBarrierPosition(true) { _tickOrLastKeyPress = osg::Timer::instance()->tick(); } @@ -281,7 +281,7 @@ bool ThreadingHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIAction if (viewer == NULL) { - return (false); + return false; } switch(ea.getEventType()) @@ -317,7 +317,7 @@ bool ThreadingHandler::handle(const osgGA::GUIEventAdapter &ea, osgGA::GUIAction osg::notify(osg::NOTICE)<<"Threading model 'AutomaticSelection' selected."<