From e3073be4884c53bbd922477a83553d03f4eb7ebb Mon Sep 17 00:00:00 2001 From: Albert Y <76888457+filterpaper@users.noreply.github.com> Date: Mon, 27 Dec 2021 11:16:18 +0800 Subject: [PATCH] RGB Matrix layer key indicator (#14626) * Add layer key indicator example * Update description * Deobfuscate with index variable * Add missing layer variable * Correct color name and indicator function * Function typo * Place layer variable outside loops to save firmware space Co-authored-by: filterpaper --- docs/feature_rgb_matrix.md | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/docs/feature_rgb_matrix.md b/docs/feature_rgb_matrix.md index 8ba39b476..3132360a3 100644 --- a/docs/feature_rgb_matrix.md +++ b/docs/feature_rgb_matrix.md @@ -790,6 +790,26 @@ void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { } ``` +Layer indicator with only configured keys: +```c +void rgb_matrix_indicators_advanced_user(uint8_t led_min, uint8_t led_max) { + if (get_highest_layer(layer_state) > 0) { + uint8_t layer = get_highest_layer(layer_state); + + for (uint8_t row = 0; row < MATRIX_ROWS; ++row) { + for (uint8_t col = 0; col < MATRIX_COLS; ++col) { + uint8_t index = g_led_config.matrix_co[row][col]; + + if (index >= led_min && index <= led_max && index != NO_LED && + keymap_key_to_keycode(layer, (keypos_t){col,row}) > KC_TRNS) { + rgb_matrix_set_color(index, RGB_GREEN); + } + } + } + } +} +``` + #### Examples :id=indicator-examples This example sets the modifiers to be a specific color based on the layer state. You can use a switch case here, instead, if you would like. This uses HSV and then converts to RGB, because this allows the brightness to be limited (important when using the WS2812 driver).