From baf8b8cbf084fdac8028302dea41e268c2aaabf5 Mon Sep 17 00:00:00 2001 From: Romain Goyet Date: Thu, 3 Sep 2020 22:57:12 -0400 Subject: [PATCH] [ion/simulator] Clean the Keyboard implementation --- ion/src/shared/dummy/keyboard.cpp | 11 +++++ ion/src/simulator/Makefile | 5 +- ion/src/simulator/shared/dummy/keyboard.cpp | 19 ++++++++ ion/src/simulator/shared/events_keyboard.cpp | 4 +- .../shared/{keyboard_sdl.cpp => keyboard.cpp} | 48 +++++++++---------- ion/src/simulator/shared/keyboard.h | 19 ++++++++ ion/src/simulator/shared/keyboard_dummy.cpp | 18 ------- ion/src/simulator/shared/platform.h | 3 -- ion/src/simulator/web/Makefile | 1 + ion/src/simulator/web/exports.cpp | 15 ++++++ ion/src/simulator/web/exports.h | 16 +++++++ 11 files changed, 110 insertions(+), 49 deletions(-) create mode 100644 ion/src/shared/dummy/keyboard.cpp create mode 100644 ion/src/simulator/shared/dummy/keyboard.cpp rename ion/src/simulator/shared/{keyboard_sdl.cpp => keyboard.cpp} (75%) create mode 100644 ion/src/simulator/shared/keyboard.h delete mode 100644 ion/src/simulator/shared/keyboard_dummy.cpp create mode 100644 ion/src/simulator/web/exports.cpp create mode 100644 ion/src/simulator/web/exports.h diff --git a/ion/src/shared/dummy/keyboard.cpp b/ion/src/shared/dummy/keyboard.cpp new file mode 100644 index 000000000..914ce0dcf --- /dev/null +++ b/ion/src/shared/dummy/keyboard.cpp @@ -0,0 +1,11 @@ +#include + +namespace Ion { +namespace Keyboard { + +State scan() { + return State(); +} + +} +} diff --git a/ion/src/simulator/Makefile b/ion/src/simulator/Makefile index 83140cf17..af814cf74 100644 --- a/ion/src/simulator/Makefile +++ b/ion/src/simulator/Makefile @@ -4,6 +4,7 @@ ion_src += $(addprefix ion/src/shared/dummy/, \ display.cpp \ exam_mode.cpp \ fcc_id.cpp \ + keyboard.cpp:+headless \ led.cpp \ power.cpp \ serial_number.cpp \ @@ -13,6 +14,7 @@ ion_src += $(addprefix ion/src/shared/dummy/, \ ) ion_src += $(addprefix ion/src/simulator/shared/, \ + dummy/keyboard.cpp:+headless \ clipboard.cpp \ console_stdio.cpp:-consoledisplay \ crc32.cpp \ @@ -22,8 +24,7 @@ ion_src += $(addprefix ion/src/simulator/shared/, \ events_stdin.cpp:+headless \ framebuffer_base.cpp \ framebuffer_png.cpp:+headless \ - keyboard_dummy.cpp:+headless \ - keyboard_sdl.cpp:-headless \ + keyboard.cpp:-headless \ layout.cpp:-headless \ main.cpp \ random.cpp \ diff --git a/ion/src/simulator/shared/dummy/keyboard.cpp b/ion/src/simulator/shared/dummy/keyboard.cpp new file mode 100644 index 000000000..d2b2a8819 --- /dev/null +++ b/ion/src/simulator/shared/dummy/keyboard.cpp @@ -0,0 +1,19 @@ +#include "../keyboard.h" + +namespace Ion { +namespace Simulator { +namespace Keyboard { + +void keyDown(Ion::Keyboard::Key k) { +} + +void keyUp(Ion::Keyboard::Key k) { +} + +bool scanHandlesSDLKey(SDL_Scancode key) { + return false; +} + +} +} +} diff --git a/ion/src/simulator/shared/events_keyboard.cpp b/ion/src/simulator/shared/events_keyboard.cpp index 1a8c5fa2a..026394050 100644 --- a/ion/src/simulator/shared/events_keyboard.cpp +++ b/ion/src/simulator/shared/events_keyboard.cpp @@ -1,4 +1,4 @@ -#include "platform.h" +#include "keyboard.h" #include "layout.h" #include "events.h" #include "window.h" @@ -191,7 +191,7 @@ Event getPlatformEvent() { break; } if (event.type == SDL_KEYDOWN) { - if (IonSimulatorSDLKeyDetectedByScan(event.key.keysym.scancode)) { + if (Simulator::Keyboard::scanHandlesSDLKey(event.key.keysym.scancode)) { continue; } result = eventFromSDLKeyboardEvent(event.key); diff --git a/ion/src/simulator/shared/keyboard_sdl.cpp b/ion/src/simulator/shared/keyboard.cpp similarity index 75% rename from ion/src/simulator/shared/keyboard_sdl.cpp rename to ion/src/simulator/shared/keyboard.cpp index a0d02ab9f..62f955bce 100644 --- a/ion/src/simulator/shared/keyboard_sdl.cpp +++ b/ion/src/simulator/shared/keyboard.cpp @@ -5,23 +5,8 @@ #include #include -#if EPSILON_SDL_SCREEN_ONLY static Ion::Keyboard::State sKeyboardState; -void IonSimulatorKeyboardKeyDown(int keyNumber) { - Ion::Keyboard::Key key = static_cast(keyNumber); - sKeyboardState.setKey(key); -} - -void IonSimulatorKeyboardKeyUp(int keyNumber) { - Ion::Keyboard::Key key = static_cast(keyNumber); - sKeyboardState.clearKey(key); -} -#endif - -namespace Ion { -namespace Keyboard { - class KeySDLKeyPair { public: constexpr KeySDLKeyPair(Ion::Keyboard::Key key, SDL_Scancode SDLKey) : @@ -50,6 +35,9 @@ constexpr static KeySDLKeyPair sKeyPairs[] = { constexpr int sNumberOfKeyPairs = sizeof(sKeyPairs)/sizeof(KeySDLKeyPair); +namespace Ion { +namespace Keyboard { + State scan() { // We need to tell SDL to get new state from the host OS SDL_PumpEvents(); @@ -60,12 +48,8 @@ State scan() { // Grab this opportunity to refresh the display if needed Simulator::Window::refresh(); - // Start with a "clean" state - State state; -#if EPSILON_SDL_SCREEN_ONLY - // In this case, keyboard states are sent over another channel. - state = sKeyboardState; -#else + State state = sKeyboardState; +#if !EPSILON_SDL_SCREEN_ONLY // Register a key for the mouse, if any Key k = Simulator::Layout::getHighlightedKey(); if (SDL_GetMouseState(nullptr, nullptr) && SDL_BUTTON(SDL_BUTTON_LEFT)) { @@ -87,11 +71,27 @@ State scan() { } } -bool IonSimulatorSDLKeyDetectedByScan(SDL_Scancode key) { - for (int i = 0; i < Ion::Keyboard::sNumberOfKeyPairs; i++) { - if (key == Ion::Keyboard::sKeyPairs[i].SDLKey()) { +namespace Ion { +namespace Simulator { +namespace Keyboard { + +void keyDown(Ion::Keyboard::Key k) { + sKeyboardState.setKey(k); +} + +void keyUp(Ion::Keyboard::Key k) { + sKeyboardState.clearKey(k); +} + +bool scanHandlesSDLKey(SDL_Scancode key) { + for (int i = 0; i < sNumberOfKeyPairs; i++) { + if (key == sKeyPairs[i].SDLKey()) { return true; } } return false; } + +} +} +} diff --git a/ion/src/simulator/shared/keyboard.h b/ion/src/simulator/shared/keyboard.h new file mode 100644 index 000000000..c722612aa --- /dev/null +++ b/ion/src/simulator/shared/keyboard.h @@ -0,0 +1,19 @@ +#ifndef ION_SIMULATOR_KEYBOARD_H +#define ION_SIMULATOR_KEYBOARD_H + +#include +#include + +namespace Ion { +namespace Simulator { +namespace Keyboard { + +void keyDown(Ion::Keyboard::Key k); +void keyUp(Ion::Keyboard::Key k); +bool scanHandlesSDLKey(SDL_Scancode key); + +} +} +} + +#endif diff --git a/ion/src/simulator/shared/keyboard_dummy.cpp b/ion/src/simulator/shared/keyboard_dummy.cpp deleted file mode 100644 index 2e4b56fe6..000000000 --- a/ion/src/simulator/shared/keyboard_dummy.cpp +++ /dev/null @@ -1,18 +0,0 @@ -#include -#include "platform.h" - -void IonSimulatorKeyboardKeyDown(int keyNumber) { -} - -void IonSimulatorKeyboardKeyUp(int keyNumber) { -} - -namespace Ion { -namespace Keyboard { - -State scan() { - return 0; -} - -} -} diff --git a/ion/src/simulator/shared/platform.h b/ion/src/simulator/shared/platform.h index 494c83c23..38612e888 100644 --- a/ion/src/simulator/shared/platform.h +++ b/ion/src/simulator/shared/platform.h @@ -15,12 +15,9 @@ SDL_Texture * IonSimulatorLoadImage(SDL_Renderer * renderer, const char * identi char * IonSimulatorGetLanguageCode(); #if EPSILON_SDL_SCREEN_ONLY -void IonSimulatorKeyboardKeyDown(int keyNumber); -void IonSimulatorKeyboardKeyUp(int keyNumber); void IonSimulatorEventsPushEvent(int eventNumber); #endif -bool IonSimulatorSDLKeyDetectedByScan(SDL_Scancode key); void IonSimulatorCallbackDidRefresh(); void IonSimulatorCallbackDidScanKeyboard(); diff --git a/ion/src/simulator/web/Makefile b/ion/src/simulator/web/Makefile index 4032ef4df..2c0cea801 100644 --- a/ion/src/simulator/web/Makefile +++ b/ion/src/simulator/web/Makefile @@ -16,6 +16,7 @@ LDFLAGS += --pre-js ion/src/simulator/web/preamble_env.js ion_src += $(addprefix ion/src/simulator/web/, \ callback.cpp \ clipboard_helper.cpp \ + exports.cpp \ helpers.cpp \ ) diff --git a/ion/src/simulator/web/exports.cpp b/ion/src/simulator/web/exports.cpp new file mode 100644 index 000000000..6f2e0b4e8 --- /dev/null +++ b/ion/src/simulator/web/exports.cpp @@ -0,0 +1,15 @@ +#include "exports.h" +#include "../shared/keyboard.h" + +void IonSimulatorKeyboardKeyDown(int keyNumber) { + Ion::Keyboard::Key key = static_cast(keyNumber); + Ion::Simulator::Keyboard::keyDown(key); +} + +void IonSimulatorKeyboardKeyUp(int keyNumber) { + Ion::Keyboard::Key key = static_cast(keyNumber); + Ion::Simulator::Keyboard::keyUp(key); +} + +void IonSimulatorEventsPushEvent(int eventNumber) { +} diff --git a/ion/src/simulator/web/exports.h b/ion/src/simulator/web/exports.h new file mode 100644 index 000000000..e0eeb59f9 --- /dev/null +++ b/ion/src/simulator/web/exports.h @@ -0,0 +1,16 @@ +#ifndef ION_SIMULATOR_WEB_EXPORTS_H +#define ION_SIMULATOR_WEB_EXPORTS_H + +#ifdef __cplusplus +extern "C" { +#endif + +void IonSimulatorKeyboardKeyDown(int keyNumber); +void IonSimulatorKeyboardKeyUp(int keyNumber); +void IonSimulatorEventsPushEvent(int eventNumber); + +#ifdef __cplusplus +} +#endif + +#endif