bool QDeclarativeTester::eventFilter(QObject *o, QEvent *e) { if (!filterEvents) return false; Destination destination; if (o == m_view) { destination = View; } else if (o == m_view->viewport()) { destination = ViewPort; } else { return false; } switch (e->type()) { case QEvent::KeyPress: case QEvent::KeyRelease: addKeyEvent(destination, (QKeyEvent *)e); return true; case QEvent::MouseButtonPress: case QEvent::MouseButtonRelease: case QEvent::MouseMove: case QEvent::MouseButtonDblClick: addMouseEvent(destination, (QMouseEvent *)e); return true; default: break; } return false; }
bool CameraManipulator::handlePush(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us) { if (ea.getButtonMask() == osgGA::GUIEventAdapter::MIDDLE_MOUSE_BUTTON) { if (_distance != 0) { lastDistance = _distance; osg::Vec3d eye, cameraCenter, up; osgViewer::Viewer* viewer = dynamic_cast<osgViewer::Viewer*>( &us ); viewer->getCamera()->getViewMatrixAsLookAt(eye, cameraCenter, up); _center = eye; _distance = 0; } else _distance = lastDistance; return true; } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; } }
bool CameraManipulator::handleScroll(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us) { addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; }
bool OrbitCameraManipulator::handleMouseRelease( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ) { osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa); if( !view ) return false; if( ea.getButtonMask() == 0 ) { double timeSinceLastRecordEvent = _ga_t0.valid() ? (ea.getTime() - _ga_t0->getTime()) : DBL_MAX; if( timeSinceLastRecordEvent > 0.02 ) { flushMouseEventStack(); } if( isMouseMoving() ) { if( performMovement( ea, aa ) && _allowThrow ) { aa.requestRedraw(); aa.requestContinuousUpdate( true ); _thrown = true; // TODO: fade out throw animation } return true; } } if( !m_pointer_push_drag ) { // select object bool intersection_geometry_found = intersectSceneSelect( ea, view ); if( !intersection_geometry_found ) { // click to background -> unselect all if( m_system != nullptr ) { m_system->clearSelection(); } } } m_pointer_push_drag = false; flushMouseEventStack(); addMouseEvent( ea ); if( performMovement( ea, aa ) ) { aa.requestRedraw(); } aa.requestContinuousUpdate( false ); _thrown = false; return true; }
bool CameraManipulator::handleRelease(const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& us) { if (ea.getButtonMask()==0) { double timeSinceLastRecordEvent = _ga_t0.valid() ? (ea.getTime() - _ga_t0->getTime()) : DBL_MAX; if (timeSinceLastRecordEvent>0.02) flushMouseEventStack(); if (isMouseMoving()) { if (calcMovement()) { us.requestRedraw(); us.requestContinuousUpdate(true); _thrown = _allowThrow; } } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } } else { flushMouseEventStack(); addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; } return true; }
bool OrbitCameraManipulator::handleMouseDrag( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ) { addMouseEvent( ea ); m_pointer_push_drag = true; if( performMovement( ea, aa ) ) { aa.requestRedraw(); } aa.requestContinuousUpdate( false ); _thrown = false; return true; }
/**************************************************************************** PARAMETERS: mask - Event mask butstate - Button state x - Mouse x coordinate y - Mouse y coordinate REMARKS: Mouse event handling routine. This gets called when a mouse event occurs, and we call the addMouseEvent() routine to add the appropriate mouse event to the event queue. Note: Interrupts are ON when this routine is called by the mouse driver code. ****************************************************************************/ static void EVTAPI mouseISR( uint mask, uint butstate, int x, int y, int mickeyX, int mickeyY) { RMREGS regs; uint ps; if (mask & 1) { /* Save the current mouse coordinates */ _EVT_mx = x; _EVT_my = y; /* Call mouse function 11 to clear the motion counters */ regs.x.ax = 11; PM_int86(0x33,®s,®s); mickeyX = (short)regs.x.cx; mickeyY = (short)regs.x.dx; /* If the last event was a movement event, then modify the last * event rather than post a new one, so that the queue will not * become saturated. Before we modify the data structures, we * MUST ensure that interrupts are off. */ ps = _EVT_disableInt(); if (oldMove != -1) { evtq[oldMove].where_x = x; /* Modify existing one */ evtq[oldMove].where_y = y; evtq[oldMove].relative_x += mickeyX; evtq[oldMove].relative_y += mickeyY; } else { oldMove = freeHead; /* Save id of this move event */ addMouseEvent(EVT_MOUSEMOVE,0,x,y,mickeyX,mickeyY,butstate); } _EVT_restoreInt(ps); } if (mask & 0x2A) { ps = _EVT_disableInt(); addMouseEvent(EVT_MOUSEDOWN,mask >> 1,x,y,0,0,butstate); oldMove = -1; _EVT_restoreInt(ps); }
/*AM: be installed until it is. */ ****************************************************************************/ static void EVTAPI mouseISR( uint mask, uint butstate, int x, int y, int mickeyX, int mickeyY) { RMREGS regs; uint ps; if (mask & 1) { /* Save the current mouse coordinates */ EVT.mx = x; EVT.my = y; /* If the last event was a movement event, then modify the last * event rather than post a new one, so that the queue will not * become saturated. Before we modify the data structures, we * MUST ensure that interrupts are off. */ ps = _EVT_disableInt(); if (EVT.oldMove != -1) { EVT.evtq[EVT.oldMove].where_x = x; /* Modify existing one */ EVT.evtq[EVT.oldMove].where_y = y; EVT.evtq[EVT.oldMove].relative_x += mickeyX; EVT.evtq[EVT.oldMove].relative_y += mickeyY; } else { EVT.oldMove = EVT.freeHead; /* Save id of this move event */ addMouseEvent(EVT_MOUSEMOVE,0,x,y,mickeyX,mickeyY,butstate); } _EVT_restoreInt(ps); } if (mask & 0x2A) { ps = _EVT_disableInt(); addMouseEvent(EVT_MOUSEDOWN,mask >> 1,x,y,0,0,butstate); EVT.oldMove = -1; _EVT_restoreInt(ps); }
// mouse button has been pushed down bool OrbitCameraManipulator::handleMousePush( const osgGA::GUIEventAdapter& ea, osgGA::GUIActionAdapter& aa ) { osgViewer::View* view = dynamic_cast<osgViewer::View*>(&aa); if( !view ) { return false; } m_pointer_push_drag = false; flushMouseEventStack(); addMouseEvent( ea ); m_ga_pointer_push = &ea; intersectSceneRotateCenter( ea, view ); int buttonMask = ea.getButtonMask(); if( buttonMask == osgGA::GUIEventAdapter::MIDDLE_MOUSE_BUTTON || buttonMask == (osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON | osgGA::GUIEventAdapter::RIGHT_MOUSE_BUTTON) ) { m_pan_point.set( m_pointer_intersection ); } if( buttonMask == osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON ) { osg::Vec3d distance_intersect_eye( m_pointer_intersection - m_eye ); //double distance_eye_intersection = distance_intersect_eye.length(); // rotate the intersection cone into mouse ray direction if( m_intersect_hit_geometry ) { } } aa.requestRedraw(); aa.requestContinuousUpdate( false ); _thrown = false; return false; }
bool FPSManipulator::handle(const osgGA::GUIEventAdapter& ea,osgGA::GUIActionAdapter& us) { /* switch(ea.getEventType()) { case(GUIEventAdapter::FRAME): if (_thrown) { if (calcMovement()) us.requestRedraw(); } return false; default: break; }*/ if (ea.getHandled()) return false; switch(ea.getEventType()) { //if a key is pressed flush the previous states /* case(GUIEventAdapter::PUSH): { flushMouseEventStack(); addMouseEvent(ea); return true; } case(GUIEventAdapter::RELEASE): { if (ea.getButtonMask()==0) { double timeSinceLastRecordEvent = _ga_t0.valid() ? (ea.getTime() - _ga_t0->getTime()) : DBL_MAX; if (timeSinceLastRecordEvent>0.02) flushMouseEventStack(); calcMovement(); } else { flushMouseEventStack(); addMouseEvent(ea); } return true; }*/ /* case(GUIEventAdapter::DRAG): { addMouseEvent(ea); if (calcMovement()) us.requestRedraw(); us.requestContinuousUpdate(false); _thrown = false; return true; }*/ /* case(GUIEventAdapter::MOVE): { return false; }*/ case(osgGA::GUIEventAdapter::KEYDOWN): if (ea.getKey()== osgGA::GUIEventAdapter::KEY_Space) //home on space bar { flushMouseEventStack(); home(0.); return true; } return false; case(osgGA::GUIEventAdapter::FRAME): { addMouseEvent(ea); calcMovement(); } return false; default: return false; } }