Instead of acting as a strange LED mode, use a loop hook instead

Having the LED effects of the NumLock layer as a special LED mode has a number
of drawbacks, like not interacting well with led mode switching: one can't get
back to the NumLock effect once switching away from it (but the mode remains
active nevertheless).

To avoid this and other issues, don't make the effect a LED mode. Instead,
override the active LED mode with the numlock layer colors. This way, it is
always in sync with the layer.

Signed-off-by: Gergely Nagy <algernon@madhouse-project.org>
pull/365/head
Gergely Nagy 7 years ago
parent 42c833c81a
commit 98bf56d097

@ -3,31 +3,22 @@
#include "Kaleidoscope.h"
#include "layers.h"
uint8_t NumLock_::previousLEDMode;
uint8_t NumLock_::us;
bool NumLock_::isActive;
byte NumLock_::row = 255, NumLock_::col = 255;
cRGB numpad_color;
cRGB numpad_color = CRGB(255, 0, 0);
NumLock_::NumLock_(void) {
}
void
NumLock_::begin(void) {
us = LEDControl.mode_add(this);
numpad_color.r = 255;
void NumLock_::begin(void) {
loop_hook_use(loopHook);
}
void
NumLock_::init(void) {
if (!isActive) {
LEDControl.next_mode();
}
}
void NumLock_::loopHook(bool postClear) {
if (!postClear || !isActive)
return;
void
NumLock_::update(void) {
for (uint8_t r = 0; r < ROWS; r++) {
for (uint8_t c = 0; c < COLS; c++) {
Key k = Layer.lookup(r, c);
@ -46,21 +37,16 @@ NumLock_::update(void) {
LEDControl.led_set_crgb_at(row, col, color);
}
const macro_t *
NumLock_::toggle(byte row_, byte col_, uint8_t numPadLayer) {
const macro_t *NumLock_::toggle(byte row_, byte col_, uint8_t numPadLayer) {
row = row_;
col = col_;
if (Layer.isOn(numPadLayer)) {
isActive = false;
LEDControl.set_mode(previousLEDMode);
Layer.off(numPadLayer);
} else {
isActive = true;
previousLEDMode = LEDControl.get_mode();
LEDControl.set_mode(us);
Layer.on(numPadLayer);
}
isActive = Layer.isOn(numPadLayer);
return MACRO(T(KeypadNumLock), END);
}

@ -7,20 +7,16 @@
#define TOGGLENUMLOCK 0
#define Key_ToggleNumlock M(TOGGLENUMLOCK)
class NumLock_ : public LEDMode {
class NumLock_ : public KaleidoscopePlugin {
public:
NumLock_(void);
void begin(void) final;
void update(void) final;
void init(void) final;
static const macro_t *toggle(byte row, byte col, uint8_t numPadLayer);
static void loopHook(const bool postClear);
private:
static uint8_t previousLEDMode;
static uint8_t us;
static bool isActive;
static byte row, col;
};

Loading…
Cancel
Save