void kgmGameApp::android_onKeyboard(JNIEnv* env, jobject obj, jint a, jint key) { #ifdef DEBUG LOGI("Game onKeyboard %i %i\n", a, key); #endif if(g_game) { kgmEvent::Event evt; switch(a) { case 0: evt.event = evtKeyDown; evt.key = keyTranslate(key); g_game->getWindow()->onEvent(&evt); break; case 1: evt.event = evtKeyUp; evt.key = keyTranslate(key); g_game->getWindow()->onEvent(&evt); break; default: break; } } }
void MSOptionMenu::keyPress(const XEvent *pEvent_,KeySym keysym_,unsigned int state_,const char *) { MSKeyPress keyPress(keysym_, state_); if (isProtected()==MSFalse&&optionMenu()!=0&& keyTranslate(keyPress)==MSFalse) { switch (keysym_) { case XK_Return: case XK_Up: case XK_Down: showMenu(pEvent_->xkey.time); break; default: break; } } }
// --------------------------------------------- // Assumes that this is called at interval there will not have bounce problem // returns -1 for no key press // ascii code for key pressed int keyChk ( void ) { int k; if (!keyInitOK) return NOKEY_CODE; // ensure called at minimal DEBOUNCE_MS interval k = 50; while(!timeDlyExpired(&keyDlyData)) { msleep(10); k--; // just in case !!! timeout in 500ms if (k == 0) { break; } } timeDlySet(&keyDlyData,DEBOUNCE_MS); if ((k = keyScan()) != keyOld) { // change keyOld = k; return keyTranslate(k); } // no change return NOKEY_CODE; // no key pressed }
int kgmWindow::WndProc(kgmWindow* wnd, XEvent* evt) { Window wroot, wchild; kgmEvent::Event m_evt = {0}; int rx, ry, cx, cy; unsigned int mask; KeySym ksym; switch(evt->type) { case Expose: m_evt.event = evtPaint; break; case ConfigureNotify: m_evt.event = evtResize; m_evt.x = evt->xconfigure.x; m_evt.y = evt->xconfigure.y; m_evt.width = evt->xconfigure.width; m_evt.height = evt->xconfigure.height; break; case MotionNotify: XQueryPointer(wnd->m_dpy, wnd->m_wnd, &wroot, &wchild, &rx, &ry, &cx, &cy, &mask); m_evt.event = evtMsMove; switch(((XMotionEvent*)evt)->state) { case Button1Mask: m_evt.keyMask = KEY_MSBLEFT; break; case Button2Mask: m_evt.keyMask = KEY_MSBMIDDLE; break; case Button3Mask: m_evt.keyMask = KEY_MSBRIGHT; break; default: m_evt.keyMask = KEY_NONE; } if(!wnd->m_msAbs) { unsigned int x, y, w, h, border, depth; Window dummy; XGetGeometry(wnd->m_dpy, wnd->m_wnd, &dummy, (int*)&x, (int*)&y, (u32*)&w, (u32*)&h, &border, &depth); m_evt.msx = w / 2 - evt->xbutton.x; m_evt.msy = h / 2 - evt->xbutton.y; static bool seted = false; if(seted) { seted = false; } else { XWarpPointer(wnd->m_dpy, wnd->m_wnd, wnd->m_wnd, 0, 0, w, h, w / 2, h / 2); seted = true; } } else { m_evt.msx = evt->xbutton.x; m_evt.msy = evt->xbutton.y; } break; case MappingNotify: XRefreshKeyboardMapping (&evt->xmapping) ; break; case ButtonPress: case ButtonRelease: m_evt.msx = evt->xbutton.x; m_evt.msy = evt->xbutton.y; switch(evt->xbutton.button){ case Button1: if(evt->type == ButtonPress) m_evt.event = evtMsLeftDown; else m_evt.event = evtMsLeftUp; break; case Button2: if(evt->type == ButtonPress) m_evt.event = evtMsMiddleDown; else m_evt.event = evtMsMiddleUp; break; case Button3: if(evt->type == ButtonPress) m_evt.event = evtMsRightDown; else m_evt.event = evtMsRightUp; break; case Button4: m_evt.event = evtMsWheel; m_evt.msz = 1; break; case Button5: m_evt.event = evtMsWheel; m_evt.msz = -1; break; } break; case KeyPress: ksym = keyTranslate(XLookupKeysym(&evt->xkey, 0)); m_evt.event = evtKeyDown; m_evt.key = ksym; break; case KeyRelease: ksym = keyTranslate(XLookupKeysym(&evt->xkey, 0)); m_evt.event = evtKeyUp; m_evt.key = ksym; break; case ClientMessage: m_evt.event = evtClose; //if(evt->xclient.data.l[0] == wnd->m_wmDelete) // wnd->m_loop = false; // if (*XGetAtomName(wnd->m_dpy, (Atom)&evt->xclient.message_type) == *"WM_PROTOCOLS") // m_evt.event = evtClose; kgm_log() << "got close event" << "\n"; break; default: m_evt.event = evtNone; break; } if(wnd && m_evt.event) wnd->onEvent(&m_evt); return 1; }
long CALLBACK kgmWindow::WndProc(HWND hWnd, u32 msg, WPARAM wPar, LPARAM lPar) { static bool set_cursor = false; kgmWindow* wnd = (kgmWindow*)GetWindowLong(hWnd, GWL_USERDATA); kgmEvent::Event evt; RECT wRect; RECT wcRect; POINT msPoint; MSG m; m.message = msg; m.wParam = wPar; m.lParam = lPar; if(!wnd) return 1; GetClientRect(hWnd, &wcRect); GetWindowRect(hWnd, &wRect); GetCursorPos(&msPoint); switch(msg){ case WM_DESTROY: evt.event = evtClose; break; case WM_SIZE: evt.event = evtResize; evt.width = LOWORD(lPar); evt.height = HIWORD(lPar); break; case WM_PAINT: evt.event = evtPaint; evt.gc = 0; ValidateRect(hWnd, NULL); break; case WM_MOUSEWHEEL: evt.event = evtMsWheel; msPoint.x = LOWORD(lPar); msPoint.y = HIWORD(lPar); ClientToScreen(hWnd, &msPoint); evt.msx = msPoint.x; evt.msy = msPoint.y; evt.msz = HIWORD(wPar); break; case WM_MOUSEMOVE: evt.event = evtMsMove; msPoint.x = LOWORD(lPar); msPoint.y = HIWORD(lPar); switch(wPar) { case MK_LBUTTON: evt.keyMask = KEY_MSBLEFT; break; case MK_RBUTTON: evt.keyMask = KEY_MSBRIGHT; break; case MK_MBUTTON: evt.keyMask = KEY_MSBMIDDLE; break; default: evt.key = KEY_NONE; } //ClientToScreen(hWnd, &msPoint); if(!wnd->m_msAbs) { RECT rc; GetClientRect(wnd->m_wnd, (LPRECT)&rc); RECT wrc; GetWindowRect(wnd->m_wnd, (LPRECT)&wrc); evt.msx = rc.right / 2 - msPoint.x; evt.msy = rc.bottom / 2 - msPoint.y; static bool seted = false; if(seted) { seted = false; } else { POINT pt = {rc.right / 2, rc.bottom / 2}; ClientToScreen(wnd->m_wnd, &pt); SetCursorPos(pt.x, pt.y); seted = true; } } else { evt.msx = msPoint.x; evt.msy = msPoint.y; } break; case WM_LBUTTONDOWN: evt.event = evtMsLeftDown; evt.key = keyTranslate(WPARAM_KEY(wPar)); evt.msx = LOWORD(lPar); evt.msy = HIWORD(lPar); break; case WM_LBUTTONUP: evt.event = evtMsLeftUp; evt.key = keyTranslate(WPARAM_KEY(wPar)); evt.msx = LOWORD(lPar); evt.msy = HIWORD(lPar); break; case WM_RBUTTONDOWN: evt.event = evtMsRightDown; evt.key = keyTranslate(WPARAM_KEY(wPar)); evt.msx = LOWORD(lPar); evt.msy = HIWORD(lPar); break; case WM_RBUTTONUP: evt.event = evtMsRightUp; evt.key = keyTranslate(WPARAM_KEY(wPar)); evt.msx = LOWORD(lPar); evt.msy = HIWORD(lPar); break; case WM_KEYDOWN: evt.event = evtKeyDown; evt.key = keyTranslate(wPar); break; case WM_KEYUP: evt.event = evtKeyUp; evt.key = keyTranslate(wPar); break; default: return DefWindowProc(hWnd, msg, wPar, lPar); break; } if(evt.event) wnd->onEvent(&evt); return 1; }
void MSWidget::keyPress(const XEvent *pEvent_,KeySym keysym_,unsigned int state_,const char *) { MSKeyPress keyPress( keysym_,state_); keyTranslate(keyPress); }