Merge pull request #4 from keyboardio/f/plugin-v2

Updated to use the new plugin APIs
pull/389/head^2
Gergely Nagy 7 years ago committed by GitHub
commit bd471d444c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

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

@ -1,6 +1,6 @@
/* -*- mode: c++ -*-
* 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
* it under the terms of the GNU General Public License as published by
@ -19,6 +19,7 @@
#include <Kaleidoscope.h>
#include <Kaleidoscope-ShapeShifter.h>
// *INDENT-OFF*
const Key keymaps[][ROWS][COLS] PROGMEM = {
[0] = KEYMAP_STACKED
(
@ -38,6 +39,7 @@ const Key keymaps[][ROWS][COLS] PROGMEM = {
Key_RightShift, Key_RightAlt, Key_Spacebar, Key_RightControl,
Key_NoKey),
};
// *INDENT-ON*
static const kaleidoscope::ShapeShifter::dictionary_t shape_shift_dictionary[] PROGMEM = {
{Key_1, Key_2},
@ -45,9 +47,9 @@ static const kaleidoscope::ShapeShifter::dictionary_t shape_shift_dictionary[] P
{Key_NoKey, Key_NoKey},
};
void setup() {
Kaleidoscope.use(&ShapeShifter);
KALEIDOSCOPE_INIT_PLUGINS(ShapeShifter);
void setup() {
Kaleidoscope.setup();
ShapeShifter.dictionary = shape_shift_dictionary;

@ -24,30 +24,19 @@ namespace kaleidoscope {
const ShapeShifter::dictionary_t *ShapeShifter::dictionary = NULL;
bool ShapeShifter::mod_active_;
ShapeShifter::ShapeShifter(void) {
}
void ShapeShifter::begin(void) {
Kaleidoscope.useEventHandlerHook(eventHandlerHook);
Kaleidoscope.useLoopHook(loopHook);
}
void ShapeShifter::loopHook(bool is_post_clear) {
if (is_post_clear)
return;
EventHandlerResult ShapeShifter::beforeReportingState() {
mod_active_ = hid::isModifierKeyActive(Key_LeftShift) ||
hid::isModifierKeyActive(Key_RightShift);
return EventHandlerResult::OK;
}
Key
ShapeShifter::eventHandlerHook(Key mapped_key, byte row, byte col, uint8_t key_state) {
EventHandlerResult ShapeShifter::onKeyswitchEvent(Key &mapped_key, byte row, byte col, uint8_t key_state) {
if (!dictionary)
return mapped_key;
return EventHandlerResult::OK;
// If Shift is not active, bail out early.
if (!mod_active_)
return mapped_key;
return EventHandlerResult::OK;
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 (orig.raw == Key_NoKey.raw)
return mapped_key;
return EventHandlerResult::OK;
repl.raw = pgm_read_word(&(dictionary[i].replacement.raw));
// 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;
} dictionary_t;
ShapeShifter(void);
void begin(void) final;
ShapeShifter(void) {}
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:
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