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; } StickyState;
// layer data // layer data
struct layer {
bool active;
StickyState sticky;
};
#include "./main.h" #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_any_non_trans_key_pressed;
static bool main_arg_trans_key_pressed; static bool main_arg_trans_key_pressed;
static struct layer layers[KB_LAYERS]; static bool layers_active[KB_LAYERS];
static uint8_t layers_top = 0; static StickyState layers_sticky[KB_LAYERS];
static uint8_t layers_top = 0;
// ---------------------------------------------------------------------------- // ----------------------------------------------------------------------------
@ -86,10 +83,10 @@ int main(void) {
void main_init_layers() { void main_init_layers() {
for (uint8_t layer=0; layer < KB_LAYERS; layer++) { for (uint8_t layer=0; layer < KB_LAYERS; layer++) {
layers[layer].active = false; layers_active[layer] = false;
layers[layer].sticky = eStickyNone; 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) { uint8_t _highest_active_layer(uint8_t offset) {
if (offset < layers_top) { if (offset < layers_top) {
for (uint8_t l = layers_top - offset; l > 0 && l < KB_LAYERS; l--) { 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 // return if layer is sticky
StickyState main_layers_sticky(uint8_t layer) { StickyState main_layers_sticky(uint8_t layer) {
if (layer < KB_LAYERS) { if (layer < KB_LAYERS) {
return layers[layer].sticky; return layers_sticky[layer];
} }
return eStickyNone; return eStickyNone;
} }
@ -127,8 +124,8 @@ StickyState main_layers_sticky(uint8_t layer) {
void main_layers_enable(uint8_t layer, StickyState sticky) { void main_layers_enable(uint8_t layer, StickyState sticky) {
if (layer >= KB_LAYERS) { return; } if (layer >= KB_LAYERS) { return; }
layers[layer].active = true; layers_active[layer] = true;
layers[layer].sticky = sticky; layers_sticky[layer] = sticky;
if (layer > layers_top) { if (layer > layers_top) {
layers_top = layer; layers_top = layer;
@ -140,8 +137,8 @@ void main_layers_disable(uint8_t layer) {
// base layer stays always on // base layer stays always on
if (layer >= KB_LAYERS || layer == 0) { return; } if (layer >= KB_LAYERS || layer == 0) { return; }
layers[layer].active = false; layers_active[layer] = false;
layers[layer].sticky = eStickyNone; layers_sticky[layer] = eStickyNone;
if (layer == layers_top) { if (layer == layers_top) {
layers_top = _highest_active_layer(1); layers_top = _highest_active_layer(1);