summaryrefslogtreecommitdiffstats
path: root/quantum/quantum.c
diff options
context:
space:
mode:
authorMartin Sandiford <ms@mcdev.com.au>2018-04-26 22:10:03 +0200
committerJack Humbert <jack.humb@gmail.com>2018-04-26 22:10:03 +0200
commit66e40529aa9271c76d207fb8190ad76bb5cf8d6b (patch)
tree6c4a1e185cc268b2c16236339a23b4ea8fb05b49 /quantum/quantum.c
parent80ccbc7b547d07236f302af830be75e646b7848f (diff)
downloadqmk_firmware-66e40529aa9271c76d207fb8190ad76bb5cf8d6b.tar.gz
qmk_firmware-66e40529aa9271c76d207fb8190ad76bb5cf8d6b.tar.xz
Change handling of adjust layer to make it more LT(...) friendly. (#1625)
* Change handling of adjust layer to make it more LT(...) friendly. * Update based on feedback from drashna. * Change handling of adjust layer to make it more LT(...) friendly. This reworks handling to make it a little more friendly to include in keymaps.
Diffstat (limited to 'quantum/quantum.c')
-rw-r--r--quantum/quantum.c12
1 files changed, 7 insertions, 5 deletions
diff --git a/quantum/quantum.c b/quantum/quantum.c
index 5a2a73d4a..2662e5ef1 100644
--- a/quantum/quantum.c
+++ b/quantum/quantum.c
@@ -780,12 +780,14 @@ void set_single_persistent_default_layer(uint8_t default_layer) {
default_layer_set(1U<<default_layer);
}
+uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) {
+ uint32_t mask12 = (1UL << layer1) | (1UL << layer2);
+ uint32_t mask3 = 1UL << layer3;
+ return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3);
+}
+
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
- if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) {
- layer_on(layer3);
- } else {
- layer_off(layer3);
- }
+ layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3));
}
void tap_random_base64(void) {