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.
master
Martin Sandiford 2018-04-27 05:40:03 +09:30 committed by Jack Humbert
parent 80ccbc7b54
commit 66e40529aa
3 changed files with 15 additions and 27 deletions

View File

@ -34,12 +34,13 @@ enum planck_keycodes {
COLEMAK, COLEMAK,
DVORAK, DVORAK,
PLOVER, PLOVER,
LOWER,
RAISE,
BACKLIT, BACKLIT,
EXT_PLV EXT_PLV
}; };
#define LOWER MO(_LOWER)
#define RAISE MO(_RAISE)
const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
/* Qwerty /* Qwerty
@ -177,6 +178,10 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = {
float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND); float plover_gb_song[][2] = SONG(PLOVER_GOODBYE_SOUND);
#endif #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) { bool process_record_user(uint16_t keycode, keyrecord_t *record) {
switch (keycode) { switch (keycode) {
case QWERTY: case QWERTY:
@ -198,26 +203,6 @@ bool process_record_user(uint16_t keycode, keyrecord_t *record) {
} }
return false; return false;
break; 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: case BACKLIT:
if (record->event.pressed) { if (record->event.pressed) {
register_code(KC_RSFT); register_code(KC_RSFT);

View File

@ -780,12 +780,14 @@ void set_single_persistent_default_layer(uint8_t default_layer) {
default_layer_set(1U<<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) { void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3) {
if (IS_LAYER_ON(layer1) && IS_LAYER_ON(layer2)) { layer_state_set(update_tri_layer_state(layer_state, layer1, layer2, layer3));
layer_on(layer3);
} else {
layer_off(layer3);
}
} }
void tap_random_base64(void) { void tap_random_base64(void) {

View File

@ -142,6 +142,7 @@ void send_char(char ascii_code);
// For tri-layer // For tri-layer
void update_tri_layer(uint8_t layer1, uint8_t layer2, uint8_t layer3); 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); void set_single_persistent_default_layer(uint8_t default_layer);