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.
This commit is contained in:
		
				
					committed by
					
						 Jack Humbert
						Jack Humbert
					
				
			
			
				
	
			
			
			
						parent
						
							80ccbc7b54
						
					
				
				
					commit
					66e40529aa
				
			| @@ -34,12 +34,13 @@ enum planck_keycodes { | ||||
|   COLEMAK, | ||||
|   DVORAK, | ||||
|   PLOVER, | ||||
|   LOWER, | ||||
|   RAISE, | ||||
|   BACKLIT, | ||||
|   EXT_PLV | ||||
| }; | ||||
|  | ||||
| #define LOWER MO(_LOWER) | ||||
| #define RAISE MO(_RAISE) | ||||
|  | ||||
| const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
|  | ||||
| /* Qwerty | ||||
| @@ -177,6 +178,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | ||||
|   float plover_gb_song[][2]  = SONG(PLOVER_GOODBYE_SOUND); | ||||
| #endif | ||||
|  | ||||
| uint32_t layer_state_set_user(uint32_t state) { | ||||
|   return update_tri_layer_state(state, _LOWER, _RAISE, _ADJUST); | ||||
| } | ||||
|  | ||||
| bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|   switch (keycode) { | ||||
|     case QWERTY: | ||||
| @@ -198,26 +203,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) { | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case LOWER: | ||||
|       if (record->event.pressed) { | ||||
|         layer_on(_LOWER); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } else { | ||||
|         layer_off(_LOWER); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case RAISE: | ||||
|       if (record->event.pressed) { | ||||
|         layer_on(_RAISE); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } else { | ||||
|         layer_off(_RAISE); | ||||
|         update_tri_layer(_LOWER, _RAISE, _ADJUST); | ||||
|       } | ||||
|       return false; | ||||
|       break; | ||||
|     case BACKLIT: | ||||
|       if (record->event.pressed) { | ||||
|         register_code(KC_RSFT); | ||||
|   | ||||
| @@ -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) { | ||||
|   | ||||
| @@ -142,6 +142,7 @@ void send_char(char ascii_code); | ||||
|  | ||||
| // For tri-layer | ||||
| void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); | ||||
| uint32_t update_tri_layer_state(uint32_t state, uint8_t layer1, uint8_t layer2, uint8_t layer3); | ||||
|  | ||||
| void set_single_persistent_default_layer(uint8_t default_layer); | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user