From e8bae33143a85e1103cc04491897d6c6c068bfff Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Fri, 4 Nov 2011 12:47:24 +0000 Subject: [PATCH] Improved the handling of setStartTick() being called mid app, such as when idirectly called when doing a Viewer::setSceneData(). Improved the setting the the initial event state. --- src/osgViewer/CompositeViewer.cpp | 13 +++++++++++++ src/osgViewer/GraphicsWindowX11.cpp | 2 ++ src/osgViewer/Viewer.cpp | 26 +++++++++++++++++++++----- 3 files changed, 36 insertions(+), 5 deletions(-) diff --git a/src/osgViewer/CompositeViewer.cpp b/src/osgViewer/CompositeViewer.cpp index d963d5ef7..518e4f82f 100644 --- a/src/osgViewer/CompositeViewer.cpp +++ b/src/osgViewer/CompositeViewer.cpp @@ -645,6 +645,19 @@ void CompositeViewer::advance(double simulationTime) ++vitr) { View* view = vitr->get(); + + osgGA::GUIEventAdapter* eventState = view->getEventQueue()->getCurrentEventState(); + if (view->getCamera()->getViewport()) + { + osg::Viewport* viewport = view->getCamera()->getViewport(); + eventState->setInputRange( viewport->x(), viewport->y(), viewport->x() + viewport->width(), viewport->y() + viewport->height()); + } + else + { + eventState->setInputRange(-1.0, -1.0, 1.0, 1.0); + } + + view->getEventQueue()->frame( getFrameStamp()->getReferenceTime() ); } diff --git a/src/osgViewer/GraphicsWindowX11.cpp b/src/osgViewer/GraphicsWindowX11.cpp index d9eef95f6..4db051fb0 100644 --- a/src/osgViewer/GraphicsWindowX11.cpp +++ b/src/osgViewer/GraphicsWindowX11.cpp @@ -1200,6 +1200,8 @@ void GraphicsWindowX11::checkEvents() double eventTime = baseTime; double resizeTime = eventTime; _timeOfLastCheckEvents = getEventQueue()->getTime(); + if (baseTime>_timeOfLastCheckEvents) baseTime = _timeOfLastCheckEvents; + // OSG_NOTICE<<"GraphicsWindowX11::checkEvents() : getEventQueue()->getCurrentEventState()->getGraphicsContext()="<getCurrentEventState()->getGraphicsContext()<getCurrentEventState(); + if (getCamera()->getViewport()) + { + osg::Viewport* viewport = getCamera()->getViewport(); + eventState->setInputRange( viewport->x(), viewport->y(), viewport->x() + viewport->width(), viewport->y() + viewport->height()); + } + else + { + eventState->setInputRange(-1.0, -1.0, 1.0, 1.0); + } } @@ -588,6 +598,17 @@ void Viewer::advance(double simulationTime) if (_eventQueue.valid()) { + osgGA::GUIEventAdapter* eventState = getEventQueue()->getCurrentEventState(); + if (getCamera()->getViewport()) + { + osg::Viewport* viewport = getCamera()->getViewport(); + eventState->setInputRange( viewport->x(), viewport->y(), viewport->x() + viewport->width(), viewport->y() + viewport->height()); + } + else + { + eventState->setInputRange(-1.0, -1.0, 1.0, 1.0); + } + _eventQueue->frame( getFrameStamp()->getReferenceTime() ); } @@ -637,11 +658,6 @@ void Viewer::eventTraversal() { osg::Viewport* viewport = getCamera()->getViewport(); masterCameraVPW *= viewport->computeWindowMatrix(); - eventState->setInputRange( viewport->x(), viewport->y(), viewport->x() + viewport->width(), viewport->y() + viewport->height()); - } - else - { - eventState->setInputRange(-1.0, -1.0, 1.0, 1.0); }