From 22abbb6411d7be3d8f7238946587f758563f1f0c Mon Sep 17 00:00:00 2001 From: drashna Date: Tue, 28 Dec 2021 21:02:16 +0000 Subject: [PATCH] =?UTF-8?q?Deploying=20to=20gh-pages=20from=20master=20@?= =?UTF-8?q?=203dee6e28dd2fce27945bd464f5a80d3508e7c1d4=20=F0=9F=9A=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- feature_encoders.md | 37 +++++++++++++++++++++++++++++++++++++ feature_rgb_matrix.md | 27 +++++++++++++++++++++++---- 2 files changed, 60 insertions(+), 4 deletions(-) diff --git a/feature_encoders.md b/feature_encoders.md index 8e854c1e58..8ab5ca9c46 100644 --- a/feature_encoders.md +++ b/feature_encoders.md @@ -87,6 +87,43 @@ bool encoder_update_user(uint8_t index, bool clockwise) { !> If you return `true`, this will allow the keyboard level code to run, as well. Returning `false` will override the keyboard level code. Depending on how the keyboard level function is set up. +Layer conditions can also be used with the callback function like the following: + +```c +bool encoder_update_user(uint8_t index, bool clockwise) { + if (get_highest_layer(layer_state|default_layer_state) > 0) { + if (index == 0) { + if (clockwise) { + tap_code(KC_WH_D); + } else { + tap_code(KC_WH_U); + } + } else if (index == 1) { + if (clockwise) { + tap_code(KC_VOLU); + } else { + tap_code(KC_VOLD); + } + } + } else { /* Layer 0 */ + if (index == 0) { + if (clockwise) { + tap_code(KC_PGDN); + } else { + tap_code(KC_PGUP); + } + } else if (index == 1) { + if (clockwise) { + tap_code(KC_DOWN); + } else { + tap_code(KC_UP); + } + } + } + return false; +} +``` + ## Hardware The A an B lines of the encoders should be wired directly to the MCU, and the C/common lines should be wired to ground. diff --git a/feature_rgb_matrix.md b/feature_rgb_matrix.md index 8ba39b476b..3a40be5f5e 100644 --- a/feature_rgb_matrix.md +++ b/feature_rgb_matrix.md @@ -554,12 +554,11 @@ In order to change the delay of temperature decrease define ## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects -By setting `RGB_MATRIX_CUSTOM_USER` (and/or `RGB_MATRIX_CUSTOM_KB`) in `rules.mk`, new effects can be defined directly from userspace, without having to edit any QMK core files. +By setting `RGB_MATRIX_CUSTOM_USER = yes` in `rules.mk`, new effects can be defined directly from your keymap or userspace, without having to edit any QMK core files. -To declare new effects, create a new `rgb_matrix_user/kb.inc` that looks something like this: +To declare new effects, create a `rgb_matrix_user.inc` file in the user keymap directory or userspace folder. -`rgb_matrix_user.inc` should go in the root of the keymap directory. -`rgb_matrix_kb.inc` should go in the root of the keyboard directory. +?> Hardware maintainers who want to limit custom effects to a specific keyboard can create a `rgb_matrix_kb.inc` file in the root of the keyboard directory, and add `RGB_MATRIX_CUSTOM_KB = yes` to the keyboard level `rules.mk`. To use custom effects in your code, simply prepend `RGB_MATRIX_CUSTOM_` to the effect name specified in `RGB_MATRIX_EFFECT()`. For example, an effect declared as `RGB_MATRIX_EFFECT(my_cool_effect)` would be referenced with: @@ -790,6 +789,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).