diff --git a/README.md b/README.md index 6996c802..3f8b7512 100644 --- a/README.md +++ b/README.md @@ -49,7 +49,7 @@ property: ## Dependencies * [Kaleidoscope-LEDControl](https://github.com/keyboardio/Kaleidoscope-LEDControl) -* [Kaleidoscope-Ranges](https://github.com/keyboardio/Kaleidoscope-Ranges) +* [Kaleidoscope-OneShot](https://github.com/keyboardio/Kaleidoscope-OneShot) ## Further reading diff --git a/src/Kaleidoscope/LED-ActiveModColor.cpp b/src/Kaleidoscope/LED-ActiveModColor.cpp index 132a0c31..e47d16c5 100644 --- a/src/Kaleidoscope/LED-ActiveModColor.cpp +++ b/src/Kaleidoscope/LED-ActiveModColor.cpp @@ -17,7 +17,7 @@ */ #include -#include +#include #include namespace kaleidoscope { @@ -26,43 +26,10 @@ cRGB ActiveModColorEffect::highlight_color = (cRGB) { 0xff, 0xff, 0xff }; -ActiveModColorEffect::ActiveModColorEffect(void) { -} - void ActiveModColorEffect::begin(void) { Kaleidoscope.useLoopHook(loopHook); } -bool ActiveModColorEffect::isModifierActive(Key key) { - if (key.raw >= ranges::OSM_FIRST && key.raw <= ranges::OSM_LAST) { - uint8_t idx = key.raw - ranges::OSM_FIRST; - key.flags = 0; - key.keyCode = Key_LeftControl.keyCode + idx; - } - - if (key.raw < Key_LeftControl.raw || key.raw > Key_RightGui.raw) - return false; - - return hid::isModifierKeyActive(key); -} - -bool ActiveModColorEffect::isLayerKeyActive(Key key) { - uint8_t layer = 255; - - if (key.raw >= ranges::OSL_FIRST && key.raw <= ranges::OSL_LAST) { - layer = key.raw - ranges::OSL_FIRST; - } else if (key.flags == (SYNTHETIC | SWITCH_TO_KEYMAP)) { - layer = key.keyCode; - if (layer >= MOMENTARY_OFFSET) - layer -= MOMENTARY_OFFSET; - } - - if (layer == 255) - return false; - - return Layer.isOn(layer); -} - void ActiveModColorEffect::loopHook(bool is_post_clear) { if (is_post_clear) return; @@ -71,8 +38,26 @@ void ActiveModColorEffect::loopHook(bool is_post_clear) { for (byte c = 0; c < COLS; c++) { Key k = Layer.lookupOnActiveLayer(r, c); - if (isModifierActive(k) || isLayerKeyActive(k)) - LEDControl.setCrgbAt(r, c, highlight_color); + if (::OneShot.isOneShotKey(k)) { + if (::OneShot.isActive(k)) + ::LEDControl.setCrgbAt(r, c, highlight_color); + else + ::LEDControl.refreshAt(r, c); + } else if (k.raw >= Key_LeftControl.raw && k.raw <= Key_RightGui.raw) { + if (hid::isModifierKeyActive(k)) + ::LEDControl.setCrgbAt(r, c, highlight_color); + else + ::LEDControl.refreshAt(r, c); + } else if (k.flags == (SYNTHETIC | SWITCH_TO_KEYMAP)) { + uint8_t layer = k.keyCode; + if (layer >= MOMENTARY_OFFSET) + layer -= MOMENTARY_OFFSET; + + if (Layer.isOn(layer)) + ::LEDControl.setCrgbAt(r, c, highlight_color); + else + ::LEDControl.refreshAt(r, c); + } } } } diff --git a/src/Kaleidoscope/LED-ActiveModColor.h b/src/Kaleidoscope/LED-ActiveModColor.h index 6da5ac7c..2d0a05b6 100644 --- a/src/Kaleidoscope/LED-ActiveModColor.h +++ b/src/Kaleidoscope/LED-ActiveModColor.h @@ -24,15 +24,13 @@ namespace kaleidoscope { class ActiveModColorEffect : public KaleidoscopePlugin { public: - ActiveModColorEffect(void); + ActiveModColorEffect(void) {} void begin(void) final; static cRGB highlight_color; private: - static bool isModifierActive(Key key); - static bool isLayerKeyActive(Key key); static void loopHook(bool is_post_clear); }; }