int BGI_getch() { static int lastKey = -1; int c; if(lastKey != -1) { c = lastKey; lastKey = -1; SendMessage(window.wnd, WM_KEYPROCESSED, 0, 0); return translateKeyCode(c); } IPC_waitEvent(sharedObjects.keyboardEvent); if(sharedStruct->keyCode > 0) { lastKey = sharedStruct->keyCode; return 0; } c = sharedStruct->keyLetter; SendMessage(window.wnd, WM_KEYPROCESSED, 0, 0); return c; }
bool processEvent(const SDL_Event &evt) { if (not canvas) { return false; } switch (evt.type) { case SDL_MOUSEMOTION: return canvas->InputMouseMoved(evt.motion.x, evt.motion.y, evt.motion.xrel, evt.motion.yrel); case SDL_MOUSEWHEEL: return canvas->InputMouseWheel(evt.wheel.y); case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: { int button; switch (evt.button.button) { case SDL_BUTTON_LEFT: button = 0; break; case SDL_BUTTON_RIGHT: button = 1; break; case SDL_BUTTON_MIDDLE: button = 2; break; } return canvas->InputMouseButton(button, evt.type == SDL_MOUSEBUTTONDOWN); } /*case ALLEGRO_EVENT_KEY_CHAR: { return canvas->InputCharacter(event.keyboard.unichar); }*/ case SDL_KEYDOWN: case SDL_KEYUP: { bool down = (evt.type == SDL_KEYDOWN); if (evt.key.keysym.sym and down and evt.key.keysym.sym >= ' ' and evt.key.keysym.sym <= '~') { return canvas->InputCharacter(evt.key.keysym.sym); } unsigned char key = translateKeyCode(evt.key.keysym.sym); return canvas->InputKey(key, down); } } return false; }
void main(){ char cChoiceMenu; lcdBegin(); SplashScreenWindow(); InitUartComm(); delay( 1000 ); key_init(); ecs_MainMenu(); while( 1 ) { //pooling for the keypads to let the user to select the choice from the options shown... cChoiceMenu = translateKeyCode( get_key() ); if( cChoiceMenu == '3' ){ //Sync Data operation mode.... syncScreenActivity(); clearLcdScreen(); ecs_MainMenu(); } else if( cChoiceMenu == '7' ) { //Settings like date settings only... SettingActivity(); clearLcdScreen(); ecs_MainMenu(); } else if( cChoiceMenu == 'B') { //Data Entry Mode operation.... dataEntrySession(); clearLcdScreen(); ecs_MainMenu(); } else { //catch the unallocated button as invalid and indicate the user about it... } } }
// Create key code translation tables // static void createKeyTables(void) { int scancode, key; memset(_glfw.x11.publicKeys, -1, sizeof(_glfw.x11.publicKeys)); if (_glfw.x11.xkb.available) { // Use XKB to determine physical key locations independently of the current // keyboard layout char name[XkbKeyNameLength + 1]; XkbDescPtr desc = XkbGetMap(_glfw.x11.display, 0, XkbUseCoreKbd); XkbGetNames(_glfw.x11.display, XkbKeyNamesMask, desc); // Find the X11 key code -> GLFW key code mapping for (scancode = desc->min_key_code; scancode <= desc->max_key_code; scancode++) { memcpy(name, desc->names->keys[scancode].name, XkbKeyNameLength); name[XkbKeyNameLength] = '\0'; // Map the key name to a GLFW key code. Note: We only map printable // keys here, and we use the US keyboard layout. The rest of the // keys (function keys) are mapped using traditional KeySym // translations. if (strcmp(name, "TLDE") == 0) key = GLFW_KEY_GRAVE_ACCENT; else if (strcmp(name, "AE01") == 0) key = GLFW_KEY_1; else if (strcmp(name, "AE02") == 0) key = GLFW_KEY_2; else if (strcmp(name, "AE03") == 0) key = GLFW_KEY_3; else if (strcmp(name, "AE04") == 0) key = GLFW_KEY_4; else if (strcmp(name, "AE05") == 0) key = GLFW_KEY_5; else if (strcmp(name, "AE06") == 0) key = GLFW_KEY_6; else if (strcmp(name, "AE07") == 0) key = GLFW_KEY_7; else if (strcmp(name, "AE08") == 0) key = GLFW_KEY_8; else if (strcmp(name, "AE09") == 0) key = GLFW_KEY_9; else if (strcmp(name, "AE10") == 0) key = GLFW_KEY_0; else if (strcmp(name, "AE11") == 0) key = GLFW_KEY_MINUS; else if (strcmp(name, "AE12") == 0) key = GLFW_KEY_EQUAL; else if (strcmp(name, "AD01") == 0) key = GLFW_KEY_Q; else if (strcmp(name, "AD02") == 0) key = GLFW_KEY_W; else if (strcmp(name, "AD03") == 0) key = GLFW_KEY_E; else if (strcmp(name, "AD04") == 0) key = GLFW_KEY_R; else if (strcmp(name, "AD05") == 0) key = GLFW_KEY_T; else if (strcmp(name, "AD06") == 0) key = GLFW_KEY_Y; else if (strcmp(name, "AD07") == 0) key = GLFW_KEY_U; else if (strcmp(name, "AD08") == 0) key = GLFW_KEY_I; else if (strcmp(name, "AD09") == 0) key = GLFW_KEY_O; else if (strcmp(name, "AD10") == 0) key = GLFW_KEY_P; else if (strcmp(name, "AD11") == 0) key = GLFW_KEY_LEFT_BRACKET; else if (strcmp(name, "AD12") == 0) key = GLFW_KEY_RIGHT_BRACKET; else if (strcmp(name, "AC01") == 0) key = GLFW_KEY_A; else if (strcmp(name, "AC02") == 0) key = GLFW_KEY_S; else if (strcmp(name, "AC03") == 0) key = GLFW_KEY_D; else if (strcmp(name, "AC04") == 0) key = GLFW_KEY_F; else if (strcmp(name, "AC05") == 0) key = GLFW_KEY_G; else if (strcmp(name, "AC06") == 0) key = GLFW_KEY_H; else if (strcmp(name, "AC07") == 0) key = GLFW_KEY_J; else if (strcmp(name, "AC08") == 0) key = GLFW_KEY_K; else if (strcmp(name, "AC09") == 0) key = GLFW_KEY_L; else if (strcmp(name, "AC10") == 0) key = GLFW_KEY_SEMICOLON; else if (strcmp(name, "AC11") == 0) key = GLFW_KEY_APOSTROPHE; else if (strcmp(name, "AB01") == 0) key = GLFW_KEY_Z; else if (strcmp(name, "AB02") == 0) key = GLFW_KEY_X; else if (strcmp(name, "AB03") == 0) key = GLFW_KEY_C; else if (strcmp(name, "AB04") == 0) key = GLFW_KEY_V; else if (strcmp(name, "AB05") == 0) key = GLFW_KEY_B; else if (strcmp(name, "AB06") == 0) key = GLFW_KEY_N; else if (strcmp(name, "AB07") == 0) key = GLFW_KEY_M; else if (strcmp(name, "AB08") == 0) key = GLFW_KEY_COMMA; else if (strcmp(name, "AB09") == 0) key = GLFW_KEY_PERIOD; else if (strcmp(name, "AB10") == 0) key = GLFW_KEY_SLASH; else if (strcmp(name, "BKSL") == 0) key = GLFW_KEY_BACKSLASH; else if (strcmp(name, "LSGT") == 0) key = GLFW_KEY_WORLD_1; else key = GLFW_KEY_UNKNOWN; if ((scancode >= 0) && (scancode < 256)) _glfw.x11.publicKeys[scancode] = key; } XkbFreeNames(desc, XkbKeyNamesMask, True); XkbFreeClientMap(desc, 0, True); } // Translate the un-translated key codes using traditional X11 KeySym // lookups for (scancode = 0; scancode < 256; scancode++) { if (_glfw.x11.publicKeys[scancode] < 0) _glfw.x11.publicKeys[scancode] = translateKeyCode(scancode); } }
bool DecafSDL::run(const std::string &gamePath) { auto shouldQuit = false; // Setup some basic window stuff auto window = mGraphicsDriver->getWindow(); setWindowIcon(window); if (config::display::mode == config::display::Fullscreen) { SDL_SetWindowFullscreen(window, SDL_WINDOW_FULLSCREEN_DESKTOP); } // Setup OpenGL graphics driver auto graphicsDriver = mGraphicsDriver->getDecafDriver(); decaf::setGraphicsDriver(graphicsDriver); auto debugUiRenderer = mGraphicsDriver->getDecafDebugUiRenderer(); decaf::setDebugUiRenderer(debugUiRenderer); // Set input provider decaf::setInputDriver(this); decaf::addEventListener(this); openInputDevices(); // Set sound driver decaf::setSoundDriver(mSoundDriver); decaf::setClipboardTextCallbacks( [](void *context) -> const char * { return SDL_GetClipboardText(); }, [](void *context, const char *text) { SDL_SetClipboardText(text); }); // Initialise emulator if (!decaf::initialise(gamePath)) { return false; } // Start emulator decaf::start(); while (!shouldQuit && !decaf::hasExited()) { if (mVpad0Controller) { SDL_GameControllerUpdate(); } SDL_Event event; while (SDL_PollEvent(&event)) { switch (event.type) { case SDL_WINDOWEVENT: if (event.window.event == SDL_WINDOWEVENT_CLOSE) { shouldQuit = true; } break; case SDL_MOUSEBUTTONDOWN: decaf::injectMouseButtonInput(translateMouseButton(event.button.button), decaf::input::MouseAction::Press); break; case SDL_MOUSEBUTTONUP: decaf::injectMouseButtonInput(translateMouseButton(event.button.button), decaf::input::MouseAction::Release); break; case SDL_MOUSEWHEEL: decaf::injectScrollInput(static_cast<float>(event.wheel.x), static_cast<float>(event.wheel.y)); break; case SDL_MOUSEMOTION: decaf::injectMousePos(static_cast<float>(event.motion.x), static_cast<float>(event.motion.y)); break; case SDL_KEYDOWN: decaf::injectKeyInput(translateKeyCode(event.key.keysym), decaf::input::KeyboardAction::Press); break; case SDL_KEYUP: if (event.key.keysym.sym == SDLK_TAB) { mToggleDRC = !mToggleDRC; } if (event.key.keysym.sym == SDLK_ESCAPE) { shouldQuit = true; } decaf::injectKeyInput(translateKeyCode(event.key.keysym), decaf::input::KeyboardAction::Release); break; case SDL_TEXTINPUT: decaf::injectTextInput(event.text.text); break; case SDL_QUIT: shouldQuit = true; break; } } Viewport tvViewport, drcViewport; calculateScreenViewports(tvViewport, drcViewport); mGraphicsDriver->renderFrame(tvViewport, drcViewport); } // Shut down decaf decaf::shutdown(); // Shut down graphics mGraphicsDriver->shutdown(); return true; }
void QtHaikuWindow::DispatchMessage(BMessage *msg, BHandler *handler) { switch(msg->what) { case B_UNMAPPED_KEY_DOWN: case B_KEY_DOWN: { uint32 modifier = msg->FindInt32("modifiers"); uint32 key = msg->FindInt32("key"); QString text; const char* bytes;; if(msg->FindString("bytes", &bytes) == B_OK) text = QString::fromUtf8(bytes); Qt::KeyboardModifiers modifiers; if (modifier & B_SHIFT_KEY) modifiers |= Qt::ShiftModifier; if (modifier & B_CONTROL_KEY) modifiers |= Qt::AltModifier; if (modifier & B_COMMAND_KEY) modifiers |= Qt::ControlModifier; QWindowSystemInterface::handleWindowActivated(fQWindow->window()); QWindowSystemInterface::handleKeyEvent(0, QEvent::KeyPress, translateKeyCode(key), modifiers, text, false); break; } case B_UNMAPPED_KEY_UP: case B_KEY_UP: { uint32 modifier = msg->FindInt32("modifiers"); uint32 key = msg->FindInt32("key"); QString text; const char* bytes;; if(msg->FindString("bytes", &bytes) == B_OK) text = QString::fromUtf8(bytes); Qt::KeyboardModifiers modifiers; if (modifier & B_SHIFT_KEY) modifiers |= Qt::ShiftModifier; if (modifier & B_CONTROL_KEY) modifiers |= Qt::AltModifier; if (modifier & B_COMMAND_KEY) modifiers |= Qt::ControlModifier; QWindowSystemInterface::handleKeyEvent(0, QEvent::KeyRelease, translateKeyCode(key), modifiers, text, false); break; } default: break; } BWindow::DispatchMessage(msg, handler); }