Adapt ShapeShifter to active keys cache

Signed-off-by: Michael Richters <gedankenexperimenter@gmail.com>
f/keymap-cache-redesign
Michael Richters 4 years ago committed by Jesse Vincent
parent 2e4110d171
commit 23d8c6577e
No known key found for this signature in database
GPG Key ID: 122F5DF7108E4046

@ -16,25 +16,20 @@
*/
#include <Kaleidoscope-ShapeShifter.h>
#include "kaleidoscope/keyswitch_state.h"
namespace kaleidoscope {
namespace plugin {
const ShapeShifter::dictionary_t *ShapeShifter::dictionary = NULL;
bool ShapeShifter::mod_active_;
EventHandlerResult ShapeShifter::beforeReportingState() {
mod_active_ = kaleidoscope::Runtime.hid().keyboard().isModifierKeyActive(Key_LeftShift) ||
kaleidoscope::Runtime.hid().keyboard().isModifierKeyActive(Key_RightShift);
return EventHandlerResult::OK;
}
EventHandlerResult ShapeShifter::onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t key_state) {
if (!dictionary)
// Only act on keys that toggle on to prevent cycles (if the dictionary has
// two keys mapped to each other).
if (!keyToggledOn(key_state))
return EventHandlerResult::OK;
// If Shift is not active, bail out early.
if (!mod_active_)
if (!dictionary)
return EventHandlerResult::OK;
Key orig, repl;
@ -52,6 +47,15 @@ EventHandlerResult ShapeShifter::onKeyswitchEvent(Key &mapped_key, KeyAddr key_a
if (orig == Key_NoKey)
return EventHandlerResult::OK;
bool shift_detected = false;
for (KeyAddr k : KeyAddr::all()) {
if (Runtime.activeKey(k).isKeyboardShift())
shift_detected = true;
}
if (! shift_detected)
return EventHandlerResult::OK;
repl = dictionary[i].replacement.readFromProgmem();
// If found, handle the alternate key instead

@ -33,10 +33,6 @@ class ShapeShifter : public kaleidoscope::Plugin {
static const dictionary_t *dictionary;
EventHandlerResult onKeyswitchEvent(Key &mapped_key, KeyAddr key_addr, uint8_t key_state);
EventHandlerResult beforeReportingState();
private:
static bool mod_active_;
};
}

Loading…
Cancel
Save