Updated to use the new plugin APIs

Signed-off-by: Gergely Nagy <algernon@keyboard.io>
pull/389/head^2
Gergely Nagy 7 years ago
parent a6ffae6a3c
commit 5649551955

@ -34,9 +34,9 @@ static const kaleidoscope::ShapeShifter::dictionary_t shape_shift_dictionary[] P
{Key_NoKey, Key_NoKey}, {Key_NoKey, Key_NoKey},
}; };
void setup() { KALEIDOSCOPE_INIT_PLUGINS(ShapeShifter);
Kaleidoscope.use(&ShapeShifter);
void setup() {
Kaleidoscope.setup(); Kaleidoscope.setup();
ShapeShifter.dictionary = shape_shift_dictionary; ShapeShifter.dictionary = shape_shift_dictionary;

@ -1,6 +1,6 @@
/* -*- mode: c++ -*- /* -*- mode: c++ -*-
* Kaleidoscope-ShapeShifter -- Change the shifted symbols on any key of your choice * Kaleidoscope-ShapeShifter -- Change the shifted symbols on any key of your choice
* Copyright (C) 2016, 2017 Gergely Nagy * Copyright (C) 2016, 2017, 2018 Gergely Nagy
* *
* This program is free software: you can redistribute it and/or modify * This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by * it under the terms of the GNU General Public License as published by
@ -19,6 +19,7 @@
#include <Kaleidoscope.h> #include <Kaleidoscope.h>
#include <Kaleidoscope-ShapeShifter.h> #include <Kaleidoscope-ShapeShifter.h>
// *INDENT-OFF*
const Key keymaps[][ROWS][COLS] PROGMEM = { const Key keymaps[][ROWS][COLS] PROGMEM = {
[0] = KEYMAP_STACKED [0] = KEYMAP_STACKED
( (
@ -32,12 +33,13 @@ const Key keymaps[][ROWS][COLS] PROGMEM = {
Key_skip, Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip, Key_skip, Key_6, Key_7, Key_8, Key_9, Key_0, Key_skip,
Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals, Key_Enter, Key_Y, Key_U, Key_I, Key_O, Key_P, Key_Equals,
Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote, Key_H, Key_J, Key_K, Key_L, Key_Semicolon, Key_Quote,
Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus, Key_skip, Key_N, Key_M, Key_Comma, Key_Period, Key_Slash, Key_Minus,
Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl, Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl,
Key_NoKey), Key_NoKey),
}; };
// *INDENT-ON*
static const kaleidoscope::ShapeShifter::dictionary_t shape_shift_dictionary[] PROGMEM = { static const kaleidoscope::ShapeShifter::dictionary_t shape_shift_dictionary[] PROGMEM = {
{Key_1, Key_2}, {Key_1, Key_2},
@ -45,9 +47,9 @@ static const kaleidoscope::ShapeShifter::dictionary_t shape_shift_dictionary[] P
{Key_NoKey, Key_NoKey}, {Key_NoKey, Key_NoKey},
}; };
void setup() { KALEIDOSCOPE_INIT_PLUGINS(ShapeShifter);
Kaleidoscope.use(&ShapeShifter);
void setup() {
Kaleidoscope.setup(); Kaleidoscope.setup();
ShapeShifter.dictionary = shape_shift_dictionary; ShapeShifter.dictionary = shape_shift_dictionary;

@ -24,30 +24,19 @@ namespace kaleidoscope {
const ShapeShifter::dictionary_t *ShapeShifter::dictionary = NULL; const ShapeShifter::dictionary_t *ShapeShifter::dictionary = NULL;
bool ShapeShifter::mod_active_; bool ShapeShifter::mod_active_;
ShapeShifter::ShapeShifter(void) { EventHandlerResult ShapeShifter::beforeReportingState() {
}
void ShapeShifter::begin(void) {
Kaleidoscope.useEventHandlerHook(eventHandlerHook);
Kaleidoscope.useLoopHook(loopHook);
}
void ShapeShifter::loopHook(bool is_post_clear) {
if (is_post_clear)
return;
mod_active_ = hid::isModifierKeyActive(Key_LeftShift) || mod_active_ = hid::isModifierKeyActive(Key_LeftShift) ||
hid::isModifierKeyActive(Key_RightShift); hid::isModifierKeyActive(Key_RightShift);
return EventHandlerResult::OK;
} }
Key EventHandlerResult ShapeShifter::onKeyswitchEvent(Key &mapped_key, byte row, byte col, uint8_t key_state) {
ShapeShifter::eventHandlerHook(Key mapped_key, byte row, byte col, uint8_t key_state) {
if (!dictionary) if (!dictionary)
return mapped_key; return EventHandlerResult::OK;
// If Shift is not active, bail out early. // If Shift is not active, bail out early.
if (!mod_active_) if (!mod_active_)
return mapped_key; return EventHandlerResult::OK;
Key orig, repl; Key orig, repl;
@ -62,13 +51,35 @@ ShapeShifter::eventHandlerHook(Key mapped_key, byte row, byte col, uint8_t key_s
// If not found, bail out. // If not found, bail out.
if (orig.raw == Key_NoKey.raw) if (orig.raw == Key_NoKey.raw)
return mapped_key; return EventHandlerResult::OK;
repl.raw = pgm_read_word(&(dictionary[i].replacement.raw)); repl.raw = pgm_read_word(&(dictionary[i].replacement.raw));
// If found, handle the alternate key instead // If found, handle the alternate key instead
return repl; mapped_key = repl;
return EventHandlerResult::OK;
}
// Legacy V1 API
#if KALEIDOSCOPE_ENABLE_V1_PLUGIN_API
void ShapeShifter::begin() {
Kaleidoscope.useEventHandlerHook(legacyEventHandler);
Kaleidoscope.useLoopHook(legacyLoopHook);
}
Key ShapeShifter::legacyEventHandler(Key mapped_key, byte row, byte col, uint8_t key_state) {
EventHandlerResult r = ::ShapeShifter.onKeyswitchEvent(mapped_key, row, col, key_state);
if (r == EventHandlerResult::OK)
return mapped_key;
return Key_NoKey;
}
void ShapeShifter::legacyLoopHook(bool is_post_clear) {
if (is_post_clear)
return;
::ShapeShifter.beforeReportingState();
} }
#endif
} }

@ -28,16 +28,22 @@ class ShapeShifter : public KaleidoscopePlugin {
Key original, replacement; Key original, replacement;
} dictionary_t; } dictionary_t;
ShapeShifter(void); ShapeShifter(void) {}
void begin(void) final;
static const dictionary_t *dictionary; static const dictionary_t *dictionary;
EventHandlerResult onKeyswitchEvent(Key &mapped_key, byte row, byte col, uint8_t key_state);
EventHandlerResult beforeReportingState();
#if KALEIDOSCOPE_ENABLE_V1_PLUGIN_API
protected:
void begin();
static Key legacyEventHandler(Key mapped_key, byte row, byte col, uint8_t key_state);
static void legacyLoopHook(bool is_post_clear);
#endif
private: private:
static bool mod_active_; static bool mod_active_;
static Key eventHandlerHook(Key mapped_key, byte row, byte col, uint8_t key_state);
static void loopHook(bool is_post_clear);
}; };
} }

Loading…
Cancel
Save