200 osgGA::GUIActionAdapter& us)
215 && ea.getEventType() != osgGA::GUIEventAdapter::MOVE && ea.getEventType() != osgGA::GUIEventAdapter::DRAG && ea.getEventType() != osgGA::GUIEventAdapter::RELEASE) {
222 switch (ea.getEventType()) {
223 case osgGA::GUIEventAdapter::FRAME:
227 case osgGA::GUIEventAdapter::KEYDOWN:
228 case osgGA::GUIEventAdapter::KEYUP:
232 eventToViewport(ea, us, x, y);
234 (*keyHandler)(key, modmask, x, y);
237 case osgGA::GUIEventAdapter::PUSH:
238 case osgGA::GUIEventAdapter::RELEASE:
240 WindowType window_type = eventToViewport(ea, us, x, y);
241 bool mainWindow = (window_type == WindowType_MAIN);
243 switch (ea.getButton()) {
244 case osgGA::GUIEventAdapter::LEFT_MOUSE_BUTTON:
247 case osgGA::GUIEventAdapter::MIDDLE_MOUSE_BUTTON:
250 case osgGA::GUIEventAdapter::RIGHT_MOUSE_BUTTON:
255 (*mouseClickHandler)(button,
257 == osgGA::GUIEventAdapter::RELEASE), x, y, mainWindow, &ea);
260 case osgGA::GUIEventAdapter::SCROLL:
262 WindowType window_type = eventToViewport(ea, us, x, y);
263 bool mainWindow = (window_type == WindowType_MAIN);
266 if (ea.getScrollingMotion() == osgGA::GUIEventAdapter::SCROLL_2D) {
267 if (ea.getScrollingDeltaY() > 0)
269 else if (ea.getScrollingDeltaY() < 0)
277 if (ea.getModKeyMask() & osgGA::GUIEventAdapter::MODKEY_SHIFT) {
278 if (ea.getScrollingDeltaX() > 0)
280 else if (ea.getScrollingDeltaX() < 0)
285 }
else if (ea.getScrollingMotion() == osgGA::GUIEventAdapter::SCROLL_UP)
290 (*mouseClickHandler)(button, 0, x, y, mainWindow, &ea);
291 (*mouseClickHandler)(button, 1, x, y, mainWindow, &ea);
295 case osgGA::GUIEventAdapter::MOVE:
296 case osgGA::GUIEventAdapter::DRAG:
304 (*mouseMotionHandler)(x, y, &ea);
306 case osgGA::GUIEventAdapter::RESIZE:
307 SG_LOG(SG_VIEW, SG_DEBUG,
"FGEventHandler::handle: RESIZE event " << ea.getWindowHeight() <<
" x " << ea.getWindowWidth() <<
", resizable: " <<
resizable);
308 if (!isMainWindow(ea, us)) {
313 if (m_setWindowRectangle_called) {
319 m_setWindowRectangle_called =
false;
320 int error_x = ea.getWindowX() - m_setWindowRectangle_called_x;
321 int error_y = ea.getWindowY() - m_setWindowRectangle_called_y;
322 SG_LOG(SG_VIEW, SG_BULK,
"m_setWindowRectangle_called is set:"
323 <<
" m_setWindowRectangle_delta=("
324 << m_setWindowRectangle_delta_x <<
" " << m_setWindowRectangle_delta_y <<
")"
325 <<
" m_setWindowRectangle_called_=("
326 << m_setWindowRectangle_called_x <<
" " << m_setWindowRectangle_called_y <<
")"
327 <<
" ea.getWindow=(" << ea.getWindowX() <<
" " << ea.getWindowY() <<
")"
328 <<
" error=(" << error_x <<
" " << error_y <<
")"
330 m_setWindowRectangle_delta_x += error_x;
331 m_setWindowRectangle_delta_y += error_y;
333 globals->get_renderer()->resize(ea.getWindowWidth(), ea.getWindowHeight(), ea.getWindowX(), ea.getWindowY());
337 case osgGA::GUIEventAdapter::CLOSE_WINDOW:
338 if (!isMainWindow(ea, us)) {
342 case osgGA::GUIEventAdapter::QUIT_APPLICATION:
352 using namespace osgGA;
354 static std::map<int, int> numlockKeyMap;
355 static std::map<int, int> noNumlockKeyMap;
357 if (numlockKeyMap.empty()) {
363 numlockKeyMap[GUIEventAdapter::KEY_KP_Insert] =
'0';
364 numlockKeyMap[GUIEventAdapter::KEY_KP_End] =
'1';
365 numlockKeyMap[GUIEventAdapter::KEY_KP_Down] =
'2';
366 numlockKeyMap[GUIEventAdapter::KEY_KP_Page_Down] =
'3';
367 numlockKeyMap[GUIEventAdapter::KEY_KP_Left] =
'4';
368 numlockKeyMap[GUIEventAdapter::KEY_KP_Begin] =
'5';
369 numlockKeyMap[GUIEventAdapter::KEY_KP_Right] =
'6';
370 numlockKeyMap[GUIEventAdapter::KEY_KP_Home] =
'7';
371 numlockKeyMap[GUIEventAdapter::KEY_KP_Up] =
'8';
372 numlockKeyMap[GUIEventAdapter::KEY_KP_Page_Up] =
'9';
373 numlockKeyMap[GUIEventAdapter::KEY_KP_Delete] =
'.';
377 numlockKeyMap[GUIEventAdapter::KEY_KP_0] =
'0';
378 numlockKeyMap[GUIEventAdapter::KEY_KP_1] =
'1';
379 numlockKeyMap[GUIEventAdapter::KEY_KP_2] =
'2';
380 numlockKeyMap[GUIEventAdapter::KEY_KP_3] =
'3';
381 numlockKeyMap[GUIEventAdapter::KEY_KP_4] =
'4';
382 numlockKeyMap[GUIEventAdapter::KEY_KP_5] =
'5';
383 numlockKeyMap[GUIEventAdapter::KEY_KP_6] =
'6';
384 numlockKeyMap[GUIEventAdapter::KEY_KP_7] =
'7';
385 numlockKeyMap[GUIEventAdapter::KEY_KP_8] =
'8';
386 numlockKeyMap[GUIEventAdapter::KEY_KP_9] =
'9';
387 numlockKeyMap[GUIEventAdapter::KEY_KP_Decimal] =
'.';
390 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Insert] =
PU_KEY_INSERT;
391 noNumlockKeyMap[GUIEventAdapter::KEY_KP_End] =
PU_KEY_END;
392 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Down] =
PU_KEY_DOWN;
394 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Left] =
PU_KEY_LEFT;
395 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Begin] =
'5';
396 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Right] =
PU_KEY_RIGHT;
397 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Home] =
PU_KEY_HOME;
398 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Up] =
PU_KEY_UP;
399 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Page_Up] =
PU_KEY_PAGE_UP;
400 noNumlockKeyMap[GUIEventAdapter::KEY_KP_Delete] = 127;
403 int key = ea.getKey();
406 case GUIEventAdapter::KEY_Escape: key = 0x1b;
break;
407 case GUIEventAdapter::KEY_Return: key =
'\n';
break;
408 case GUIEventAdapter::KEY_BackSpace: key =
'\b';
break;
409 case GUIEventAdapter::KEY_Delete: key = 0x7f;
break;
410 case GUIEventAdapter::KEY_Tab: key =
'\t';
break;
411 case GUIEventAdapter::KEY_Left: key =
PU_KEY_LEFT;
break;
412 case GUIEventAdapter::KEY_Up: key =
PU_KEY_UP;
break;
413 case GUIEventAdapter::KEY_Right: key =
PU_KEY_RIGHT;
break;
414 case GUIEventAdapter::KEY_Down: key =
PU_KEY_DOWN;
break;
417 case GUIEventAdapter::KEY_Home: key =
PU_KEY_HOME;
break;
418 case GUIEventAdapter::KEY_End: key =
PU_KEY_END;
break;
419 case GUIEventAdapter::KEY_Insert: key =
PU_KEY_INSERT;
break;
420 case GUIEventAdapter::KEY_F1: key =
PU_KEY_F1;
break;
421 case GUIEventAdapter::KEY_F2: key =
PU_KEY_F2;
break;
422 case GUIEventAdapter::KEY_F3: key =
PU_KEY_F3;
break;
423 case GUIEventAdapter::KEY_F4: key =
PU_KEY_F4;
break;
424 case GUIEventAdapter::KEY_F5: key =
PU_KEY_F5;
break;
425 case GUIEventAdapter::KEY_F6: key =
PU_KEY_F6;
break;
426 case GUIEventAdapter::KEY_F7: key =
PU_KEY_F7;
break;
427 case GUIEventAdapter::KEY_F8: key =
PU_KEY_F8;
break;
428 case GUIEventAdapter::KEY_F9: key =
PU_KEY_F9;
break;
429 case GUIEventAdapter::KEY_F10: key =
PU_KEY_F10;
break;
430 case GUIEventAdapter::KEY_F11: key =
PU_KEY_F11;
break;
431 case GUIEventAdapter::KEY_F12: key =
PU_KEY_F12;
break;
432 case GUIEventAdapter::KEY_KP_Enter: key =
'\r';
break;
433 case GUIEventAdapter::KEY_KP_Add: key =
'+';
break;
434 case GUIEventAdapter::KEY_KP_Divide: key =
'/';
break;
435 case GUIEventAdapter::KEY_KP_Multiply: key =
'*';
break;
436 case GUIEventAdapter::KEY_KP_Subtract: key =
'-';
break;
441 auto numPadIter = numlockKeyMap.find(key);
442 if (numPadIter != numlockKeyMap.end()) {
443 key = numPadIter->second;
446 if (ea.getModKeyMask() & osgGA::GUIEventAdapter::MODKEY_NUM_LOCK) {
448 auto numPadIter = numlockKeyMap.find(key);
449 if (numPadIter != numlockKeyMap.end()) {
450 key = numPadIter->second;
454 auto numPadIter = noNumlockKeyMap.find(key);
455 if (numPadIter != noNumlockKeyMap.end()) {
456 key = numPadIter->second;