Use keycode as opposed to scancode.

We honour a layout change decided by the user.

Signed-off-by: mariofutire@gmail.com <pi@raspberrypi>
This commit is contained in:
mariofutire@gmail.com 2020-10-11 18:22:30 +01:00 committed by Andrea Odetti
parent aac2c5139a
commit 1400828452
2 changed files with 27 additions and 22 deletions

View file

@ -142,50 +142,54 @@ void Emulator::processEvents(bool & quit)
}
case SDL_KEYDOWN:
{
processKeyDown(e, quit);
processKeyDown(e.key, quit);
break;
}
case SDL_KEYUP:
{
processKeyUp(e);
processKeyUp(e.key);
break;
}
}
}
}
void Emulator::processKeyDown(const SDL_Event & e, bool & quit)
void Emulator::processKeyDown(const SDL_KeyboardEvent & key, bool & quit)
{
if (!e.key.repeat)
// scancode vs keycode
// scancode is relative to the position on the keyboard
// keycode is what the os maps it to
// if the user has decided to change the layout, we just go with it and use the keycode
if (!key.repeat)
{
switch (e.key.keysym.scancode)
switch (key.keysym.sym)
{
case SDL_SCANCODE_F9:
case SDLK_F9:
{
cycleVideoType(myWindow);
break;
}
case SDL_SCANCODE_F6:
case SDLK_F6:
{
if ((e.key.keysym.mod & KMOD_CTRL) && (e.key.keysym.mod & KMOD_SHIFT))
if ((key.keysym.mod & KMOD_CTRL) && (key.keysym.mod & KMOD_SHIFT))
{
cycle50ScanLines(myWindow);
}
else if (e.key.keysym.mod & KMOD_CTRL)
else if (key.keysym.mod & KMOD_CTRL)
{
myMultiplier = myMultiplier == 1 ? 2 : 1;
const int sw = GetFrameBufferBorderlessWidth();
const int sh = GetFrameBufferBorderlessHeight();
SDL_SetWindowSize(myWindow.get(), sw * myMultiplier, sh * myMultiplier);
}
else if (!(e.key.keysym.mod & KMOD_SHIFT))
else if (!(key.keysym.mod & KMOD_SHIFT))
{
myFullscreen = !myFullscreen;
SDL_SetWindowFullscreen(myWindow.get(), myFullscreen ? SDL_WINDOW_FULLSCREEN_DESKTOP : 0);
}
break;
}
case SDL_SCANCODE_F5:
case SDLK_F5:
{
if (g_CardMgr.QuerySlot(SLOT6) == CT_Disk2)
{
@ -193,41 +197,42 @@ void Emulator::processKeyDown(const SDL_Event & e, bool & quit)
}
break;
}
case SDL_SCANCODE_F2:
case SDLK_F2:
{
quit = true;
break;
}
case SDL_SCANCODE_LALT:
case SDLK_LALT:
{
Paddle::setButtonPressed(Paddle::ourOpenApple);
break;
}
case SDL_SCANCODE_RALT:
case SDLK_RALT:
{
Paddle::setButtonPressed(Paddle::ourSolidApple);
break;
}
}
}
std::cerr << "KEY DOWN: " << e.key.keysym.scancode << "," << e.key.keysym.sym << "," << e.key.keysym.mod << "," << bool(e.key.repeat) << std::endl;
std::cerr << "KEY DOWN: " << key.keysym.scancode << "," << key.keysym.sym << "," << key.keysym.mod << "," << bool(key.repeat) << std::endl;
}
void Emulator::processKeyUp(const SDL_Event & e)
void Emulator::processKeyUp(const SDL_KeyboardEvent & key)
{
switch (e.key.keysym.scancode)
switch (key.keysym.sym)
{
case SDL_SCANCODE_LALT:
case SDLK_LALT:
{
Paddle::setButtonReleased(Paddle::ourOpenApple);
break;
}
case SDL_SCANCODE_RALT:
case SDLK_RALT:
{
Paddle::setButtonReleased(Paddle::ourSolidApple);
break;
}
}
std::cerr << "KEY UP: " << e.key.keysym.scancode << "," << e.key.keysym.sym << "," << e.key.keysym.mod << "," << bool(e.key.repeat) << std::endl;
std::cerr << "KEY UP: " << key.keysym.scancode << "," << key.keysym.sym << "," << key.keysym.mod << "," << bool(key.repeat) << std::endl;
}

View file

@ -16,8 +16,8 @@ public:
void processEvents(bool & quit);
private:
void processKeyDown(const SDL_Event & e, bool & quit);
void processKeyUp(const SDL_Event & e);
void processKeyDown(const SDL_KeyboardEvent & e, bool & quit);
void processKeyUp(const SDL_KeyboardEvent & e);
const std::shared_ptr<SDL_Window> myWindow;
const std::shared_ptr<SDL_Renderer> myRenderer;