MCPcopy Create free account
hub / github.com/TASEmulators/fceux / pushKeyEvent

Function pushKeyEvent

src/drivers/Qt/keyscan.cpp:1652–1725  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

1650#endif
1651
1652int pushKeyEvent(QKeyEvent *event, int pressDown)
1653{
1654 SDL_Event sdlev;
1655 uint32_t vkey;
1656
1657 if (pressDown)
1658 {
1659 sdlev.type = SDL_KEYDOWN;
1660 sdlev.key.state = SDL_PRESSED;
1661 }
1662 else
1663 {
1664 sdlev.type = SDL_KEYUP;
1665 sdlev.key.state = SDL_RELEASED;
1666 }
1667
1668#ifdef WIN32
1669 GetKeyboardState( keyBuf );
1670#endif
1671
1672 vkey = event->nativeVirtualKey();
1673
1674// auto nsc = event->nativeScanCode();
1675// qDebug() << __PRETTY_FUNCTION__ << nsc << vkey << event->key();
1676
1677 sdlev.key.keysym.sym = convQtKey2SDLKeyCode((Qt::Key)event->key(), vkey);
1678
1679 sdlev.key.keysym.scancode = SDL_GetScancodeFromKey(sdlev.key.keysym.sym);
1680
1681 //printf("Key %s: x%08X %i\n", (sdlev.type == SDL_KEYUP) ? "UP" : "DOWN", event->key(), event->key() );
1682 //printf(" Native ScanCode: x%08X %i \n", event->nativeScanCode(), event->nativeScanCode() );
1683 //printf(" Virtual ScanCode: x%08X %i \n", event->nativeVirtualKey(), event->nativeVirtualKey() );
1684 //printf(" Scancode: 0x%08X %i \n", sdlev.key.keysym.scancode, sdlev.key.keysym.scancode );
1685
1686 // SDL Docs say this code should never happen, but it does...
1687 // so force it to alternative scancode algorithm if it occurs.
1688 if ( (sdlev.key.keysym.scancode == SDL_SCANCODE_NONUSHASH ) ||
1689 (sdlev.key.keysym.scancode == SDL_SCANCODE_NONUSBACKSLASH ) )
1690 {
1691 sdlev.key.keysym.scancode = SDL_SCANCODE_UNKNOWN;
1692 }
1693
1694 if ( sdlev.key.keysym.scancode == SDL_SCANCODE_UNKNOWN )
1695 { // If scancode is unknown, the key may be dual function via the shift key.
1696
1697 sdlev.key.keysym.scancode = convQtKey2SDLScanCode( (Qt::Key)event->key(), vkey );
1698
1699 //printf("Dual Scancode: 0x%08X %i \n", sdlev.key.keysym.scancode, sdlev.key.keysym.scancode );
1700 }
1701
1702 sdlev.key.keysym.mod = convQtKey2SDLModifier(event->modifiers());
1703 sdlev.key.repeat = 0;
1704
1705 //printf("Modifiers: %08X -> %08X \n", event->modifiers(), sdlev.key.keysym.mod );
1706
1707 /* when we're unable to convert qt keys to sdl, we do keyboard native scan code conversion */
1708 if (sdlev.key.keysym.scancode == SDL_SCANCODE_UNKNOWN)
1709 {

Callers 8

keyPressEventMethod · 0.85
keyReleaseEventMethod · 0.85
keyPressEventMethod · 0.85
keyReleaseEventMethod · 0.85
keyPressEventMethod · 0.85
keyReleaseEventMethod · 0.85
keyPressEventMethod · 0.85
keyReleaseEventMethod · 0.85

Calls 4

convQtKey2SDLKeyCodeFunction · 0.85
convQtKey2SDLScanCodeFunction · 0.85
convQtKey2SDLModifierFunction · 0.85
valueMethod · 0.80

Tested by

no test coverage detected