master
Stefan Dorn 2016-06-12 04:09:35 +01:00
parent afc7d9f87c
commit a57fdf7efd
1 changed files with 12 additions and 15 deletions

View File

@ -25,10 +25,6 @@ typedef enum StickyState {
} StickyState;
// layer data
struct layer {
bool active;
StickyState sticky;
};
#include "./main.h"
// ----------------------------------------------------------------------------
@ -57,8 +53,9 @@ static bool main_arg_was_pressed;
static bool main_arg_any_non_trans_key_pressed;
static bool main_arg_trans_key_pressed;
static struct layer layers[KB_LAYERS];
static uint8_t layers_top = 0;
static bool layers_active[KB_LAYERS];
static StickyState layers_sticky[KB_LAYERS];
static uint8_t layers_top = 0;
// ----------------------------------------------------------------------------
@ -86,10 +83,10 @@ int main(void) {
void main_init_layers() {
for (uint8_t layer=0; layer < KB_LAYERS; layer++) {
layers[layer].active = false;
layers[layer].sticky = eStickyNone;
layers_active[layer] = false;
layers_sticky[layer] = eStickyNone;
}
layers[0].active = true;
layers_active[0] = true;
}
@ -97,7 +94,7 @@ void main_init_layers() {
uint8_t _highest_active_layer(uint8_t offset) {
if (offset < layers_top) {
for (uint8_t l = layers_top - offset; l > 0 && l < KB_LAYERS; l--) {
if (layers[l].active) { return l; }
if (layers_active[l]) { return l; }
}
}
@ -118,7 +115,7 @@ StickyState main_layers_top_sticky() {
// return if layer is sticky
StickyState main_layers_sticky(uint8_t layer) {
if (layer < KB_LAYERS) {
return layers[layer].sticky;
return layers_sticky[layer];
}
return eStickyNone;
}
@ -127,8 +124,8 @@ StickyState main_layers_sticky(uint8_t layer) {
void main_layers_enable(uint8_t layer, StickyState sticky) {
if (layer >= KB_LAYERS) { return; }
layers[layer].active = true;
layers[layer].sticky = sticky;
layers_active[layer] = true;
layers_sticky[layer] = sticky;
if (layer > layers_top) {
layers_top = layer;
@ -140,8 +137,8 @@ void main_layers_disable(uint8_t layer) {
// base layer stays always on
if (layer >= KB_LAYERS || layer == 0) { return; }
layers[layer].active = false;
layers[layer].sticky = eStickyNone;
layers_active[layer] = false;
layers_sticky[layer] = eStickyNone;
if (layer == layers_top) {
layers_top = _highest_active_layer(1);