diff --git a/LayerBasedTheme.cpp b/LayerBasedTheme.cpp new file mode 100644 index 0000000..8754342 --- /dev/null +++ b/LayerBasedTheme.cpp @@ -0,0 +1,31 @@ +#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..5cfe2e7 --- /dev/null +++ b/LayerBasedTheme.h @@ -0,0 +1,29 @@ +#pragma once + +#include "kaleidoscope/event_handler_result.h" +#include "kaleidoscope/plugin.h" +#include "kaleidoscope/plugin/AccessTransientLEDMode.h" +#include "kaleidoscope/plugin/LEDModeInterface.h" +#include "kaleidoscope/plugin/LEDMode.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 04c4517..c916e09 100644 --- a/Model100.ino +++ b/Model100.ino @@ -24,6 +24,8 @@ #include "Kaleidoscope-MagicCombo.h" #include "Kaleidoscope-USB-Quirks.h" +#include "LayerBasedTheme.h" + enum { MACRO_VERSION_INFO, MACRO_ANY, @@ -296,7 +298,9 @@ KALEIDOSCOPE_INIT_PLUGINS( MouseKeys, HostPowerManagement, MagicCombo, - USBQuirks); + USBQuirks, + LayerBasedTheme +); void setup() { Kaleidoscope.setup();