1px error in GUIEventAdapter, View, Viewer and CompositeViewer major fix
This commit is contained in:
parent
d011ca4e8d
commit
e663330bdf
@ -86,7 +86,7 @@ void GUIEventAdapter::setWindowRectangle(int x, int y, int width, int height, bo
|
|||||||
|
|
||||||
if (updateMouseRange)
|
if (updateMouseRange)
|
||||||
{
|
{
|
||||||
setInputRange(0, 0, width, height);
|
setInputRange(0, 0, width - 1, height - 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -753,7 +753,7 @@ void CompositeViewer::generateSlavePointerData(osg::Camera* camera, osgGA::GUIEv
|
|||||||
float y = event.getY();
|
float y = event.getY();
|
||||||
|
|
||||||
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
||||||
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - y;
|
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - 1 - y;
|
||||||
|
|
||||||
double master_min_x = -1.0;
|
double master_min_x = -1.0;
|
||||||
double master_max_x = 1.0;
|
double master_max_x = 1.0;
|
||||||
@ -766,8 +766,8 @@ void CompositeViewer::generateSlavePointerData(osg::Camera* camera, osgGA::GUIEv
|
|||||||
osg::Viewport* viewport = view_masterCamera->getViewport();
|
osg::Viewport* viewport = view_masterCamera->getViewport();
|
||||||
master_min_x = viewport->x();
|
master_min_x = viewport->x();
|
||||||
master_min_y = viewport->y();
|
master_min_y = viewport->y();
|
||||||
master_max_x = viewport->x()+viewport->width();
|
master_max_x = viewport->x() + viewport->width() - 1;
|
||||||
master_max_y = viewport->y()+viewport->height();
|
master_max_y = viewport->y() + viewport->height() - 1;
|
||||||
masterCameraVPW *= viewport->computeWindowMatrix();
|
masterCameraVPW *= viewport->computeWindowMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -847,10 +847,10 @@ void CompositeViewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
|||||||
float y = event.getY();
|
float y = event.getY();
|
||||||
|
|
||||||
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
||||||
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - y;
|
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - 1 - y;
|
||||||
|
|
||||||
event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width,
|
event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width - 1,
|
||||||
y, 0, gw->getTraits()->height));
|
y, 0, gw->getTraits()->height - 1));
|
||||||
|
|
||||||
event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
||||||
|
|
||||||
@ -869,7 +869,7 @@ void CompositeViewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
|||||||
osg::Viewport* viewport = camera->getViewport();
|
osg::Viewport* viewport = camera->getViewport();
|
||||||
if (viewport &&
|
if (viewport &&
|
||||||
x >= viewport->x() && y >= viewport->y() &&
|
x >= viewport->x() && y >= viewport->y() &&
|
||||||
x <= (viewport->x()+viewport->width()) && y <= (viewport->y()+viewport->height()) )
|
x < (viewport->x()+viewport->width()) && y < (viewport->y()+viewport->height()) )
|
||||||
{
|
{
|
||||||
activeCameras.push_back(camera);
|
activeCameras.push_back(camera);
|
||||||
}
|
}
|
||||||
@ -884,8 +884,8 @@ void CompositeViewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
|||||||
{
|
{
|
||||||
osg::Viewport* viewport = camera->getViewport();
|
osg::Viewport* viewport = camera->getViewport();
|
||||||
|
|
||||||
event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/viewport->width()*2.0f-1.0f, -1.0, 1.0,
|
event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/(viewport->width() - 1)*2.0f-1.0f, -1.0, 1.0,
|
||||||
(y-viewport->y())/viewport->height()*2.0f-1.0f, -1.0, 1.0));
|
(y-viewport->y())/(viewport->height() - 1)*2.0f-1.0f, -1.0, 1.0));
|
||||||
|
|
||||||
osgViewer::View* view = dynamic_cast<osgViewer::View*>(camera->getView());
|
osgViewer::View* view = dynamic_cast<osgViewer::View*>(camera->getView());
|
||||||
osg::Camera* view_masterCamera = view ? view->getCamera() : 0;
|
osg::Camera* view_masterCamera = view ? view->getCamera() : 0;
|
||||||
@ -907,10 +907,10 @@ void CompositeViewer::reprojectPointerData(osgGA::GUIEventAdapter& source_event,
|
|||||||
float y = dest_event.getY();
|
float y = dest_event.getY();
|
||||||
|
|
||||||
bool invert_y = dest_event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
bool invert_y = dest_event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
||||||
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - y;
|
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - 1 - y;
|
||||||
|
|
||||||
dest_event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width,
|
dest_event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width - 1,
|
||||||
y, 0, gw->getTraits()->height));
|
y, 0, gw->getTraits()->height - 1));
|
||||||
|
|
||||||
dest_event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
dest_event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
||||||
|
|
||||||
@ -920,8 +920,8 @@ void CompositeViewer::reprojectPointerData(osgGA::GUIEventAdapter& source_event,
|
|||||||
|
|
||||||
if (!viewport) return;
|
if (!viewport) return;
|
||||||
|
|
||||||
dest_event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/viewport->width()*2.0f-1.0f, -1.0, 1.0,
|
dest_event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/(viewport->width() - 1)*2.0f-1.0f, -1.0, 1.0,
|
||||||
(y-viewport->y())/viewport->height()*2.0f-1.0f, -1.0, 1.0));
|
(y-viewport->y())/(viewport->height() - 1)*2.0f-1.0f, -1.0, 1.0));
|
||||||
|
|
||||||
osgViewer::View* view = dynamic_cast<osgViewer::View*>(camera->getView());
|
osgViewer::View* view = dynamic_cast<osgViewer::View*>(camera->getView());
|
||||||
osg::Camera* view_masterCamera = view ? view->getCamera() : 0;
|
osg::Camera* view_masterCamera = view ? view->getCamera() : 0;
|
||||||
|
@ -857,7 +857,7 @@ void View::requestWarpPointer(float x,float y)
|
|||||||
getEventQueue()->mouseWarped(x,y);
|
getEventQueue()->mouseWarped(x,y);
|
||||||
if (gw->getEventQueue()->getCurrentEventState()->getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS)
|
if (gw->getEventQueue()->getCurrentEventState()->getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS)
|
||||||
{
|
{
|
||||||
local_y = gw->getTraits()->height - local_y;
|
local_y = gw->getTraits()->height - 1 - local_y;
|
||||||
}
|
}
|
||||||
const_cast<osgViewer::GraphicsWindow*>(gw)->getEventQueue()->mouseWarped(local_x,local_y);
|
const_cast<osgViewer::GraphicsWindow*>(gw)->getEventQueue()->mouseWarped(local_x,local_y);
|
||||||
const_cast<osgViewer::GraphicsWindow*>(gw)->requestWarpPointer(local_x, local_y);
|
const_cast<osgViewer::GraphicsWindow*>(gw)->requestWarpPointer(local_x, local_y);
|
||||||
@ -915,7 +915,7 @@ const osg::Camera* View::getCameraContainingPosition(float x, float y, float& lo
|
|||||||
new_y *= static_cast<double>(_camera->getGraphicsContext()->getTraits()->height);
|
new_y *= static_cast<double>(_camera->getGraphicsContext()->getTraits()->height);
|
||||||
|
|
||||||
if (new_x >= (viewport->x()-epsilon) && new_y >= (viewport->y()-epsilon) &&
|
if (new_x >= (viewport->x()-epsilon) && new_y >= (viewport->y()-epsilon) &&
|
||||||
new_x < (viewport->x()+viewport->width()-1.0+epsilon) && new_y <= (viewport->y()+viewport->height()-1.0+epsilon) )
|
new_x < (viewport->x()+viewport->width()+epsilon) && new_y < (viewport->y()+viewport->height()+epsilon) )
|
||||||
{
|
{
|
||||||
local_x = new_x;
|
local_x = new_x;
|
||||||
local_y = new_y;
|
local_y = new_y;
|
||||||
@ -963,7 +963,7 @@ const osg::Camera* View::getCameraContainingPosition(float x, float y, float& lo
|
|||||||
|
|
||||||
if (viewport &&
|
if (viewport &&
|
||||||
new_coord.x() >= (viewport->x()-epsilon) && new_coord.y() >= (viewport->y()-epsilon) &&
|
new_coord.x() >= (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) )
|
new_coord.x() < (viewport->x()+viewport->width()+epsilon) && new_coord.y() < (viewport->y()+viewport->height()+epsilon) )
|
||||||
{
|
{
|
||||||
// OSG_NOTICE<<" in viewport "<<std::endl;;
|
// OSG_NOTICE<<" in viewport "<<std::endl;;
|
||||||
|
|
||||||
|
@ -701,7 +701,7 @@ void Viewer::generateSlavePointerData(osg::Camera* camera, osgGA::GUIEventAdapte
|
|||||||
float y = event.getY();
|
float y = event.getY();
|
||||||
|
|
||||||
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
||||||
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - y;
|
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - 1 - y;
|
||||||
|
|
||||||
double master_min_x = -1.0;
|
double master_min_x = -1.0;
|
||||||
double master_max_x = 1.0;
|
double master_max_x = 1.0;
|
||||||
@ -714,8 +714,8 @@ void Viewer::generateSlavePointerData(osg::Camera* camera, osgGA::GUIEventAdapte
|
|||||||
osg::Viewport* viewport = getCamera()->getViewport();
|
osg::Viewport* viewport = getCamera()->getViewport();
|
||||||
master_min_x = viewport->x();
|
master_min_x = viewport->x();
|
||||||
master_min_y = viewport->y();
|
master_min_y = viewport->y();
|
||||||
master_max_x = viewport->x()+viewport->width();
|
master_max_x = viewport->x() + viewport->width() - 1;
|
||||||
master_max_y = viewport->y()+viewport->height();
|
master_max_y = viewport->y() + viewport->height() - 1;
|
||||||
masterCameraVPW *= viewport->computeWindowMatrix();
|
masterCameraVPW *= viewport->computeWindowMatrix();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -788,7 +788,6 @@ void Viewer::generateSlavePointerData(osg::Camera* camera, osgGA::GUIEventAdapte
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void Viewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
void Viewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
||||||
{
|
{
|
||||||
osgViewer::GraphicsWindow* gw = dynamic_cast<osgViewer::GraphicsWindow*>(event.getGraphicsContext());
|
osgViewer::GraphicsWindow* gw = dynamic_cast<osgViewer::GraphicsWindow*>(event.getGraphicsContext());
|
||||||
@ -798,10 +797,10 @@ void Viewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
|||||||
float y = event.getY();
|
float y = event.getY();
|
||||||
|
|
||||||
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
bool invert_y = event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
||||||
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - y;
|
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - 1 - y;
|
||||||
|
|
||||||
event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width,
|
event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width - 1,
|
||||||
y, 0, gw->getTraits()->height));
|
y, 0, gw->getTraits()->height - 1));
|
||||||
|
|
||||||
event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
||||||
|
|
||||||
@ -822,7 +821,7 @@ void Viewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
|||||||
osg::Viewport* viewport = camera->getViewport();
|
osg::Viewport* viewport = camera->getViewport();
|
||||||
if (viewport &&
|
if (viewport &&
|
||||||
x >= viewport->x() && y >= viewport->y() &&
|
x >= viewport->x() && y >= viewport->y() &&
|
||||||
x <= (viewport->x()+viewport->width()) && y <= (viewport->y()+viewport->height()) )
|
x < (viewport->x()+viewport->width()) && y < (viewport->y()+viewport->height()) )
|
||||||
{
|
{
|
||||||
activeCameras.push_back(camera);
|
activeCameras.push_back(camera);
|
||||||
}
|
}
|
||||||
@ -837,8 +836,8 @@ void Viewer::generatePointerData(osgGA::GUIEventAdapter& event)
|
|||||||
{
|
{
|
||||||
osg::Viewport* viewport = camera->getViewport();
|
osg::Viewport* viewport = camera->getViewport();
|
||||||
|
|
||||||
event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/viewport->width()*2.0f-1.0f, -1.0, 1.0,
|
event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/(viewport->width() - 1)*2.0f-1.0f, -1.0, 1.0,
|
||||||
(y-viewport->y())/viewport->height()*2.0f-1.0f, -1.0, 1.0));
|
(y-viewport->y())/(viewport->height() - 1)*2.0f-1.0f, -1.0, 1.0));
|
||||||
|
|
||||||
// if camera isn't the master it must be a slave and could need reprojecting.
|
// if camera isn't the master it must be a slave and could need reprojecting.
|
||||||
if (camera!=getCamera())
|
if (camera!=getCamera())
|
||||||
@ -857,10 +856,10 @@ void Viewer::reprojectPointerData(osgGA::GUIEventAdapter& source_event, osgGA::G
|
|||||||
float y = dest_event.getY();
|
float y = dest_event.getY();
|
||||||
|
|
||||||
bool invert_y = dest_event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
bool invert_y = dest_event.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS;
|
||||||
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - y;
|
if (invert_y && gw->getTraits()) y = gw->getTraits()->height - 1 - y;
|
||||||
|
|
||||||
dest_event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width,
|
dest_event.addPointerData(new osgGA::PointerData(gw, x, 0, gw->getTraits()->width - 1,
|
||||||
y, 0, gw->getTraits()->height));
|
y, 0, gw->getTraits()->height - 1));
|
||||||
|
|
||||||
dest_event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
dest_event.setMouseYOrientationAndUpdateCoords(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
||||||
|
|
||||||
@ -870,8 +869,8 @@ void Viewer::reprojectPointerData(osgGA::GUIEventAdapter& source_event, osgGA::G
|
|||||||
|
|
||||||
if (!viewport) return;
|
if (!viewport) return;
|
||||||
|
|
||||||
dest_event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/viewport->width()*2.0f-1.0f, -1.0, 1.0,
|
dest_event.addPointerData(new osgGA::PointerData(camera, (x-viewport->x())/(viewport->width() - 1)*2.0f-1.0f, -1.0, 1.0,
|
||||||
(y-viewport->y())/viewport->height()*2.0f-1.0f, -1.0, 1.0));
|
(y-viewport->y())/(viewport->height() - 1)*2.0f-1.0f, -1.0, 1.0));
|
||||||
|
|
||||||
// if camera isn't the master it must be a slave and could need reprojecting.
|
// if camera isn't the master it must be a slave and could need reprojecting.
|
||||||
if (camera!=getCamera())
|
if (camera!=getCamera())
|
||||||
|
@ -24,7 +24,7 @@ bool MouseHandler::handle(
|
|||||||
// osgWidget assumes origin is bottom left of window so make sure mouse coordinate are increaseing y upwards and are scaled to window size.
|
// osgWidget assumes origin is bottom left of window so make sure mouse coordinate are increaseing y upwards and are scaled to window size.
|
||||||
float x = (gea.getX()-gea.getXmin())/(gea.getXmax()-gea.getXmin())*static_cast<float>(gea.getWindowWidth());
|
float x = (gea.getX()-gea.getXmin())/(gea.getXmax()-gea.getXmin())*static_cast<float>(gea.getWindowWidth());
|
||||||
float y = (gea.getY()-gea.getYmin())/(gea.getYmax()-gea.getYmin())*static_cast<float>(gea.getWindowHeight());
|
float y = (gea.getY()-gea.getYmin())/(gea.getYmax()-gea.getYmin())*static_cast<float>(gea.getWindowHeight());
|
||||||
if (gea.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS) y = static_cast<float>(gea.getWindowHeight())-y;
|
if (gea.getMouseYOrientation()==osgGA::GUIEventAdapter::Y_INCREASING_DOWNWARDS) y = static_cast<float>(gea.getWindowHeight() - 1) - y;
|
||||||
|
|
||||||
//OSG_NOTICE<<"MouseHandler(x="<<x<<", y="<<y<<")"<<std::endl;
|
//OSG_NOTICE<<"MouseHandler(x="<<x<<", y="<<y<<")"<<std::endl;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user