[ion/simulator/web] Do not duplicate events in scan and getPlatformEvent

Some events were caught by bith scan() and getPlatformEvent()
This commit is contained in:
Léa Saviot
2020-02-20 14:41:40 +01:00
committed by RubenNumworks
parent a7d419c4bd
commit 18f3054b50
3 changed files with 47 additions and 27 deletions

View File

@@ -204,6 +204,11 @@ Event getPlatformEvent() {
return Termination;
}
if (event.type == SDL_KEYDOWN) {
#if EPSILON_SDL_SCREEN_ONLY
if (IonSimulatorSDLKeyDetectedByScan(event.key.keysym.scancode)) {
continue;
}
#endif
return eventFromSDLKeyboardEvent(event.key);
}
if (event.type == SDL_TEXTINPUT) {

View File

@@ -17,41 +17,54 @@ void IonSimulatorKeyboardKeyUp(int keyNumber) {
Ion::Keyboard::Key key = static_cast<Ion::Keyboard::Key>(keyNumber);
sKeyboardState.clearKey(key);
}
#endif
namespace Ion {
namespace Keyboard {
#if EPSILON_SDL_SCREEN_ONLY
class KeySDLKeyPair {
public:
constexpr KeySDLKeyPair(Ion::Keyboard::Key key, SDL_Scancode SDLKey) :
m_key(key),
m_SDLKey(SDLKey)
{}
Ion::Keyboard::Key key() const { return m_key; }
SDL_Scancode SDLKey() const { return m_SDLKey; }
private:
Ion::Keyboard::Key m_key;
SDL_Scancode m_SDLKey;
};
class KeySDLKeyPair {
public:
constexpr KeySDLKeyPair(Ion::Keyboard::Key key, SDL_Scancode SDLKey) :
m_key(key),
m_SDLKey(SDLKey)
{}
Ion::Keyboard::Key key() const { return m_key; }
SDL_Scancode SDLKey() const { return m_SDLKey; }
private:
Ion::Keyboard::Key m_key;
SDL_Scancode m_SDLKey;
};
constexpr static KeySDLKeyPair sKeyPairs[] = {
KeySDLKeyPair(Ion::Keyboard::Key::Down, SDL_SCANCODE_DOWN),
KeySDLKeyPair(Ion::Keyboard::Key::Up, SDL_SCANCODE_UP),
KeySDLKeyPair(Ion::Keyboard::Key::Left, SDL_SCANCODE_LEFT),
KeySDLKeyPair(Ion::Keyboard::Key::Right, SDL_SCANCODE_RIGHT),
KeySDLKeyPair(Ion::Keyboard::Key::Shift, SDL_SCANCODE_LSHIFT),
KeySDLKeyPair(Ion::Keyboard::Key::Shift, SDL_SCANCODE_RSHIFT),
KeySDLKeyPair(Ion::Keyboard::Key::EXE, SDL_SCANCODE_RETURN),
KeySDLKeyPair(Ion::Keyboard::Key::Back, SDL_SCANCODE_ESCAPE),
KeySDLKeyPair(Ion::Keyboard::Key::Toolbox, SDL_SCANCODE_TAB),
KeySDLKeyPair(Ion::Keyboard::Key::Backspace, SDL_SCANCODE_BACKSPACE)
};
constexpr static KeySDLKeyPair sKeyPairs[] = {
KeySDLKeyPair(Ion::Keyboard::Key::Down, SDL_SCANCODE_DOWN),
KeySDLKeyPair(Ion::Keyboard::Key::Up, SDL_SCANCODE_UP),
KeySDLKeyPair(Ion::Keyboard::Key::Left, SDL_SCANCODE_LEFT),
KeySDLKeyPair(Ion::Keyboard::Key::Right, SDL_SCANCODE_RIGHT),
KeySDLKeyPair(Ion::Keyboard::Key::Shift, SDL_SCANCODE_LSHIFT),
KeySDLKeyPair(Ion::Keyboard::Key::Shift, SDL_SCANCODE_RSHIFT),
KeySDLKeyPair(Ion::Keyboard::Key::EXE, SDL_SCANCODE_RETURN),
KeySDLKeyPair(Ion::Keyboard::Key::Back, SDL_SCANCODE_ESCAPE),
KeySDLKeyPair(Ion::Keyboard::Key::Toolbox, SDL_SCANCODE_TAB),
KeySDLKeyPair(Ion::Keyboard::Key::Backspace, SDL_SCANCODE_BACKSPACE)
};
constexpr int sNumberOfKeyPairs = sizeof(sKeyPairs)/sizeof(KeySDLKeyPair);
constexpr int sNumberOfKeyPairs = sizeof(sKeyPairs)/sizeof(KeySDLKeyPair);
}
}
bool IonSimulatorSDLKeyDetectedByScan(SDL_Scancode key) {
for (int i = 0; i < Ion::Keyboard::sNumberOfKeyPairs; i++) {
if (key == Ion::Keyboard::sKeyPairs[i].SDLKey()) {
return true;
}
}
return false;
}
#endif
namespace Ion {
namespace Keyboard {
State scan() {
// We need to tell SDL to get new state from the host OS
SDL_PumpEvents();

View File

@@ -20,6 +20,8 @@ void IonSimulatorKeyboardKeyUp(int keyNumber);
void IonSimulatorEventsPushEvent(int eventNumber);
bool IonSimulatorSDLKeyDetectedByScan(SDL_Scancode key);
#endif
void IonSimulatorCallbackDidRefresh();