From f0ff4afebc3294d8fd34c1c3dc40692fabfffed4 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Mon, 27 Apr 2009 13:54:22 +0000 Subject: [PATCH] Further improvements in p3d plugin --- src/osgPlugins/p3d/SlideEventHandler.cpp | 21 ++++++++++++++++++++- src/osgPlugins/p3d/SlideEventHandler.h | 3 +++ 2 files changed, 23 insertions(+), 1 deletion(-) diff --git a/src/osgPlugins/p3d/SlideEventHandler.cpp b/src/osgPlugins/p3d/SlideEventHandler.cpp index 374b1d914..eee0e2ea7 100644 --- a/src/osgPlugins/p3d/SlideEventHandler.cpp +++ b/src/osgPlugins/p3d/SlideEventHandler.cpp @@ -632,7 +632,7 @@ SlideEventHandler::SlideEventHandler(osgViewer::Viewer* viewer): _updateOpacityActive(false), _previousX(0), _previousY(0), _cursorOn(true), - _releaseAndCompileOnEachNewSlide(true), + _releaseAndCompileOnEachNewSlide(false), _firstSlideOrLayerChange(true), _tickAtFirstSlideOrLayerChange(0), _tickAtLastSlideOrLayerChange(0), @@ -729,6 +729,25 @@ double SlideEventHandler::getCurrentTimeDelayBetweenSlides() const } +void SlideEventHandler::operator()(osg::Node* node, osg::NodeVisitor* nv) +{ + osgGA::EventVisitor* ev = dynamic_cast(nv); + if (ev) + { + if (node->getNumChildrenRequiringEventTraversal()>0) traverse(node,nv); + + if (ev->getActionAdapter() && !ev->getEvents().empty()) + { + for(osgGA::EventQueue::Events::iterator itr = ev->getEvents().begin(); + itr != ev->getEvents().end(); + ++itr) + { + handleWithCheckAgainstIgnoreHandledEventsMask(*(*itr), *(ev->getActionAdapter()), node, nv); + } + } + } +} + bool SlideEventHandler::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& aa) { diff --git a/src/osgPlugins/p3d/SlideEventHandler.h b/src/osgPlugins/p3d/SlideEventHandler.h index 416427e11..2a6034f30 100644 --- a/src/osgPlugins/p3d/SlideEventHandler.h +++ b/src/osgPlugins/p3d/SlideEventHandler.h @@ -95,6 +95,9 @@ public: virtual void accept(osgGA::GUIEventHandlerVisitor& v) { v.visit(*this); } + /** Event traversal node callback method.*/ + virtual void operator()(osg::Node* node, osg::NodeVisitor* nv); + virtual bool handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter&); virtual void getUsage(osg::ApplicationUsage& usage) const;