Introduced new scheme for handling mouse events with osgViewer. The new scheme enables robust event handling even when using distortion correction render to texture Cameras.

This commit is contained in:
Robert Osfield
2013-05-03 19:26:27 +00:00
parent 63088ab63e
commit 668d351765
36 changed files with 1116 additions and 698 deletions

View File

@@ -132,6 +132,11 @@ bool EventQueue::copyEvents(Events& events) const
}
}
void EventQueue::syncWindowRectangleWithGraphcisContext()
{
const osg::GraphicsContext::Traits* traits = (getGraphicsContext()!=0) ? getGraphicsContext()->getTraits() : 0;
if (traits) _accumulateEventState->setWindowRectangle(traits->x, traits->y, traits->width, traits->height, !_useFixedMouseInputRange);
}
void EventQueue::windowResize(int x, int y, int width, int height, double time)
{
@@ -490,6 +495,8 @@ void EventQueue::frame(double time)
GUIEventAdapter* event = new GUIEventAdapter(*_accumulateEventState);
event->setEventType(GUIEventAdapter::FRAME);
event->setTime(time);
OSG_NOTICE<<"frame("<<time<<"), event->getX()="<<event->getX()<<", event->getY()="<<event->getY()<<", event->getXmin()="<<event->getXmin()<<", event->getYmin()="<<event->getYmin()<<", event->getXmax()="<<event->getXmax()<<", event->getYmax()="<<event->getYmax()<<std::endl;
addEvent(event);
}

View File

@@ -122,3 +122,14 @@ void GUIEventAdapter::addTouchPoint(unsigned int id, TouchPhase phase, float x,
_touchData->addTouchPoint(id, phase, x, y, tapCount);
}
void GUIEventAdapter::copyPointerDataFrom(const osgGA::GUIEventAdapter& sourceEvent)
{
setGraphicsContext(const_cast<osg::GraphicsContext*>(sourceEvent.getGraphicsContext()));
setX(sourceEvent.getX());
setY(sourceEvent.getY());
setInputRange(sourceEvent.getXmin(), sourceEvent.getYmin(), sourceEvent.getXmax(), sourceEvent.getYmax());
setButtonMask(sourceEvent.getButtonMask());
setMouseYOrientation(sourceEvent.getMouseYOrientation());
setPointerDataList(sourceEvent.getPointerDataList());
}