From 987fe5d93b69e680da2d4c5aa81dc3a254fa5b25 Mon Sep 17 00:00:00 2001 From: Robert Osfield Date: Wed, 21 Feb 2007 19:41:53 +0000 Subject: [PATCH] Added ability to discount Camera's that arn't appropriate for event focus --- src/osgViewer/View.cpp | 20 ++++++++++++++------ src/osgViewer/Viewer.cpp | 19 ++++++++++++++++++- 2 files changed, 32 insertions(+), 7 deletions(-) diff --git a/src/osgViewer/View.cpp b/src/osgViewer/View.cpp index cda52cb25..d77ab8bf3 100644 --- a/src/osgViewer/View.cpp +++ b/src/osgViewer/View.cpp @@ -340,7 +340,7 @@ const osg::Camera* View::getCameraContainingPosition(float x, float y, float& lo const osgGA::GUIEventAdapter* eventState = getEventQueue()->getCurrentEventState(); bool view_invert_y = eventState->getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS; - osg::notify(osg::INFO)<<"View::getCameraContainingPosition("<=0; --i) { const Slave& slave = getSlave(i); - if (slave._camera.valid()) + if (slave._camera.valid() && + slave._camera->getAllowEventFocus() && + slave._camera->getRenderTargetImplementation()==osg::Camera::FRAME_BUFFER) { + osg::notify(osg::NOTICE)<<"Testing slave camera "<getName()<getViewport() : 0; @@ -386,13 +392,15 @@ const osg::Camera* View::getCameraContainingPosition(float x, float y, float& lo osg::Vec3d new_coord = osg::Vec3d(x,y,0.0) * matrix; - // osg::notify(osg::NOTICE)<<" new_coord "<getXmin()="<getXmin()<<" eventState->getXmax()="<getXmax()<= (viewport->x()-epsilon) && new_coord.y() >= (viewport->y()-epsilon) && new_coord.x() < (viewport->x()+viewport->width()-1.0+epsilon) && new_coord.y() <= (viewport->y()+viewport->height()-1.0+epsilon) ) { - // osg::notify(osg::NOTICE)<<" in viewport "<x()<<" "<<(viewport->x()+viewport->width())<x()<<" "<<(viewport->x()+viewport->width())<getView()==this) + if (camera->getView()==this && + camera->getAllowEventFocus() && + camera->getRenderTargetImplementation()==osg::Camera::FRAME_BUFFER) { osg::Viewport* viewport = camera ? camera->getViewport() : 0; if (viewport && x >= viewport->x() && y >= viewport->y() && x <= (viewport->x()+viewport->width()) && y <= (viewport->y()+viewport->height()) ) { + // osg::notify(osg::NOTICE)<<"setCamera with focus "<getName()<<" x="<