diff --git a/src/osgGA/NodeTrackerManipulator.cpp b/src/osgGA/NodeTrackerManipulator.cpp index 266262d7e..158b93966 100644 --- a/src/osgGA/NodeTrackerManipulator.cpp +++ b/src/osgGA/NodeTrackerManipulator.cpp @@ -213,7 +213,7 @@ bool NodeTrackerManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& { double timeSinceLastRecordEvent = _ga_t0.valid() ? (ea.getTime() - _ga_t0->getTime()) : DBL_MAX; - if (timeSinceLastRecordEvent>0.02) addMouseEvent(ea); + if (timeSinceLastRecordEvent>0.02) flushMouseEventStack(); if (isMouseMoving()) { @@ -422,9 +422,18 @@ bool NodeTrackerManipulator::calcMovement() double dy = _ga_t0->getYnormalized()-_ga_t1->getYnormalized(); + float distance = sqrtf(dx*dx + dy*dy); + // return if movement is too fast, indicating an error in event values or change in screen. + if (distance>0.5) + { + return false; + } + // return if there is no movement. - if (dx==0 && dy==0) return false; - + if (distance==0.0f) + { + return false; + } osg::Vec3d nodeCenter; osg::Quat nodeRotation; diff --git a/src/osgGA/TrackballManipulator.cpp b/src/osgGA/TrackballManipulator.cpp index ac0deb0ea..5ba05b5cb 100644 --- a/src/osgGA/TrackballManipulator.cpp +++ b/src/osgGA/TrackballManipulator.cpp @@ -108,7 +108,7 @@ bool TrackballManipulator::handle(const GUIEventAdapter& ea,GUIActionAdapter& us { double timeSinceLastRecordEvent = _ga_t0.valid() ? (ea.getTime() - _ga_t0->getTime()) : DBL_MAX; - if (timeSinceLastRecordEvent>0.02) addMouseEvent(ea); + if (timeSinceLastRecordEvent>0.02) flushMouseEventStack(); if (isMouseMoving()) { @@ -250,9 +250,16 @@ bool TrackballManipulator::calcMovement() float dx = _ga_t0->getXnormalized()-_ga_t1->getXnormalized(); float dy = _ga_t0->getYnormalized()-_ga_t1->getYnormalized(); + + float distance = sqrtf(dx*dx + dy*dy); + // return if movement is too fast, indicating an error in event values or change in screen. + if (distance>0.5) + { + return false; + } // return if there is no movement. - if (dx==0.0f && dy==0.0f) + if (distance==0.0f) { return false; }