X-Git-Url: https://git.donarmstrong.com/?a=blobdiff_plain;f=tmk_core%2Fcommon%2Faction_layer.h;h=6d48321f9278269ab0bab81cd2b5d90a6da76c1e;hb=5d47231f2a9353645aab07e14c1de21f00b7fc2f;hp=1a313a2590472a72efb581557191cc8fbbad7ba2;hpb=47dd29513eeec7b7f639bef6df441a905ce8bacb;p=qmk_firmware.git diff --git a/tmk_core/common/action_layer.h b/tmk_core/common/action_layer.h index 1a313a259..6d48321f9 100644 --- a/tmk_core/common/action_layer.h +++ b/tmk_core/common/action_layer.h @@ -29,6 +29,11 @@ extern uint32_t default_layer_state; void default_layer_debug(void); void default_layer_set(uint32_t state); +__attribute__((weak)) +uint32_t default_layer_state_set_kb(uint32_t state); +__attribute__((weak)) +uint32_t default_layer_state_set_user(uint32_t state); + #ifndef NO_ACTION_LAYER /* bitwise operation */ void default_layer_or(uint32_t state); @@ -46,6 +51,11 @@ void default_layer_xor(uint32_t state); */ #ifndef NO_ACTION_LAYER extern uint32_t layer_state; + +void layer_state_set(uint32_t state); +bool layer_state_is(uint8_t layer); +bool layer_state_cmp(uint32_t layer1, uint8_t layer2); + void layer_debug(void); void layer_clear(void); void layer_move(uint8_t layer); @@ -57,19 +67,36 @@ void layer_or(uint32_t state); void layer_and(uint32_t state); void layer_xor(uint32_t state); #else -#define layer_state 0 +#define layer_state 0 + +#define layer_state_set(layer) +#define layer_state_is(layer) (layer == 0) +#define layer_state_cmp(state, layer) (state == 0 ? layer == 0 : (state & 1UL << layer) != 0) + +#define layer_debug() #define layer_clear() #define layer_move(layer) #define layer_on(layer) #define layer_off(layer) #define layer_invert(layer) - #define layer_or(state) #define layer_and(state) #define layer_xor(state) -#define layer_debug() + +__attribute__((weak)) +uint32_t layer_state_set_user(uint32_t state); +__attribute__((weak)) +uint32_t layer_state_set_kb(uint32_t state); #endif +/* pressed actions cache */ +#if !defined(NO_ACTION_LAYER) && !defined(STRICT_LAYER_RELEASE) +/* The number of bits needed to represent the layer number: log2(32). */ +#define MAX_LAYER_BITS 5 +void update_source_layers_cache(keypos_t key, uint8_t layer); +uint8_t read_source_layers_cache(keypos_t key); +#endif +action_t store_or_get_action(bool pressed, keypos_t key); /* return the topmost non-transparent layer currently associated with key */ int8_t layer_switch_get_layer(keypos_t key);