diff --git a/LayerBasedTheme.cpp b/LayerBasedTheme.cpp new file mode 100644 index 0000000..7a51034 --- /dev/null +++ b/LayerBasedTheme.cpp @@ -0,0 +1,32 @@ +#include "LayerBasedTheme.h" + +#include "kaleidoscope/layers.h" +#include "kaleidoscope/plugin/LEDControl.h" + +namespace kaleidoscope { +namespace plugin { +EventHandlerResult LayerBasedTheme::onLayerChange() { + uint8_t current_layer = Layer.mostRecent(); + uint8_t current_mode = ::LEDControl.get_mode_index(); + uint8_t new_mode; + + if (current_layer <= 3) { + new_mode = 2; + } else { + new_mode = 3; + } + + if (new_mode != current_mode) { + ::LEDControl.set_mode(new_mode); + } + + return EventHandlerResult::OK; +} + +LayerBasedTheme::TransientLEDMode::TransientLEDMode( + const LayerBasedTheme *parent) + : parent_(parent){}; +} // namespace plugin +} // namespace kaleidoscope + +kaleidoscope::plugin::LayerBasedTheme LayerBasedTheme; diff --git a/LayerBasedTheme.h b/LayerBasedTheme.h new file mode 100644 index 0000000..9ce7bcb --- /dev/null +++ b/LayerBasedTheme.h @@ -0,0 +1,30 @@ +#pragma once + +#include "kaleidoscope/event_handler_result.h" +#include "kaleidoscope/plugin.h" +#include "kaleidoscope/plugin/AccessTransientLEDMode.h" +#include "kaleidoscope/plugin/LEDMode.h" +#include "kaleidoscope/plugin/LEDModeInterface.h" + +namespace kaleidoscope { +namespace plugin { +class LayerBasedTheme : public Plugin, + public LEDModeInterface, + public AccessTransientLEDMode { +public: + LayerBasedTheme(void) {} + + EventHandlerResult onLayerChange(); + + class TransientLEDMode : public LEDMode { + public: + explicit TransientLEDMode(const LayerBasedTheme *parent); + + private: + const LayerBasedTheme *parent_; + }; +}; +} // namespace plugin +} // namespace kaleidoscope + +extern kaleidoscope::plugin::LayerBasedTheme LayerBasedTheme; diff --git a/Model100.ino b/Model100.ino index 56c9138..05afae1 100644 --- a/Model100.ino +++ b/Model100.ino @@ -48,6 +48,8 @@ #include "Kaleidoscope-Leader.h" +#include "LayerBasedTheme.h" + /** The Model 100's key layouts are defined as 'keymaps'. * * Each keymap is defined as a list using the 'KEYMAP_STACKED' macro, built @@ -320,7 +322,8 @@ KALEIDOSCOPE_INIT_PLUGINS( EscapeOneShot, EscapeOneShotConfig, TapDance, - Leader + Leader, + LayerBasedTheme ); void setup() {