diff --git a/README.md b/README.md
index d4ee37a4..47a8df8f 100644
--- a/README.md
+++ b/README.md
@@ -34,9 +34,9 @@ illustrated with an example:
Key_mouseUp, Key_mouseDn, Key_mouseL, Key_mouseR,
Key_mouseBtnL, Key_mouseBtnR
-void setup() {
- Kaleidoscope.use(&MouseKeys);
+KALEIDOSCOPE_INIT_PLUGINS(MouseKeys);
+void setup() {
Kaleidoscope.setup ();
}
```
@@ -121,15 +121,15 @@ As described above, MouseKeys warps the pointer using a grid model that reflects
locations on the screen. By default, the plugin uses a 2x2 grid. To understand
how warping works, examine this diagram of a screen split into that 2x2 grid:
- +-----------------------+-----------------------+
+ +-----------------------|-----------------------+
| | | |
| G | tab | |
| | | |
- |-----------+-----------| tab |
+ |-----------|-----------| tab |
| | | |
| B | esc | |
| | | |
- +-----------------------+-----------------------+
+ +-----------------------|-----------------------+
| | |
| | |
| | |
@@ -137,7 +137,7 @@ how warping works, examine this diagram of a screen split into that 2x2 grid:
| | |
| | |
| | |
- +-----------------------+-----------------------+
+ +-----------------------|-----------------------+
Each quadrant is labed with a key that, when pressed, moves the mouse pointer
to the center of that quadrant. With this layout, pressing G warps
@@ -162,33 +162,33 @@ diagram shows a screen with a key label that warps to each sector. As we can
see, pressing W warps the pointer into the top-left sector, and
pressing V warps to the bottom-right corner within that sector:
- +-----------------+-----------------+-----------------+
+ +-----------------|-----------------|-----------------+
| W | E | R | | |
- |-----+-----+-----| | |
+ |-----|-----|-----| | |
| S | D | F | E | R |
- |-----+-----+-----| | |
+ |-----|-----|-----| | |
| X | C | V | | |
- +-----------------+-----------------+-----------------+
+ +-----------------|-----------------|-----------------+
| | | |
| | | |
| S | D | F |
| | | |
| | | |
- +-----------------+-----------------+-----------------+
+ +-----------------|-----------------|-----------------+
| | | |
| | | |
| X | C | V |
| | | |
| | | |
- +-----------------+-----------------+-----------------+
+ +-----------------|-----------------|-----------------+
To use a 3x3 warp grid, we may need to remap some keys. A suggested warp key
mapping is shown below on the left side of a keyboard with a QWERTY layout:
W | E | R T A - End Warping (Key_mouseWarpEnd)
- ---+---+--- W - Warp NW Sector (Key_mouseWarpNW)
+ ---|---|--- W - Warp NW Sector (Key_mouseWarpNW)
A S | D | F G E - Warp N Sector (Key_mouseWarpN)
- ---+---+--- R - Warp NE Sector (Key_mouseWarpNE)
+ ---|---|--- R - Warp NE Sector (Key_mouseWarpNE)
X | C | V B S - Warp E Sector (Key_mouseWarpE)
D - Warp/Zoom Center (Key_mouseWarpIn)
F - Warp W Sector (Key_mouseWarpW)
diff --git a/src/Kaleidoscope-MouseKeys.cpp b/src/Kaleidoscope-MouseKeys.cpp
index 0bfb7aa9..7e643201 100644
--- a/src/Kaleidoscope-MouseKeys.cpp
+++ b/src/Kaleidoscope-MouseKeys.cpp
@@ -39,23 +39,24 @@ void MouseKeys_::scrollWheel(uint8_t keyCode) {
kaleidoscope::hid::moveMouse(0, 0, 0, wheelSpeed);
}
-void MouseKeys_::loopHook(bool postClear) {
- if (postClear) {
- kaleidoscope::hid::sendMouseReport();
- kaleidoscope::hid::releaseAllMouseButtons();
- mouseMoveIntent = 0;
- return;
- }
+kaleidoscope::EventHandlerResult MouseKeys_::afterEachCycle() {
+ kaleidoscope::hid::sendMouseReport();
+ kaleidoscope::hid::releaseAllMouseButtons();
+ mouseMoveIntent = 0;
+ return kaleidoscope::EventHandlerResult::OK;
+}
+
+kaleidoscope::EventHandlerResult MouseKeys_::beforeReportingState() {
if (mouseMoveIntent == 0) {
MouseWrapper.accelStep = 0;
endTime = 0;
accelEndTime = 0;
- return;
+ return kaleidoscope::EventHandlerResult::OK;
}
if (millis() < endTime)
- return;
+ return kaleidoscope::EventHandlerResult::OK;
endTime = millis() + speedDelay;
@@ -79,11 +80,13 @@ void MouseKeys_::loopHook(bool postClear) {
moveX = speed;
MouseWrapper.move(moveX, moveY);
+
+ return kaleidoscope::EventHandlerResult::OK;
}
-Key MouseKeys_::eventHandlerHook(Key mappedKey, byte row, byte col, uint8_t keyState) {
+kaleidoscope::EventHandlerResult MouseKeys_::onKeyswitchEvent(Key &mappedKey, byte row, byte col, uint8_t keyState) {
if (mappedKey.flags != (SYNTHETIC | IS_MOUSE_KEY))
- return mappedKey;
+ return kaleidoscope::EventHandlerResult::OK;
if (mappedKey.keyCode & KEY_MOUSE_BUTTON && !(mappedKey.keyCode & KEY_MOUSE_WARP)) {
uint8_t button = mappedKey.keyCode & ~KEY_MOUSE_BUTTON;
@@ -122,17 +125,37 @@ Key MouseKeys_::eventHandlerHook(Key mappedKey, byte row, byte col, uint8_t keyS
}
}
- return Key_NoKey;
+ return kaleidoscope::EventHandlerResult::EVENT_CONSUMED;
}
-MouseKeys_::MouseKeys_(void) {
+kaleidoscope::EventHandlerResult MouseKeys_::onSetup(void) {
+ MouseWrapper.begin();
+
+ return kaleidoscope::EventHandlerResult::OK;
}
-void
-MouseKeys_::begin(void) {
- MouseWrapper.begin();
- Kaleidoscope.useEventHandlerHook(eventHandlerHook);
- Kaleidoscope.useLoopHook(loopHook);
+// Legacy V1 API
+#if KALEIDOSCOPE_ENABLE_V1_PLUGIN_API
+void MouseKeys_::begin() {
+ onSetup();
+ Kaleidoscope.useEventHandlerHook(legacyEventHandler);
+ Kaleidoscope.useLoopHook(legacyLoopHook);
+}
+
+Key MouseKeys_::legacyEventHandler(Key mapped_key, byte row, byte col, uint8_t key_state) {
+ kaleidoscope::EventHandlerResult r = MouseKeys.onKeyswitchEvent(mapped_key, row, col, key_state);
+ if (r == kaleidoscope::EventHandlerResult::OK)
+ return mapped_key;
+ return Key_NoKey;
+}
+
+void MouseKeys_::legacyLoopHook(bool is_post_clear) {
+ if (is_post_clear) {
+ MouseKeys.afterEachCycle();
+ } else {
+ MouseKeys.beforeReportingState();
+ }
}
+#endif
MouseKeys_ MouseKeys;
diff --git a/src/Kaleidoscope-MouseKeys.h b/src/Kaleidoscope-MouseKeys.h
index 78dbabe2..3b23ddff 100644
--- a/src/Kaleidoscope-MouseKeys.h
+++ b/src/Kaleidoscope-MouseKeys.h
@@ -4,11 +4,9 @@
#include "MouseKeyDefs.h"
#include "MouseWarpModes.h"
-class MouseKeys_ : public KaleidoscopePlugin {
+class MouseKeys_ : public kaleidoscope::Plugin {
public:
- MouseKeys_(void);
-
- void begin(void) final;
+ MouseKeys_(void) {}
static uint8_t speed;
static uint16_t speedDelay;
@@ -19,6 +17,18 @@ class MouseKeys_ : public KaleidoscopePlugin {
static void setWarpGridSize(uint8_t grid_size);
+ kaleidoscope::EventHandlerResult onSetup();
+ kaleidoscope::EventHandlerResult beforeReportingState();
+ kaleidoscope::EventHandlerResult afterEachCycle();
+ kaleidoscope::EventHandlerResult onKeyswitchEvent(Key &mappedKey, byte row, byte col, uint8_t keyState);
+
+#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 uint8_t mouseMoveIntent;
static uint32_t endTime;
@@ -26,8 +36,6 @@ class MouseKeys_ : public KaleidoscopePlugin {
static uint32_t wheelEndTime;
static void scrollWheel(uint8_t keyCode);
- static void loopHook(bool postClear);
- static Key eventHandlerHook(Key mappedKey, byte row, byte col, uint8_t keyState);
};
extern MouseKeys_ MouseKeys;