From 4613269a8137d1a252f23b215270dc98fc063984 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Tue, 22 May 2007 13:48:21 +0000 Subject: [PATCH] Changed the way the the InputRange is adjusted on the event state to fix bugs related to picking --- src/osgViewer/CompositeViewer.cpp | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) diff --git a/src/osgViewer/CompositeViewer.cpp b/src/osgViewer/CompositeViewer.cpp index b767ea1da..7ffdd9d80 100644 --- a/src/osgViewer/CompositeViewer.cpp +++ b/src/osgViewer/CompositeViewer.cpp @@ -867,13 +867,7 @@ void CompositeViewer::eventTraversal() { osg::Viewport* viewport = masterCamera->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); - } - for(Contexts::iterator citr = contexts.begin(); citr != contexts.end(); @@ -904,6 +898,9 @@ void CompositeViewer::eventTraversal() switch(event->getEventType()) { + case(osgGA::GUIEventAdapter::RESIZE): + setCameraWithFocus(0); + break; case(osgGA::GUIEventAdapter::PUSH): case(osgGA::GUIEventAdapter::RELEASE): case(osgGA::GUIEventAdapter::DRAG): @@ -930,6 +927,16 @@ void CompositeViewer::eventTraversal() { setCameraWithFocus(camera); + const osg::GraphicsContext::Traits* traits = gw ? gw->getTraits() : 0; + if (traits) + { + eventState->setInputRange( 0, 0, traits->width, traits->height); + } + else + { + eventState->setInputRange(-1.0, -1.0, 1.0, 1.0); + } + if (getViewWithFocus()!=masterView) { // need to reset the masterView @@ -937,15 +944,11 @@ void CompositeViewer::eventTraversal() masterCamera = masterView->getCamera(); eventState = masterView->getEventQueue()->getCurrentEventState(); masterCameraVPW = masterCamera->getViewMatrix() * masterCamera->getProjectionMatrix(); + if (masterCamera->getViewport()) { osg::Viewport* viewport = masterCamera->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); } } }