#include #ifdef WIN32 #include #else #include #endif using namespace osgProducer; void KeyboardMouseCallback::buttonPress( float mx, float my, unsigned int mbutton ) { _mx = mx; _my = my; _mbutton |= (1<<(mbutton-1)); osg::ref_ptr event = new EventAdapter; event->adaptButtonPress(getTime(),mx,my,mbutton); _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::buttonRelease( float mx, float my, unsigned int mbutton ) { _mx = mx; _my = my; _mbutton &= ~(1<<(mbutton-1)); osg::ref_ptr event = new EventAdapter; event->adaptButtonRelease(getTime(),mx,my,mbutton); _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::doubleButtonPress( float mx, float my, unsigned int mbutton ) { _mx = mx; _my = my; _mbutton |= (1<<(mbutton-1)); osg::ref_ptr event = new EventAdapter; event->adaptButtonPress(getTime(),mx,my,mbutton); _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::keyPress( Producer::KeyCharacter key ) { osg::ref_ptr event = new EventAdapter; event->adaptKeyPress(getTime(),key); #ifdef WIN32 if (_escapeKeySetsDone && event->getKey()==VK_ESCAPE) _done = true; #endif // check against adapted key symbol. if (_escapeKeySetsDone && event->getKey()==osgGA::GUIEventAdapter::KEY_Escape) _done = true; _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::keyRelease( Producer::KeyCharacter key ) { osg::ref_ptr event = new EventAdapter; event->adaptKeyRelease(getTime(),key); _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::specialKeyPress( Producer::KeyCharacter key ) { osg::ref_ptr event = new EventAdapter; event->adaptKeyPress(getTime(),key); #ifdef WIN32 if (_escapeKeySetsDone && event->getKey()==VK_ESCAPE) _done = true; #endif // check against adapted key symbol. if (_escapeKeySetsDone && event->getKey()==osgGA::GUIEventAdapter::KEY_Escape) _done = true; _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::specialKeyRelease( Producer::KeyCharacter key ) { osg::ref_ptr event = new EventAdapter; event->adaptKeyRelease(getTime(),key); _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::mouseMotion( float mx, float my) { _mx = mx; _my = my; osg::ref_ptr event = new EventAdapter; event->adaptMouseMotion(getTime(),mx,my); _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::passiveMouseMotion( float mx, float my) { _mx = mx; _my = my; osg::ref_ptr event = new EventAdapter; event->adaptMouseMotion(getTime(),mx,my); _eventQueueMutex.lock(); _eventQueue.push_back(event); _eventQueueMutex.unlock(); } void KeyboardMouseCallback::getEventQueue(EventQueue& queue) { queue.clear(); _eventQueueMutex.lock(); _eventQueue.swap(queue); _eventQueueMutex.unlock(); }