aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMartin Sandiford <ms@mcdev.com.au>2018-04-27 05:40:03 +0930
committerJack Humbert <jack.humb@gmail.com>2018-04-26 16:10:03 -0400
commit66e40529aa9271c76d207fb8190ad76bb5cf8d6b (patch)
tree6c4a1e185cc268b2c16236339a23b4ea8fb05b49
parent80ccbc7b547d07236f302af830be75e646b7848f (diff)
downloadqmk_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.c29
-rw-r--r--quantum/quantum.c12
-rw-r--r--quantum/quantum.h1
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
43const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { 44const 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
181uint32_t layer_state_set_user(uint32_t state) {
182 return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST);
183}
184
180bool process_record_user(uint16_t keycode, keyrecord_t *record) { 185bool 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
783uint32_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
783void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) { 789void 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
791void tap_random_base64(void) { 793void 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
144void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); 144void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3);
145uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3);
145 146
146void set_single_persistent_default_layer(uint8_t default_layer); 147void set_single_persistent_default_layer(uint8_t default_layer);
147 148