bool Viewer::deviceEventOccurred(const DeviceEvent &event) { switch (event.getType()) { case Device::EKeyDownEvent: if (event.getKeyboardKey() == 'q' || event.getKeyboardSpecial() == Device::EKeyEscape) { m_quit = true; m_leaveEventLoop = true; } else { keyPressed(event); } break; case Device::EKeyUpEvent: keyReleased(event); break; case Device::EMouseMotionEvent: mouseMoved(event); break; case Device::EMouseDragEvent: mouseDragged(event); break; case Device::EMouseButtonDownEvent: mouseButtonPressed(event); break; case Device::EMouseButtonUpEvent: mouseButtonReleased(event); break; case Device::EMouseBeginDragEvent: mouseBeginDrag(event); break; case Device::EMouseEndDragEvent: mouseEndDrag(event); break; case Device::EQuitEvent: m_quit = true; m_leaveEventLoop = true; break; case Device::EResizeEvent: m_renderer->reconfigure(m_device); windowResized(event); // no break case Device::EGainFocusEvent: m_leaveEventLoop = true; break; } return true; }
void DeviceEventPusher::pushDeviceEventToServer(const DeviceEvent& event) { if( !active ) return; try { switch(event.getEventType()) { case DeviceEvent::Message: deviceEventHandlerRef->pushMessageEvent(event.getTMessageEvent()); break; case DeviceEvent::DeviceRefresh: deviceEventHandlerRef->pushDeviceRefreshEvent(event.getTDeviceRefreshEvent()); break; case DeviceEvent::DeviceData: deviceEventHandlerRef->pushDeviceDataEvent(event.getTDeviceDataEvent()); break; default: break; } } catch(CORBA::TRANSIENT&) { active = false; } catch(CORBA::SystemException&) { active = false; } catch(CORBA::Exception&) { active = false; } }
void GraphicsImage::UnpackEvent (DeviceEvent& rawEvent) { int width = rawEvent.GetVariable (Command::IMG_WIDTH); int height = rawEvent.GetVariable (Command::IMG_HEIGHT); if (0 == width || 0 == height) { return; } int rawLength; unsigned char* rawData = rawEvent.GetRawData (rawLength); int length = (width * height); float* imageData = new float[length]; for (int ii = 0; ii < length; ii++) { imageData[ii] = 0; } //eventsLength = rawLength/2; eventsLength = rawLength/4; delete[] y_coor; y_coor = new int[eventsLength]; delete[] x_coor; x_coor = new int[eventsLength]; delete[] timeStamp; timeStamp = new int[eventsLength]; for (int ii = 0; ii < eventsLength; ii++) { //int x = (~rawData[2*ii]) & 0x007F; //int y = (~rawData[2*ii + 1]) & 0x003F; int x = (~rawData[4*ii]) & 0x007F; int y = (~rawData[4*ii + 1]) & 0x003F; y_coor[ii] = y; x_coor[ii] = x; int addr = (y * width) + x; if (addr >=0 && addr < length) { imageData[addr] = (imageData[addr]) + 1; } int time_stamp_a = (int) rawData[4*ii + 2] & 0x00FF; int time_stamp_b = (int) (rawData[4*ii + 3] & 0x00FF) << 8; timeStamp[ii] = (time_stamp_a + time_stamp_b); } delete[] rawData; // Note: ownership of imageData array is now with canvas. canvas->SetData (width, height, imageData, length); canvas->Refresh (true, NULL); // Causes the image panel to be repainted. }
void GraphicsImage::OnDeviceEvent (DeviceEvent& rawEvent) { int saveType = rawEvent.GetVariable (Command::SAVE_TYPE); if (1 == saveType) { while (movie.size() > 0) { delete (movie.back()); movie.pop_back(); } } movie.push_back (rawEvent.Clone()); information->SetMovieFrames (movie.size()); UnpackEvent (rawEvent); }
bool X11Device::translateKeyboard(const XEvent &xEvent, DeviceEvent &event) { X11Session *session = static_cast<X11Session *>(getSession()); KeySym sym = XkbKeycodeToKeysym(session->m_display, xEvent.xkey.keycode, 0, 0); /* Default: 0 */ event.setKeyboardKey(0); event.setKeyboardSpecial(0); /* Retrieve an 'interpreted' version of the key event */ int noc = XLookupString(const_cast<XKeyEvent *>(&xEvent.xkey), event.getKeyboardInterpreted(), 15, NULL, NULL); event.getKeyboardInterpreted()[noc] = 0; if (sym != 0) { int type = sym >> 8; if (type >= 0x00 && type <= 0x0D) { /* Alphanumeric key */ char key = sym & 0xFF; if (key >= 'A' && key <= 'Z') { /* Convert to lower-case */ key += ('a' - 'A'); } event.setKeyboardKey(key); } else if (type == 0xFE) { /* Ignore */ return false; } else if (type == 0xFF) { /* Lookup special key */ event.setKeyboardSpecial(m_keymap[sym & 0xFF]); if (event.getKeyboardSpecial() == ENoSpecial) return false; } else { Log(EWarn, "Unknown X11 keysym: 0x%x", (int) sym); return false; } return true; }
void X11Device::translateMouse(const XEvent &xEvent, DeviceEvent &event) { event.setMousePosition(Point2i(xEvent.xbutton.x, xEvent.xbutton.y)); /* Calculate relative coordinates */ if (m_mouse.x != -1 && m_mouse.y != -1) { event.setMouseRelative(Vector2i(event.getMousePosition() - m_mouse)); } else { event.setMouseRelative(Vector2i(0,0)); } m_mouse = event.getMousePosition(); if (xEvent.xbutton.button == Button1) event.setMouseButton(ELeftButton); else if (xEvent.xbutton.button == Button2) event.setMouseButton(EMiddleButton); else if (xEvent.xbutton.button == Button3) event.setMouseButton(ERightButton); else if (xEvent.xbutton.button == Button4) event.setMouseButton(EWheelUpButton); else if (xEvent.xbutton.button == Button5) event.setMouseButton(EWheelDownButton); else event.setMouseButton(ENoButton); }