@ -17,7 +17,7 @@
*/
# include <Kaleidoscope-LED-ActiveModColor.h>
# include <Kaleidoscope- Ranges .h>
# include <Kaleidoscope- OneShot .h>
# include <kaleidoscope/hid.h>
namespace kaleidoscope {
@ -30,42 +30,6 @@ void ActiveModColorEffect::begin(void) {
Kaleidoscope . useLoopHook ( loopHook ) ;
}
uint8_t ActiveModColorEffect : : isModifierKeyActive ( Key key ) {
if ( key . raw > = ranges : : OSM_FIRST & & key . raw < = ranges : : OSM_LAST ) {
uint8_t idx = key . raw - ranges : : OSM_FIRST ;
key . flags = 0 ;
key . keyCode = Key_LeftControl . keyCode + idx ;
}
if ( key . raw < Key_LeftControl . raw | | key . raw > Key_RightGui . raw )
return 0 ;
if ( hid : : isModifierKeyActive ( key ) )
return 2 ;
else
return 1 ;
}
uint8_t ActiveModColorEffect : : isLayerKeyActive ( Key key ) {
uint8_t layer = 255 ;
if ( key . raw > = ranges : : OSL_FIRST & & key . raw < = ranges : : OSL_LAST ) {
layer = key . raw - ranges : : OSL_FIRST ;
} else if ( key . flags = = ( SYNTHETIC | SWITCH_TO_KEYMAP ) ) {
layer = key . keyCode ;
if ( layer > = MOMENTARY_OFFSET )
layer - = MOMENTARY_OFFSET ;
}
if ( layer = = 255 )
return 0 ;
if ( Layer . isOn ( layer ) )
return 2 ;
else
return 1 ;
}
void ActiveModColorEffect : : loopHook ( bool is_post_clear ) {
if ( is_post_clear )
return ;
@ -73,16 +37,27 @@ void ActiveModColorEffect::loopHook(bool is_post_clear) {
for ( byte r = 0 ; r < ROWS ; r + + ) {
for ( byte c = 0 ; c < COLS ; c + + ) {
Key k = Layer . lookupOnActiveLayer ( r , c ) ;
uint8_t is_mod = isModifierKeyActive ( k ) ;
uint8_t is_layer = isLayerKeyActive ( k ) ;
if ( ! is_mod & & ! is_layer ) // Neither mod, nor layer key
continue ;
if ( is_mod = = 2 | | is_layer = = 2 )
: : LEDControl . setCrgbAt ( r , c , highlight_color ) ;
else
: : LEDControl . refreshAt ( r , c ) ;
if ( : : OneShot . isOneShotKey ( k ) ) {
if ( : : OneShot . isActive ( k ) )
: : LEDControl . setCrgbAt ( r , c , highlight_color ) ;
else
: : LEDControl . refreshAt ( r , c ) ;
} else if ( k . raw > = Key_LeftControl . raw & & k . raw < = Key_RightGui . raw ) {
if ( hid : : isModifierKeyActive ( k ) )
: : LEDControl . setCrgbAt ( r , c , highlight_color ) ;
else
: : LEDControl . refreshAt ( r , c ) ;
} else if ( k . flags = = ( SYNTHETIC | SWITCH_TO_KEYMAP ) ) {
uint8_t layer = k . keyCode ;
if ( layer > = MOMENTARY_OFFSET )
layer - = MOMENTARY_OFFSET ;
if ( Layer . isOn ( layer ) )
: : LEDControl . setCrgbAt ( r , c , highlight_color ) ;
else
: : LEDControl . refreshAt ( r , c ) ;
}
}
}
}