diff options
| author | Martin Sandiford <ms@mcdev.com.au> | 2018-04-27 05:40:03 +0930 |
|---|---|---|
| committer | Jack Humbert <jack.humb@gmail.com> | 2018-04-26 16:10:03 -0400 |
| commit | 66e40529aa9271c76d207fb8190ad76bb5cf8d6b (patch) | |
| tree | 6c4a1e185cc268b2c16236339a23b4ea8fb05b49 | |
| parent | 80ccbc7b547d07236f302af830be75e646b7848f (diff) | |
| download | qmk_firmware-66e40529aa9271c76d207fb8190ad76bb5cf8d6b.tar.gz qmk_firmware-66e40529aa9271c76d207fb8190ad76bb5cf8d6b.zip | |
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.
| -rw-r--r-- | keyboards/planck/keymaps/default/keymap.c | 29 | ||||
| -rw-r--r-- | quantum/quantum.c | 12 | ||||
| -rw-r--r-- | quantum/quantum.h | 1 |
3 files changed, 15 insertions, 27 deletions
diff --git a/keyboards/planck/keymaps/default/keymap.c b/keyboards/planck/keymaps/default/keymap.c index 04fc33640..b13557eee 100644 --- a/keyboards/planck/keymaps/default/keymap.c +++ b/keyboards/planck/keymaps/default/keymap.c | |||
| @@ -34,12 +34,13 @@ enum planck_keycodes { | |||
| 34 | COLEMAK, | 34 | COLEMAK, |
| 35 | DVORAK, | 35 | DVORAK, |
| 36 | PLOVER, | 36 | PLOVER, |
| 37 | LOWER, | ||
| 38 | RAISE, | ||
| 39 | BACKLIT, | 37 | BACKLIT, |
| 40 | EXT_PLV | 38 | EXT_PLV |
| 41 | }; | 39 | }; |
| 42 | 40 | ||
| 41 | #define LOWER MO(_LOWER) | ||
| 42 | #define RAISE MO(_RAISE) | ||
| 43 | |||
| 43 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | 44 | const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { |
| 44 | 45 | ||
| 45 | /* Qwerty | 46 | /* Qwerty |
| @@ -177,6 +178,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 177 | float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); | 178 | float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); |
| 178 | #endif | 179 | #endif |
| 179 | 180 | ||
| 181 | uint32_t layer_state_set_user(uint32_t state) { | ||
| 182 | return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); | ||
| 183 | } | ||
| 184 | |||
| 180 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { | 185 | bool process_record_user(uint16_t keycode, keyrecord_t *record) { |
| 181 | switch (keycode) { | 186 | switch (keycode) { |
| 182 | case QWERTY: | 187 | case QWERTY: |
| @@ -198,26 +203,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | |||
| 198 | } | 203 | } |
| 199 | return false; | 204 | return false; |
| 200 | break; | 205 | break; |
| 201 | case LOWER: | ||
| 202 | if (record->event.pressed) { | ||
| 203 | layer_on(_LOWER); | ||
| 204 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
| 205 | } else { | ||
| 206 | layer_off(_LOWER); | ||
| 207 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
| 208 | } | ||
| 209 | return false; | ||
| 210 | break; | ||
| 211 | case RAISE: | ||
| 212 | if (record->event.pressed) { | ||
| 213 | layer_on(_RAISE); | ||
| 214 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
| 215 | } else { | ||
| 216 | layer_off(_RAISE); | ||
| 217 | update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||
| 218 | } | ||
| 219 | return false; | ||
| 220 | break; | ||
| 221 | case BACKLIT: | 206 | case BACKLIT: |
| 222 | if (record->event.pressed) { | 207 | if (record->event.pressed) { |
| 223 | register_code(KC_RSFT); | 208 | register_code(KC_RSFT); |
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) { | |||
| 780 | default_layer_set(1U<<default_layer); | 780 | default_layer_set(1U<<default_layer); |
| 781 | } | 781 | } |
| 782 | 782 | ||
| 783 | uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3) { | ||
| 784 | uint32_t mask12 = (1UL << layer1) | (1UL << layer2); | ||
| 785 | uint32_t mask3 = 1UL << layer3; | ||
| 786 | return (state & mask12) == mask12 ? (state | mask3) : (state & ~mask3); | ||
| 787 | } | ||
| 788 | |||
| 783 | void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) { | 789 | void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) { |
| 784 | if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { | 790 | layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3)); |
| 785 | layer_on(layer3); | ||
| 786 | } else { | ||
| 787 | layer_off(layer3); | ||
| 788 | } | ||
| 789 | } | 791 | } |
| 790 | 792 | ||
| 791 | void tap_random_base64(void) { | 793 | void tap_random_base64(void) { |
diff --git a/quantum/quantum.h b/quantum/quantum.h index 80a606f09..195f578de 100644 --- a/quantum/quantum.h +++ b/quantum/quantum.h | |||
| @@ -142,6 +142,7 @@ void send_char(char ascii_code); | |||
| 142 | 142 | ||
| 143 | // For tri-layer | 143 | // For tri-layer |
| 144 | void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); | 144 | void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); |
| 145 | uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3); | ||
| 145 | 146 | ||
| 146 | void set_single_persistent_default_layer(uint8_t default_layer); | 147 | void set_single_persistent_default_layer(uint8_t default_layer); |
| 147 | 148 | ||
