Fixed handling of warp pointer for when its called at startup and the

event queue isn't yet initialized the window range.
This commit is contained in:
Robert Osfield 2007-02-15 12:11:16 +00:00
parent b717790dcb
commit 4f2474ece8

View File

@ -350,14 +350,18 @@ const osg::Camera* View::getCameraContainingPosition(float x, float y, float& lo
{ {
const osg::Viewport* viewport = _camera->getViewport(); const osg::Viewport* viewport = _camera->getViewport();
osg::Vec2d new_coord(x, y); double new_x = static_cast<double>(_camera->getGraphicsContext()->getTraits()->width) * (x - eventState->getXmin())/(eventState->getXmax()-eventState->getXmin());
double new_y = view_invert_y ?
static_cast<double>(_camera->getGraphicsContext()->getTraits()->height) * (1.0 - (y- eventState->getYmin()))/(eventState->getYmax()-eventState->getYmin()) :
static_cast<double>(_camera->getGraphicsContext()->getTraits()->height) * (y - eventState->getYmin())/(eventState->getYmax()-eventState->getXmin());
if (viewport && if (viewport &&
new_coord.x() >= (viewport->x()-epsilon) && new_coord.y() >= (viewport->y()-epsilon) && new_x >= (viewport->x()-epsilon) && new_y >= (viewport->y()-epsilon) &&
new_coord.x() < (viewport->x()+viewport->width()-1.0+epsilon) && new_coord.y() <= (viewport->y()+viewport->height()-1.0+epsilon) ) new_x < (viewport->x()+viewport->width()-1.0+epsilon) && new_y <= (viewport->y()+viewport->height()-1.0+epsilon) )
{ {
local_x = new_coord.x(); local_x = new_x;
local_y = new_coord.y(); local_y = new_y;
return _camera.get(); return _camera.get();
} }
} }
@ -369,10 +373,6 @@ const osg::Camera* View::getCameraContainingPosition(float x, float y, float& lo
if (view_invert_y) y = - y; if (view_invert_y) y = - y;
// osg::notify(osg::NOTICE)<<" remapped ("<<x<<","<<y<<")"<<std::endl;;
// osg::notify(osg::NOTICE)<<" number of slaves = "<<getNumSlaves()<<std::endl;;
for(unsigned i=0; i<getNumSlaves(); ++i) for(unsigned i=0; i<getNumSlaves(); ++i)
{ {
const Slave& slave = getSlave(i); const Slave& slave = getSlave(i);