Clean up the layer toggle code a bit.

This commit is contained in:
László Monda
2018-06-07 03:55:40 +02:00
parent d889d51a7d
commit 64f54c268b
2 changed files with 7 additions and 8 deletions

View File

@@ -48,7 +48,7 @@ static parser_error_t parseKeyStrokeAction(key_action_t *keyAction, uint8_t keyS
static parser_error_t parseSwitchLayerAction(key_action_t *KeyAction, config_buffer_t *buffer) static parser_error_t parseSwitchLayerAction(key_action_t *KeyAction, config_buffer_t *buffer)
{ {
uint8_t layer = ReadUInt8(buffer) + 1; uint8_t layer = ReadUInt8(buffer) + 1;
uint8_t mode = ReadUInt8(buffer); switch_layer_mode_t mode = ReadUInt8(buffer);
KeyAction->type = KeyActionType_SwitchLayer; KeyAction->type = KeyActionType_SwitchLayer;
KeyAction->switchLayer.layer = layer; KeyAction->switchLayer.layer = layer;

View File

@@ -5,12 +5,12 @@
#include "keymap.h" #include "keymap.h"
static bool heldLayers[LAYER_COUNT]; static bool heldLayers[LAYER_COUNT];
static switch_layer_mode_t pressedLayers[LAYER_COUNT]; static bool toggledLayers[LAYER_COUNT];
void updateLayerStates(void) void updateLayerStates(void)
{ {
memset(heldLayers, false, LAYER_COUNT); memset(heldLayers, false, LAYER_COUNT);
memset(pressedLayers, false, LAYER_COUNT); memset(toggledLayers, false, LAYER_COUNT);
for (uint8_t slotId=0; slotId<SLOT_COUNT; slotId++) { for (uint8_t slotId=0; slotId<SLOT_COUNT; slotId++) {
for (uint8_t keyId=0; keyId<MAX_KEY_COUNT_PER_MODULE; keyId++) { for (uint8_t keyId=0; keyId<MAX_KEY_COUNT_PER_MODULE; keyId++) {
@@ -20,9 +20,8 @@ void updateLayerStates(void)
if (action.type == KeyActionType_SwitchLayer) { if (action.type == KeyActionType_SwitchLayer) {
if (action.switchLayer.mode != SwitchLayerMode_Toggle) { if (action.switchLayer.mode != SwitchLayerMode_Toggle) {
heldLayers[action.switchLayer.layer] = true; heldLayers[action.switchLayer.layer] = true;
} } else if (!keyState->previous && keyState->current) {
if (action.switchLayer.mode != SwitchLayerMode_Hold && !keyState->previous && keyState->current) { toggledLayers[action.switchLayer.layer] = action.switchLayer.mode;
pressedLayers[action.switchLayer.layer] = action.switchLayer.mode;
} }
} }
} }
@@ -40,11 +39,11 @@ layer_id_t GetActiveLayer()
// Handle toggled layers // Handle toggled layers
for (layer_id_t layerId=LayerId_Mod; layerId<=LayerId_Mouse; layerId++) { for (layer_id_t layerId=LayerId_Mod; layerId<=LayerId_Mouse; layerId++) {
if (pressedLayers[layerId]) { if (toggledLayers[layerId]) {
if (ToggledLayer == layerId) { if (ToggledLayer == layerId) {
ToggledLayer = LayerId_Base; ToggledLayer = LayerId_Base;
break; break;
} else if (ToggledLayer == LayerId_Base && pressedLayers[layerId] == SwitchLayerMode_Toggle) { } else if (ToggledLayer == LayerId_Base && toggledLayers[layerId] == SwitchLayerMode_Toggle) {
ToggledLayer = layerId; ToggledLayer = layerId;
break; break;
} }