Converted osgGA::GUIEventAdapter into a concrete class capable of respresenting
keyboard and mouse events. Added osgGA::EventQueue class to support a thread safe event queue and adaption of keyboard and mouse events. Removed osgProducer::EventAdapter as GUIEventAdapter replaces it. Adapted osgProducer and examples to work with the new changes to osgGA.
This commit is contained in:
@@ -1,229 +0,0 @@
|
||||
#include <osgProducer/EventAdapter>
|
||||
|
||||
using namespace osgProducer;
|
||||
|
||||
// default to no mouse buttons being pressed.
|
||||
unsigned int EventAdapter::_s_accumulatedButtonMask = 0;
|
||||
|
||||
int EventAdapter::_s_button = 0;
|
||||
int EventAdapter::_s_modKeyMask = 0;
|
||||
float EventAdapter::_s_Xmin = 0;
|
||||
float EventAdapter::_s_Xmax = 1280;
|
||||
float EventAdapter::_s_Ymin = 0;
|
||||
float EventAdapter::_s_Ymax = 1024;
|
||||
float EventAdapter::_s_mx = 0;
|
||||
float EventAdapter::_s_my = 0;
|
||||
|
||||
EventAdapter::EventAdapter():
|
||||
osgGA::GUIEventAdapter(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS)
|
||||
{
|
||||
_eventType = NONE; // adaptor does not encapsulate any events.
|
||||
_key = -1; // set to 'invalid' key value.
|
||||
_button = -1; // set to 'invalid' button value.
|
||||
_mx = -1; // set to 'invalid' position value.
|
||||
_my = -1; // set to 'invalid' position value.
|
||||
_buttonMask = 0; // default to no mouse buttons being pressed.
|
||||
_modKeyMask = 0; // default to no mouse buttons being pressed.
|
||||
_time = 0.0f; // default to no time has been set.
|
||||
|
||||
copyStaticVariables();
|
||||
|
||||
}
|
||||
|
||||
|
||||
void EventAdapter::copyStaticVariables()
|
||||
{
|
||||
_buttonMask = _s_accumulatedButtonMask;
|
||||
_modKeyMask = _s_modKeyMask;
|
||||
_button = _s_button;
|
||||
_Xmin = _s_Xmin;
|
||||
_Xmax = _s_Xmax;
|
||||
_Ymin = _s_Ymin;
|
||||
_Ymax = _s_Ymax;
|
||||
_mx = _s_mx;
|
||||
_my = _s_my;
|
||||
}
|
||||
|
||||
|
||||
void EventAdapter::setWindowSize(float Xmin, float Ymin, float Xmax, float Ymax)
|
||||
{
|
||||
_s_Xmin = Xmin;
|
||||
_s_Xmax = Xmax;
|
||||
_s_Ymin = Ymin;
|
||||
_s_Ymax = Ymax;
|
||||
}
|
||||
|
||||
|
||||
void EventAdapter::setButtonMask(unsigned int buttonMask)
|
||||
{
|
||||
_s_accumulatedButtonMask = buttonMask;
|
||||
}
|
||||
|
||||
|
||||
void EventAdapter::adaptResize(double time, float Xmin, float Ymin, float Xmax, float Ymax)
|
||||
{
|
||||
setWindowSize(Xmin,Ymin,Xmax,Ymax);
|
||||
_eventType = RESIZE;
|
||||
_time = time;
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
void EventAdapter::adaptMouseScroll(double time, Producer::KeyboardMouseCallback::ScrollingMotion sm)
|
||||
{
|
||||
_time = time;
|
||||
|
||||
if (sm == Producer::KeyboardMouseCallback::ScrollUp)
|
||||
_eventType = SCROLLUP;
|
||||
else if (sm == Producer::KeyboardMouseCallback::ScrollDown)
|
||||
_eventType = SCROLLDOWN;
|
||||
else
|
||||
_eventType = NONE;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
void EventAdapter::adaptButtonPress(double time,float x, float y, unsigned int button)
|
||||
{
|
||||
_time = time;
|
||||
|
||||
_eventType = PUSH;
|
||||
_button = button-1;
|
||||
|
||||
switch(_button)
|
||||
{
|
||||
case(0):
|
||||
_s_accumulatedButtonMask = _s_accumulatedButtonMask | LEFT_MOUSE_BUTTON;
|
||||
_s_button = LEFT_MOUSE_BUTTON;
|
||||
break;
|
||||
case(1):
|
||||
_s_accumulatedButtonMask = _s_accumulatedButtonMask | MIDDLE_MOUSE_BUTTON;
|
||||
_s_button = MIDDLE_MOUSE_BUTTON;
|
||||
break;
|
||||
case(2):
|
||||
_s_accumulatedButtonMask = _s_accumulatedButtonMask | RIGHT_MOUSE_BUTTON;
|
||||
_s_button = RIGHT_MOUSE_BUTTON;
|
||||
break;
|
||||
}
|
||||
|
||||
_s_mx = x;
|
||||
_s_my = y;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
void EventAdapter::adaptButtonRelease(double time,float x, float y, unsigned int button)
|
||||
{
|
||||
_time = time;
|
||||
|
||||
_eventType = RELEASE;
|
||||
_button = button-1;
|
||||
|
||||
switch(_button)
|
||||
{
|
||||
case(0):
|
||||
_s_accumulatedButtonMask = _s_accumulatedButtonMask & ~LEFT_MOUSE_BUTTON;
|
||||
_s_button = LEFT_MOUSE_BUTTON;
|
||||
break;
|
||||
case(1):
|
||||
_s_accumulatedButtonMask = _s_accumulatedButtonMask & ~MIDDLE_MOUSE_BUTTON;
|
||||
_s_button = MIDDLE_MOUSE_BUTTON;
|
||||
break;
|
||||
case(2):
|
||||
_s_accumulatedButtonMask = _s_accumulatedButtonMask & ~RIGHT_MOUSE_BUTTON;
|
||||
_s_button = RIGHT_MOUSE_BUTTON;
|
||||
break;
|
||||
}
|
||||
|
||||
_s_mx = x;
|
||||
_s_my = y;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
/** method for adapting mouse motion events whilst mouse buttons are pressed.*/
|
||||
void EventAdapter::adaptMouseMotion(double time, float x, float y)
|
||||
{
|
||||
|
||||
_eventType = (_s_accumulatedButtonMask) ?
|
||||
DRAG :
|
||||
MOVE;
|
||||
|
||||
_time = time;
|
||||
_s_mx = x;
|
||||
_s_my = y;
|
||||
copyStaticVariables();
|
||||
|
||||
}
|
||||
|
||||
|
||||
/** method for adapting keyboard events.*/
|
||||
void EventAdapter::adaptKeyPress( double time, Producer::KeySymbol key)
|
||||
{
|
||||
_eventType = KEYDOWN;
|
||||
_time = time;
|
||||
_key = key;
|
||||
|
||||
switch(key)
|
||||
{
|
||||
case(KEY_Shift_L): _s_modKeyMask = MODKEY_LEFT_SHIFT | _s_modKeyMask; break;
|
||||
case(KEY_Shift_R): _s_modKeyMask = MODKEY_RIGHT_SHIFT | _s_modKeyMask; break;
|
||||
case(KEY_Control_L): _s_modKeyMask = MODKEY_LEFT_CTRL | _s_modKeyMask; break;
|
||||
case(KEY_Control_R): _s_modKeyMask = MODKEY_RIGHT_CTRL | _s_modKeyMask; break;
|
||||
case(KEY_Meta_L): _s_modKeyMask = MODKEY_LEFT_META | _s_modKeyMask; break;
|
||||
case(KEY_Meta_R): _s_modKeyMask = MODKEY_RIGHT_META | _s_modKeyMask; break;
|
||||
case(KEY_Alt_L): _s_modKeyMask = MODKEY_LEFT_ALT | _s_modKeyMask; break;
|
||||
case(KEY_Alt_R): _s_modKeyMask = MODKEY_LEFT_ALT | _s_modKeyMask; break;
|
||||
|
||||
case(KEY_Caps_Lock):
|
||||
{
|
||||
if ((_s_modKeyMask & MODKEY_CAPS_LOCK)!=0)
|
||||
_s_modKeyMask = ~MODKEY_CAPS_LOCK & _s_modKeyMask;
|
||||
else
|
||||
_s_modKeyMask = MODKEY_CAPS_LOCK | _s_modKeyMask;
|
||||
break;
|
||||
}
|
||||
case(KEY_Num_Lock):
|
||||
{
|
||||
if ((_s_modKeyMask & MODKEY_NUM_LOCK)!=0)
|
||||
_s_modKeyMask = ~MODKEY_NUM_LOCK & _s_modKeyMask;
|
||||
else
|
||||
_s_modKeyMask = MODKEY_NUM_LOCK | _s_modKeyMask;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
void EventAdapter::adaptKeyRelease( double time, Producer::KeySymbol key)
|
||||
{
|
||||
// we won't handle this correctly right now.. GUIEventAdapter isn't up to it
|
||||
_eventType = KEYUP;
|
||||
_time = time;
|
||||
_key = key;
|
||||
|
||||
switch(key)
|
||||
{
|
||||
case(KEY_Shift_L): _s_modKeyMask = ~MODKEY_LEFT_SHIFT & _s_modKeyMask; break;
|
||||
case(KEY_Shift_R): _s_modKeyMask = ~MODKEY_RIGHT_SHIFT & _s_modKeyMask; break;
|
||||
case(KEY_Control_L): _s_modKeyMask = ~MODKEY_LEFT_CTRL & _s_modKeyMask; break;
|
||||
case(KEY_Control_R): _s_modKeyMask = ~MODKEY_RIGHT_CTRL & _s_modKeyMask; break;
|
||||
case(KEY_Meta_L): _s_modKeyMask = ~MODKEY_LEFT_META & _s_modKeyMask; break;
|
||||
case(KEY_Meta_R): _s_modKeyMask = ~MODKEY_RIGHT_META & _s_modKeyMask; break;
|
||||
case(KEY_Alt_L): _s_modKeyMask = ~MODKEY_LEFT_ALT & _s_modKeyMask; break;
|
||||
case(KEY_Alt_R): _s_modKeyMask = ~MODKEY_LEFT_ALT & _s_modKeyMask; break;
|
||||
}
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
|
||||
|
||||
|
||||
/** method for adapting frame events, i.e. iddle/display callback.*/
|
||||
void EventAdapter::adaptFrame(double time)
|
||||
{
|
||||
_eventType = FRAME;
|
||||
_time = time;
|
||||
|
||||
copyStaticVariables();
|
||||
}
|
||||
@@ -2,7 +2,6 @@ TOPDIR = ../..
|
||||
include $(TOPDIR)/Make/makedefs
|
||||
|
||||
CXXFILES =\
|
||||
EventAdapter.cpp\
|
||||
KeyboardMouseCallback.cpp\
|
||||
GraphicsContextImplementation.cpp\
|
||||
OsgCameraGroup.cpp\
|
||||
|
||||
@@ -7,212 +7,98 @@
|
||||
|
||||
using namespace osgProducer;
|
||||
|
||||
KeyboardMouseCallback::KeyboardMouseCallback(Producer::KeyboardMouse* keyboardMouse, bool &done, bool escapeKeySetsDone):
|
||||
Producer::KeyboardMouseCallback(),
|
||||
_keyboardMouse(keyboardMouse),
|
||||
_mx(0.0f),_my(0.0f),_mbutton(0),
|
||||
_done(done),
|
||||
_escapeKeySetsDone(escapeKeySetsDone)
|
||||
{
|
||||
_eventQueue = new osgGA::EventQueue;
|
||||
_eventQueue->getCurrentEventState()->setMouseYOrientation(osgGA::GUIEventAdapter::Y_INCREASING_UPWARDS);
|
||||
updateWindowSize();
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::mouseScroll( Producer::KeyboardMouseCallback::ScrollingMotion sm )
|
||||
{
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptMouseScroll(getTime(), sm);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
_eventQueue->mouseScroll((osgGA::GUIEventAdapter::ScrollingMotion)sm);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::buttonPress( float mx, float my, unsigned int mbutton )
|
||||
{
|
||||
_mx = mx;
|
||||
_my = my;
|
||||
_mbutton |= (1<<(mbutton-1));
|
||||
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptButtonPress(getTime(),mx,my,mbutton);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
_eventQueue->mouseButtonPress(mx,my,mbutton);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::buttonRelease( float mx, float my, unsigned int mbutton )
|
||||
{
|
||||
_mx = mx;
|
||||
_my = my;
|
||||
_mbutton &= ~(1<<(mbutton-1));
|
||||
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptButtonRelease(getTime(),mx,my,mbutton);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
_eventQueue->mouseButtonRelease(mx,my,mbutton);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::doubleButtonPress( float mx, float my, unsigned int mbutton )
|
||||
{
|
||||
_mx = mx;
|
||||
_my = my;
|
||||
_mbutton |= (1<<(mbutton-1));
|
||||
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptButtonPress(getTime(),mx,my,mbutton);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
_eventQueue->mouseButtonPress(mx,my,mbutton);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::keyPress( Producer::KeyCharacter key )
|
||||
{
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptKeyPress(getTime(),key);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
_eventQueue->keyPress((osgGA::GUIEventAdapter::KeySymbol)key);
|
||||
|
||||
// check against adapted key symbol.
|
||||
if (_escapeKeySetsDone &&
|
||||
event->getKey()==osgGA::GUIEventAdapter::KEY_Escape) _done = true;
|
||||
(osgGA::GUIEventAdapter::KeySymbol)key==osgGA::GUIEventAdapter::KEY_Escape) _done = true;
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::keyRelease( Producer::KeyCharacter key )
|
||||
{
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptKeyRelease(getTime(),key);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
_eventQueue->keyRelease((osgGA::GUIEventAdapter::KeySymbol)key);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::specialKeyPress( Producer::KeyCharacter key )
|
||||
{
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptKeyPress(getTime(),key);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
// check against adapted key symbol.
|
||||
if (_escapeKeySetsDone &&
|
||||
event->getKey()==osgGA::GUIEventAdapter::KEY_Escape) _done = true;
|
||||
updateWindowSize();
|
||||
keyPress(key);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::specialKeyRelease( Producer::KeyCharacter key )
|
||||
{
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptKeyRelease(getTime(),key);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
keyRelease(key);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::windowConfig( int x, int y, unsigned int width, unsigned int height )
|
||||
{
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptResize(getTime(), x, y, x+width, y+height );
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
updateWindowSize();
|
||||
_eventQueue->windowResize(x,y,x+width,y+height);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::mouseMotion( float mx, float my)
|
||||
{
|
||||
_mx = mx;
|
||||
_my = my;
|
||||
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptMouseMotion(getTime(),mx,my);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
updateWindowSize();
|
||||
_eventQueue->mouseMotion(mx,my);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::passiveMouseMotion( float mx, float my)
|
||||
{
|
||||
_mx = mx;
|
||||
_my = my;
|
||||
|
||||
//std::cout << "mx="<<mx<<" my="<<my<<std::endl;
|
||||
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
event->adaptMouseMotion(getTime(),mx,my);
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
updateWindowSize();
|
||||
_eventQueue->mouseMotion(mx,my);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::mouseWarp( float mx, float my)
|
||||
{
|
||||
_mx = mx;
|
||||
_my = my;
|
||||
|
||||
osg::ref_ptr<EventAdapter> event = createEventAdapter();
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
_eventQueue.push_back(event);
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
updateWindowSize();
|
||||
_eventQueue->mouseMotion(mx,my); // need mouse warp??
|
||||
}
|
||||
|
||||
double KeyboardMouseCallback::getEventQueue(EventQueue& queue)
|
||||
|
||||
void KeyboardMouseCallback::updateWindowSize()
|
||||
{
|
||||
double swapTime;
|
||||
|
||||
queue.clear();
|
||||
_eventQueueMutex.lock();
|
||||
_eventQueue.swap(queue);
|
||||
swapTime = getTime();
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
return swapTime;
|
||||
}
|
||||
|
||||
double KeyboardMouseCallback::copyEventQueue(EventQueue& queue) const
|
||||
{
|
||||
double swapTime;
|
||||
|
||||
queue.clear();
|
||||
_eventQueueMutex.lock();
|
||||
queue = _eventQueue;
|
||||
swapTime = getTime();
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
return swapTime;
|
||||
}
|
||||
|
||||
double KeyboardMouseCallback::setEventQueue(EventQueue& queue)
|
||||
{
|
||||
double swapTime;
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
_eventQueue = queue;
|
||||
swapTime = getTime();
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
return swapTime;
|
||||
}
|
||||
|
||||
double KeyboardMouseCallback::appendEventQueue(EventQueue& queue)
|
||||
{
|
||||
double swapTime;
|
||||
|
||||
_eventQueueMutex.lock();
|
||||
_eventQueue.insert(_eventQueue.end(),queue.begin(),queue.end());
|
||||
swapTime = getTime();
|
||||
_eventQueueMutex.unlock();
|
||||
|
||||
return swapTime;
|
||||
}
|
||||
|
||||
EventAdapter* KeyboardMouseCallback::createEventAdapter()
|
||||
{
|
||||
EventAdapter* ea = new EventAdapter;
|
||||
osgGA::GUIEventAdapter* ea = _eventQueue->getCurrentEventState();
|
||||
|
||||
Producer::InputArea* ia = _keyboardMouse->getInputArea();
|
||||
Producer::RenderSurface* rs = _keyboardMouse->getRenderSurface();
|
||||
@@ -257,8 +143,27 @@ EventAdapter* KeyboardMouseCallback::createEventAdapter()
|
||||
|
||||
ea->setWindowSize(minX,minY,maxX,maxY);
|
||||
}
|
||||
|
||||
return ea;
|
||||
}
|
||||
|
||||
bool KeyboardMouseCallback::takeEventQueue(EventQueue& queue)
|
||||
{
|
||||
updateWindowSize();
|
||||
return _eventQueue->takeEvents(queue);
|
||||
}
|
||||
|
||||
bool KeyboardMouseCallback::copyEventQueue(EventQueue& queue) const
|
||||
{
|
||||
return _eventQueue->copyEvents(queue);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::setEventQueue(EventQueue& queue)
|
||||
{
|
||||
_eventQueue->setEvents(queue);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::appendEventQueue(EventQueue& queue)
|
||||
{
|
||||
_eventQueue->appendEvents(queue);
|
||||
}
|
||||
|
||||
void KeyboardMouseCallback::shutdown()
|
||||
@@ -266,3 +171,8 @@ void KeyboardMouseCallback::shutdown()
|
||||
_done = true;
|
||||
_keyboardMouse->cancel();
|
||||
}
|
||||
|
||||
osgGA::GUIEventAdapter* KeyboardMouseCallback::createEventAdapter()
|
||||
{
|
||||
return new osgGA::GUIEventAdapter(*(_eventQueue->getCurrentEventState()));
|
||||
}
|
||||
|
||||
@@ -363,7 +363,7 @@ void Viewer::setUpViewer(unsigned int options)
|
||||
if (!_kbmcb)
|
||||
_kbmcb = new osgProducer::KeyboardMouseCallback( _kbm.get(), _done, (options & ESCAPE_SETS_DONE)!=0 );
|
||||
|
||||
_kbmcb->setStartTick(_start_tick);
|
||||
_kbmcb->getEventQueue()->setStartTick(_start_tick);
|
||||
|
||||
// register the callback with the keyboard mouse manger.
|
||||
_kbm->setCallback( _kbmcb.get() );
|
||||
@@ -541,8 +541,9 @@ bool Viewer::realize()
|
||||
{
|
||||
_keyswitchManipulator->setCoordinateFrameCallback(new ViewerCoordinateFrameCallback(this));
|
||||
|
||||
osg::ref_ptr<osgProducer::EventAdapter> init_event = _kbmcb->createEventAdapter();
|
||||
init_event->adaptFrame(0.0);
|
||||
osg::ref_ptr<osgGA::GUIEventAdapter> init_event = new osgGA::GUIEventAdapter;
|
||||
init_event->setEventType(osgGA::GUIEventAdapter::FRAME);
|
||||
init_event->setTime(0.0);
|
||||
|
||||
_keyswitchManipulator->setNode(getTopMostSceneData());
|
||||
_keyswitchManipulator->home(*init_event,*this);
|
||||
@@ -565,14 +566,12 @@ void Viewer::update()
|
||||
if (_kbm.valid() && !_kbm->isRunning()) _kbm->update(*(_kbm->getCallback()));
|
||||
#endif
|
||||
|
||||
// create an event to signal the new frame.
|
||||
_kbmcb->getEventQueue()->frame(_frameStamp->getReferenceTime());
|
||||
|
||||
// get the event since the last frame.
|
||||
osgProducer::KeyboardMouseCallback::EventQueue queue;
|
||||
if (_kbmcb.valid()) _kbmcb->getEventQueue(queue);
|
||||
|
||||
// create an event to signal the new frame.
|
||||
osg::ref_ptr<osgProducer::EventAdapter> frame_event = new osgProducer::EventAdapter;
|
||||
frame_event->adaptFrame(_frameStamp->getReferenceTime());
|
||||
queue.push_back(frame_event);
|
||||
if (_kbmcb.valid()) _kbmcb->takeEventQueue(queue);
|
||||
|
||||
if (_eventVisitor.valid())
|
||||
{
|
||||
@@ -842,9 +841,11 @@ void Viewer::selectCameraManipulator(unsigned int no)
|
||||
// keyswitch manipulator doesn't yet force manipulators to init themselves
|
||||
// so we'll do this mannually. Note pretty, and needs replacing by a refactor
|
||||
// of MatrixMinpulators in the longer term.
|
||||
osg::ref_ptr<EventAdapter> ea = new EventAdapter;
|
||||
osg::ref_ptr<osgGA::GUIEventAdapter> ea = new osgGA::GUIEventAdapter;
|
||||
double time = _kbmcb.valid() ? _kbmcb->getTime() : 0.0;
|
||||
ea->adaptKeyPress(time, osgGA::GUIEventAdapter::KEY_KP_1+no);
|
||||
ea->setTime(time);
|
||||
ea->setEventType(osgGA::GUIEventAdapter::KEYDOWN);
|
||||
ea->setKey(osgGA::GUIEventAdapter::KEY_KP_1+no);
|
||||
_keyswitchManipulator->init(*ea, *this);
|
||||
}
|
||||
}
|
||||
@@ -914,8 +915,8 @@ void Viewer::requestWarpPointer(float x,float y)
|
||||
{
|
||||
osg::notify(osg::INFO) << "requestWarpPointer x= "<<x<<" y="<<y<<std::endl;
|
||||
|
||||
EventAdapter::_s_mx = x;
|
||||
EventAdapter::_s_my = y;
|
||||
_kbmcb->getEventQueue()->getCurrentEventState()->setX(x);
|
||||
_kbmcb->getEventQueue()->getCurrentEventState()->setY(y);
|
||||
_kbmcb->getKeyboardMouse()->positionPointer(x,y);
|
||||
return;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user