diff --git a/README.md b/README.md index 603b3c4c..0b92d55b 100644 --- a/README.md +++ b/README.md @@ -23,9 +23,10 @@ configuration is necessary. #include #include -void setup () { - Kaleidoscope.use(&OneShot, &EscapeOneShot); +KALEIDOSCOPE_INIT_PLUGINS(OneShot, + EscapeOneShot); +void setup () { Kaleidoscope.setup (); } ``` diff --git a/examples/Escape-OneShot/Escape-OneShot.ino b/examples/Escape-OneShot/Escape-OneShot.ino index c18edef5..356f22f1 100644 --- a/examples/Escape-OneShot/Escape-OneShot.ino +++ b/examples/Escape-OneShot/Escape-OneShot.ino @@ -1,6 +1,6 @@ /* -*- mode: c++ -*- * Kaleidoscope-Escape-OneShot -- Turn ESC into a key that cancels OneShots, if active. - * Copyright (C) 2016, 2017 Gergely Nagy + * Copyright (C) 2016, 2017, 2018 Gergely Nagy * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -20,6 +20,7 @@ #include #include +// *INDENT-OFF* const Key keymaps[][ROWS][COLS] PROGMEM = { [0] = KEYMAP_STACKED ( @@ -33,7 +34,7 @@ const Key keymaps[][ROWS][COLS] PROGMEM = { Key_skip, Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, - Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, + Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, Key_RightShift, OSM(RightAlt), Key_Spacebar, OSM(RightControl), @@ -52,17 +53,19 @@ const Key keymaps[][ROWS][COLS] PROGMEM = { ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, - Key_UpArrow, Key_DownArrow, Key_LeftArrow, Key_RightArrow, ___, ___, + Key_UpArrow, Key_DownArrow, Key_LeftArrow, Key_RightArrow, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___, ___ ), - }; +// *INDENT-ON* + +KALEIDOSCOPE_INIT_PLUGINS(OneShot, + EscapeOneShot); void setup() { - Kaleidoscope.use(&OneShot, &EscapeOneShot); Kaleidoscope.setup(); } diff --git a/src/Kaleidoscope/Escape-OneShot.cpp b/src/Kaleidoscope/Escape-OneShot.cpp index 4627d8b5..0875eb27 100644 --- a/src/Kaleidoscope/Escape-OneShot.cpp +++ b/src/Kaleidoscope/Escape-OneShot.cpp @@ -1,6 +1,6 @@ /* -*- mode: c++ -*- * Kaleidoscope-Escape-OneShot -- Turn ESC into a key that cancels OneShots, if active. - * Copyright (C) 2016, 2017 Gergely Nagy + * Copyright (C) 2016, 2017, 2018 Gergely Nagy * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -22,28 +22,35 @@ namespace kaleidoscope { -EscapeOneShot::EscapeOneShot(void) { -} - -void EscapeOneShot::begin(void) { - Kaleidoscope.useEventHandlerHook(eventHandlerHook); -} - -Key EscapeOneShot::eventHandlerHook(Key mapped_key, byte row, byte col, uint8_t key_state) { +EventHandlerResult EscapeOneShot::onKeyswitchEvent(Key &mapped_key, byte row, byte col, uint8_t keyState) { if (mapped_key.raw != Key_Escape.raw || - (key_state & INJECTED) || - !keyToggledOn(key_state)) - return mapped_key; + (keyState & INJECTED) || + !keyToggledOn(keyState)) + return EventHandlerResult::OK; if (!::OneShot.isActive()) - return mapped_key; + return EventHandlerResult::OK; KeyboardHardware.maskKey(row, col); ::OneShot.cancel(true); + return EventHandlerResult::EVENT_CONSUMED; +} + +// Legacy V1 API +#if KALEIDOSCOPE_ENABLE_V1_PLUGIN_API +void EscapeOneShot::begin() { + Kaleidoscope.useEventHandlerHook(legacyEventHandler); +} +Key EscapeOneShot::legacyEventHandler(Key mapped_key, byte row, byte col, uint8_t keyState) { + EventHandlerResult r = ::EscapeOneShot.onKeyswitchEvent(mapped_key, row, col, keyState); + if (r == EventHandlerResult::OK) + return mapped_key; return Key_NoKey; } +#endif + } diff --git a/src/Kaleidoscope/Escape-OneShot.h b/src/Kaleidoscope/Escape-OneShot.h index 53513cc6..c95e19e0 100644 --- a/src/Kaleidoscope/Escape-OneShot.h +++ b/src/Kaleidoscope/Escape-OneShot.h @@ -1,6 +1,6 @@ /* -*- mode: c++ -*- * Kaleidoscope-Escape-OneShot -- Turn ESC into a key that cancels OneShots, if active. - * Copyright (C) 2016, 2017 Gergely Nagy + * Copyright (C) 2016, 2017, 2018 Gergely Nagy * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by @@ -21,14 +21,17 @@ #include namespace kaleidoscope { -class EscapeOneShot : public KaleidoscopePlugin { +class EscapeOneShot : public kaleidoscope::Plugin { public: - EscapeOneShot(void); + EscapeOneShot(void) {} - void begin(void) final; + EventHandlerResult onKeyswitchEvent(Key &mapped_key, byte row, byte col, uint8_t keyState); - private: - static Key eventHandlerHook(Key mapped_key, byte row, byte col, uint8_t key_state); +#if KALEIDOSCOPE_ENABLE_V1_PLUGIN_API + protected: + void begin(); + static Key legacyEventHandler(Key mapped_key, byte row, byte col, uint8_t keyState); +#endif }; }