From 559858db8af100462895cb5104fdfb8a4f7930b5 Mon Sep 17 00:00:00 2001 From: Gergely Nagy Date: Tue, 15 Aug 2017 22:45:31 +0200 Subject: [PATCH] Updated to use the new LEDMode/LEDControl API Signed-off-by: Gergely Nagy --- src/Kaleidoscope/LED-ActiveModColor.cpp | 32 ++++++++++++++++--------- src/Kaleidoscope/LED-ActiveModColor.h | 6 ++--- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/src/Kaleidoscope/LED-ActiveModColor.cpp b/src/Kaleidoscope/LED-ActiveModColor.cpp index 132a0c31..9d959567 100644 --- a/src/Kaleidoscope/LED-ActiveModColor.cpp +++ b/src/Kaleidoscope/LED-ActiveModColor.cpp @@ -26,14 +26,11 @@ cRGB ActiveModColorEffect::highlight_color = (cRGB) { 0xff, 0xff, 0xff }; -ActiveModColorEffect::ActiveModColorEffect(void) { -} - void ActiveModColorEffect::begin(void) { Kaleidoscope.useLoopHook(loopHook); } -bool ActiveModColorEffect::isModifierActive(Key key) { +uint8_t ActiveModColorEffect::isModifierKeyActive(Key key) { if (key.raw >= ranges::OSM_FIRST && key.raw <= ranges::OSM_LAST) { uint8_t idx = key.raw - ranges::OSM_FIRST; key.flags = 0; @@ -41,12 +38,15 @@ bool ActiveModColorEffect::isModifierActive(Key key) { } if (key.raw < Key_LeftControl.raw || key.raw > Key_RightGui.raw) - return false; + return 0; - return hid::isModifierKeyActive(key); + if (hid::isModifierKeyActive(key)) + return 2; + else + return 1; } -bool ActiveModColorEffect::isLayerKeyActive(Key key) { +uint8_t ActiveModColorEffect::isLayerKeyActive(Key key) { uint8_t layer = 255; if (key.raw >= ranges::OSL_FIRST && key.raw <= ranges::OSL_LAST) { @@ -58,9 +58,12 @@ bool ActiveModColorEffect::isLayerKeyActive(Key key) { } if (layer == 255) - return false; + return 0; - return Layer.isOn(layer); + if (Layer.isOn(layer)) + return 2; + else + return 1; } void ActiveModColorEffect::loopHook(bool is_post_clear) { @@ -70,9 +73,16 @@ void ActiveModColorEffect::loopHook(bool is_post_clear) { for (byte r = 0; r < ROWS; r++) { for (byte c = 0; c < COLS; c++) { Key k = Layer.lookupOnActiveLayer(r, c); + uint8_t is_mod = isModifierKeyActive(k); + uint8_t is_layer = isLayerKeyActive(k); + + if (!is_mod && !is_layer) // Neither mod, nor layer key + continue; - if (isModifierActive(k) || isLayerKeyActive(k)) - LEDControl.setCrgbAt(r, c, highlight_color); + if (is_mod == 2 || is_mod == 2) + ::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..c38eb604 100644 --- a/src/Kaleidoscope/LED-ActiveModColor.h +++ b/src/Kaleidoscope/LED-ActiveModColor.h @@ -24,15 +24,15 @@ 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 uint8_t isModifierKeyActive(Key key); + static uint8_t isLayerKeyActive(Key key); static void loopHook(bool is_post_clear); }; }