void wxG3DCanvas::handleKeyDown(wxKeyEvent& event) { if (_gWindow->keyboardEvents.length() > 200) { _gWindow->keyboardEvents.clear(); } GEvent e; e.key.type = SDL_KEYDOWN; e.key.state = SDL_PRESSED; e.key.keysym.sym = wxKeyCodeToSDLCode(event.KeyCode()); #if (wxUSE_UNICODE == 1) e.key.keysym.unicode = event.GetUnicodeKey(); #elif defined(wxHAS_RAW_KEY_CODES) e.key.keysym.unicode = event.GetRawKeyCode(); #else e.key.keysym.unicode = e.key.keysym.sym; #endif #if defined(wxHAS_RAW_KEY_CODES) e.key.keysym.scancode = event.GetRawKeyCode(); #else e.key.keysym.scancode = 0; #endif _gWindow->keyboardEvents.pushBack(e); event.Skip(); }
void GSPanel::OnKeyDown( wxKeyEvent& evt ) { // HACK: Legacy PAD plugins expect PCSX2 to ignore keyboard messages on the GS Window while // the PAD plugin is open, so ignore here (PCSX2 will direct messages routed from PAD directly // to the APP level message handler, which in turn routes them right back here -- yes it's // silly, but oh well). #ifdef __linux__ // HACK2: In gsopen2 there is one event buffer read by both wx/gui and pad plugin. Wx deletes // the event before the pad see it. So you send key event directly to the pad. if( (PADWriteEvent != NULL) && (GSopen2 != NULL) ) { keyEvent event; event.key = evt.GetRawKeyCode(); if (evt.GetEventType() == wxEVT_KEY_UP) event.evt = 3; // X equivalent of KEYRELEASE; else if (evt.GetEventType() == wxEVT_KEY_DOWN) event.evt = 2; // X equivalent of KEYPRESS; else event.evt = 0; PADWriteEvent(event); } #endif if( (PADopen != NULL) && CoreThread.IsOpen() ) return; DirectKeyCommand( evt ); }
void MovieWindowQT::OnKeyDown(wxKeyEvent &inEvent) { // TODO - Only pass appropriate keys to QuickTime, and Skip() the // rest of the events. Figure out why SPACE isn't working. And // re-enable this handler in our event table. if (mMovie) { EventRecord event; mMovie->FillOutEvent((HWND) mHWND, WM_KEYDOWN, (WPARAM) inEvent.GetRawKeyCode(), (LPARAM) inEvent.GetRawKeyFlags(), &event); mMovie->Key(event.message & charCodeMask, event.modifiers); } }
void GSPanel::OnKeyDownOrUp( wxKeyEvent& evt ) { // HACK: Legacy PAD plugins expect PCSX2 to ignore keyboard messages on the GS Window while // the PAD plugin is open, so ignore here (PCSX2 will direct messages routed from PAD directly // to the APP level message handler, which in turn routes them right back here -- yes it's // silly, but oh well). #if defined(__unix__) // HACK2: In gsopen2 there is one event buffer read by both wx/gui and pad plugin. Wx deletes // the event before the pad see it. So you send key event directly to the pad. if( (PADWriteEvent != NULL) && (GSopen2 != NULL) ) { keyEvent event; event.key = evt.GetRawKeyCode(); if (evt.GetEventType() == wxEVT_KEY_UP) event.evt = 3; // X equivalent of KEYRELEASE; else if (evt.GetEventType() == wxEVT_KEY_DOWN) event.evt = 2; // X equivalent of KEYPRESS; else event.evt = 0; PADWriteEvent(event); } #endif #ifdef __WXMSW__ // Not sure what happens on Linux, but on windows this method is called only when emulation // is paused and the GS window is not hidden (and therefore the event doesn't arrive from // the pad plugin and doesn't go through Pcsx2App::PadKeyDispatch). On such case (paused). // It needs to handle two issues: // 1. It's called both for key down and key up (linux apparently needs it this way) - but we // don't want to execute the command twice (normally commands execute on key down only). // 2. It has wx keycode which is upper case for ascii chars, but our command handlers expect // lower case for non-special keys. // ignore key up events if (evt.GetEventType() == wxEVT_KEY_UP) return; // Make ascii keys lower case - this apparently works correctly also with modifiers (shift included) if (evt.m_keyCode >= 'A' && evt.m_keyCode <= 'Z') evt.m_keyCode += (int)'a' - 'A'; #endif if( (PADopen != NULL) && CoreThread.IsOpen() ) return; DirectKeyCommand( evt ); }
void WGetKey::OnKeyUp( wxKeyEvent& event ) { if (event.GetKeyCode()== WXK_ESCAPE) { EndModal(wxID_NO); } else { // Note that GetRawKeyCode() returns the KeySym on wxGTK and the // virtual key code on Windows. See: // http://docs.wxwidgets.org/trunk/classwx_key_event.html#a6fddcd170d05b0852a7eb2a0cb730795 // and // https://msdn.microsoft.com/en-us/library/windows/desktop/gg153546(v=vs.85).aspx wxUint32 rkc= event.GetRawKeyCode(); m_keyCode= KeyboardCode(rkc); EndModal(wxID_YES); } event.Skip(false); }
void StyledTextBox::OnKeyChar(wxKeyEvent& keyEvent) { // Process visible character input if (!keyEvent.HasModifiers()) { int keycode = keyEvent.GetRawKeyCode(); if (keycode < 255 && isprint(keycode)) { if (HasSelectedText()) { RemoveSelectedText(); } char c = (wxChar)keycode; auto text = GetStdText(); auto insertPosition = begin(text) + GetCursorPosition(); text.insert(insertPosition, c); SetText(text); SetCursorPosition(GetCursorPosition() + 1); } } }
void KeyBindingTextCtrl::OnKeyDown(wxKeyEvent & event) { m_rawKeyCode = event.GetRawKeyCode(); m_keyCode = event.GetKeyCode(); SetValue(GetStringFromCode(m_rawKeyCode)); }
void IWnd_stc::OnKeyEvent(wxKeyEvent& evt) { int kc = evt.GetRawKeyCode(); if(kc==wxSTC_KEY_TAB) { if(evt.ShiftDown()) { CmdKeyExecute (wxSTC_CMD_BACKTAB); } else { CmdKeyExecute (wxSTC_CMD_TAB); } return; } if(evt.ControlDown()) { switch(kc) { case 'C': { Copy(); } return; case 'X': { Cut(); } return; case 'V': { Paste(); } return; case 'A': { SelectAll(); } return; case 'Z': { Undo(); } return; case 'R': { Redo(); } return; case 'D': { this->Clear(); } return; //case 'F': // if(style.get(STYLE_CAN_FIND)) // { // WndManager::current().evtmgr["Find"].CmdExecuteEx(-1); // evt.Skip(); // return; // } // break; //case 'H': // if(style.get(STYLE_CAN_REPLACE)) // { // WndManager::current().evtmgr["Replace"].CmdExecuteEx(-1); // evt.Skip(); // return; // } // break; }; } evt.Skip(); }
void wxListCtrlEx::OnKeyDown(wxKeyEvent& event) { if (!m_prefixSearch_enabled) { event.Skip(); return; } int code = event.GetKeyCode(); if (code == WXK_LEFT || code == WXK_RIGHT || code == WXK_UP || code == WXK_DOWN || code == WXK_HOME || code == WXK_END) { ResetSearchPrefix(); event.Skip(); return; } if (event.AltDown() && !event.ControlDown()) // Alt but not AltGr { event.Skip(); return; } wxChar key; switch (code) { case WXK_NUMPAD0: case WXK_NUMPAD1: case WXK_NUMPAD2: case WXK_NUMPAD3: case WXK_NUMPAD4: case WXK_NUMPAD5: case WXK_NUMPAD6: case WXK_NUMPAD7: case WXK_NUMPAD8: case WXK_NUMPAD9: key = '0' + code - WXK_NUMPAD0; break; case WXK_NUMPAD_ADD: key = '+'; break; case WXK_NUMPAD_SUBTRACT: key = '-'; break; case WXK_NUMPAD_MULTIPLY: key = '*'; break; case WXK_NUMPAD_DIVIDE: key = '/'; break; default: key = 0; break; } if (key) { if (event.GetModifiers()) { // Numpad keys can not have modifiers event.Skip(); } HandlePrefixSearch(key); return; } #if defined(__WXMSW__) if (code >= 300 && code != WXK_NUMPAD_DECIMAL) { event.Skip(); return; } // Get the actual key BYTE state[256]; if (!GetKeyboardState(state)) { event.Skip(); return; } wxChar buffer[1]; int res = ToUnicode(event.GetRawKeyCode(), 0, state, buffer, 1, 0); if (res != 1) { event.Skip(); return; } key = buffer[0]; if (key < 32) { event.Skip(); return; } if (key == 32 && event.HasModifiers()) { event.Skip(); return; } HandlePrefixSearch(key); return; #else if (code > 32 && code < 300 && !event.HasModifiers()) { int unicodeKey = event.GetUnicodeKey(); if (unicodeKey) code = unicodeKey; HandlePrefixSearch(code); } else event.Skip(); #endif //defined(__WXMSW__) }