Example #1
0
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;
    }
  }
}
Example #2
0
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;
      }
   }
}
Example #3
0
// ---------------------------------------------
// 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
}
Example #4
0
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;
}
Example #5
0
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;
}
Example #6
0
void MSWidget::keyPress(const XEvent *pEvent_,KeySym keysym_,unsigned int state_,const char *)
{
  MSKeyPress keyPress( keysym_,state_);
  keyTranslate(keyPress); 
}