void CUISequencer::IR_OnKeyboardPress (int dik) { if(m_items.size()) m_items.front()->OnKeyboardPress (dik); bool b = true; if(m_items.size()) b &= m_items.front()->AllowKey(dik); if(b && is_binded(kQUIT, dik) ) { Stop (); return; } if(b&&!GrabInput()&&m_pStoredInputReceiver) m_pStoredInputReceiver->IR_OnKeyboardPress (dik); }
void CUISequencer::IR_OnMouseWheel (int direction) { if(!GrabInput()&&m_pStoredInputReceiver) m_pStoredInputReceiver->IR_OnMouseWheel(direction); }
void CUISequencer::IR_OnKeyboardHold (int dik) { if(!GrabInput()&&m_pStoredInputReceiver) m_pStoredInputReceiver->IR_OnKeyboardHold(dik); }
void CUISequencer::IR_OnMouseStop (int x, int y) { if(!GrabInput()&&m_pStoredInputReceiver) m_pStoredInputReceiver->IR_OnMouseStop(x, y); }
void CUISequencer::IR_OnMouseHold (int btn) { if(!GrabInput()&&m_pStoredInputReceiver) m_pStoredInputReceiver->IR_OnMouseHold(btn); }
/* ================ Sys_GetEvent ================ */ sysEvent_t Sys_GetEvent() { SDL_Event ev; sysEvent_t res = { }; byte key; static const sysEvent_t res_none = { SE_NONE, 0, 0, 0, NULL }; static byte c = 0; if (c) { res.evType = SE_CHAR; res.evValue = c; c = 0; return res; } if (SDL_PollEvent(&ev)) { switch (ev.type) { case SDL_ACTIVEEVENT: GrabInput(grabbed && ev.active.gain == 1, ev.active.gain == 1, false); return res_none; case SDL_VIDEOEXPOSE: return res_none; case SDL_KEYDOWN: if (ev.key.keysym.sym == SDLK_RETURN && (ev.key.keysym.mod & KMOD_ALT) > 0) { cvarSystem->SetCVarBool("r_fullscreen", !renderSystem->IsFullScreen()); PushConsoleEvent("vid_restart"); return res_none; } // fall through case SDL_KEYUP: key = mapkey(ev.key.keysym.sym); if (!key) { unsigned char c; // check if its an unmapped console key if (ev.key.keysym.unicode == (c = Sys_GetConsoleKey(false))) { key = c; } else if (ev.key.keysym.unicode == (c = Sys_GetConsoleKey(true))) { key = c; } else { if (ev.type == SDL_KEYDOWN) common->Warning("unmapped SDL key %d (0x%x)", ev.key.keysym.sym, ev.key.keysym.unicode); return res_none; } } res.evType = SE_KEY; res.evValue = key; res.evValue2 = ev.key.state == SDL_PRESSED ? 1 : 0; kbd_polls.Append(kbd_poll_t(key, ev.key.state == SDL_PRESSED)); if (ev.key.state == SDL_PRESSED && (ev.key.keysym.unicode & 0xff00) == 0) c = ev.key.keysym.unicode & 0xff; return res; case SDL_MOUSEMOTION: res.evType = SE_MOUSE; res.evValue = ev.motion.xrel; res.evValue2 = ev.motion.yrel; mouse_polls.Append(mouse_poll_t(M_DELTAX, ev.motion.xrel)); mouse_polls.Append(mouse_poll_t(M_DELTAY, ev.motion.yrel)); return res; case SDL_MOUSEBUTTONDOWN: case SDL_MOUSEBUTTONUP: res.evType = SE_KEY; switch (ev.button.button) { case SDL_BUTTON_LEFT: res.evValue = K_MOUSE1; mouse_polls.Append(mouse_poll_t(M_ACTION1, ev.button.state == SDL_PRESSED ? 1 : 0)); break; case SDL_BUTTON_MIDDLE: res.evValue = K_MOUSE3; mouse_polls.Append(mouse_poll_t(M_ACTION3, ev.button.state == SDL_PRESSED ? 1 : 0)); break; case SDL_BUTTON_RIGHT: res.evValue = K_MOUSE2; mouse_polls.Append(mouse_poll_t(M_ACTION2, ev.button.state == SDL_PRESSED ? 1 : 0)); break; case SDL_BUTTON_WHEELUP: res.evValue = K_MWHEELUP; if (ev.button.state == SDL_PRESSED) mouse_polls.Append(mouse_poll_t(M_DELTAZ, 1)); break; case SDL_BUTTON_WHEELDOWN: res.evValue = K_MWHEELDOWN; if (ev.button.state == SDL_PRESSED) mouse_polls.Append(mouse_poll_t(M_DELTAZ, -1)); break; } res.evValue2 = ev.button.state == SDL_PRESSED ? 1 : 0; return res; case SDL_QUIT: PushConsoleEvent("quit"); return res_none; case SDL_USEREVENT: switch (ev.user.code) { case SE_CONSOLE: res.evType = SE_CONSOLE; res.evPtrLength = (intptr_t)ev.user.data1; res.evPtr = ev.user.data2; return res; default: common->Warning("unknown user event %u", ev.user.code); return res_none; } default: common->Warning("unknown event %u", ev.type); return res_none; } } return res_none; }
/* =============== Sys_GrabMouseCursor =============== */ void Sys_GrabMouseCursor(bool grabIt) { GrabInput(grabIt, grabIt, true); }