Redefine IS_LAYER_ON/OFF() as aliases for existing layer functions (#6352)

* Add IS_LAYER_ON_STATE()/IS_LAYER_OFF_STATE() macros

* Add docs for IS_LAYER_ON/OFF(_STATE) macros

* Remove IS_LAYER_ON/OFF_STATE redefinition in userspace

* Run clang-format on quantum/quantum.h

* Redefine IS_LAYER_ON/OFF(_STATE) as aliases of existing layer functions

Also update relevant doc entries.

Needs testing to check if this breaks existing IS_LAYER_ON/OFF usage in certain
edge cases (namely calling the macros with 0).

* Reformat layer check function docs
This commit is contained in:
Konstantin Đorđević 2020-07-16 14:27:55 +02:00 committed by GitHub
parent f11437aef3
commit 61b64bb82a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 18 additions and 14 deletions

View file

@ -319,7 +319,7 @@ This runs code every time that the layers get changed. This can be useful for l
### Example `layer_state_set_*` Implementation ### Example `layer_state_set_*` Implementation
This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example This example shows how to set the [RGB Underglow](feature_rgblight.md) lights based on the layer, using the Planck as an example.
```c ```c
layer_state_t layer_state_set_user(layer_state_t state) { layer_state_t layer_state_set_user(layer_state_t state) {
@ -343,6 +343,11 @@ layer_state_t layer_state_set_user(layer_state_t state) {
return state; return state;
} }
``` ```
Use the `IS_LAYER_ON_STATE(state, layer)` and `IS_LAYER_OFF_STATE(state, layer)` macros to check the status of a particular layer.
Outside of `layer_state_set_*` functions, you can use the `IS_LAYER_ON(layer)` and `IS_LAYER_OFF(layer)` macros to check global layer state.
### `layer_state_set_*` Function Documentation ### `layer_state_set_*` Function Documentation
* Keyboard/Revision: `layer_state_t layer_state_set_kb(layer_state_t state)` * Keyboard/Revision: `layer_state_t layer_state_set_kb(layer_state_t state)`

View file

@ -74,10 +74,9 @@ There are a number of functions (and variables) related to how you can use or ma
| [`update_tri_layer(x, y, z)`](ref_functions.md#update_tri_layerx-y-z) | Checks if layers `x` and `y` are both on, and sets `z` based on that (on if both on, otherwise off). | | [`update_tri_layer(x, y, z)`](ref_functions.md#update_tri_layerx-y-z) | Checks if layers `x` and `y` are both on, and sets `z` based on that (on if both on, otherwise off). |
| [`update_tri_layer_state(state, x, y, z)`](ref_functions.md#update_tri_layer_statestate-x-y-z) | Does the same as `update_tri_layer(x, y, z)`, but from `layer_state_set_*` functions. | | [`update_tri_layer_state(state, x, y, z)`](ref_functions.md#update_tri_layer_statestate-x-y-z) | Does the same as `update_tri_layer(x, y, z)`, but from `layer_state_set_*` functions. |
In addition to the functions that you can call, there are a number of callback functions that get called every time the layer changes. This passes the layer state to the function, where it can be read or modified.
In additional to the functions that you can call, there are a number of callback functions that get called every time the layer changes. This passed the layer state to the function, which can be read or modified. |Callback |Description |
|Callbacks |Description |
|-----------------------------------------------------|----------------------------------------------------------------------------------------| |-----------------------------------------------------|----------------------------------------------------------------------------------------|
| `layer_state_set_kb(layer_state_t state)` | Callback for layer functions, for keyboard. | | `layer_state_set_kb(layer_state_t state)` | Callback for layer functions, for keyboard. |
| `layer_state_set_user(layer_state_t state)` | Callback for layer functions, for users. | | `layer_state_set_user(layer_state_t state)` | Callback for layer functions, for users. |
@ -86,9 +85,9 @@ In additional to the functions that you can call, there are a number of callback
?> For additional details on how you can use these callbacks, check out the [Layer Change Code](custom_quantum_functions.md#layer-change-code) document. ?> For additional details on how you can use these callbacks, check out the [Layer Change Code](custom_quantum_functions.md#layer-change-code) document.
|Check functions |Description | It is also possible to check the state of a particular layer using the following functions and macros.
|-------------------------------------------|------------------------------------------------------------------------------|
| `layer_state_cmp(cmp_layer_state, layer)` | This checks the `cmp_layer_state` to see if the specific `layer` is enabled. This is meant for use with the layer callbacks. |
| `layer_state_is(layer)` | This checks the layer state to see if the specific `layer` is enabled. (calls `layer_state_cmp` for the global layer state). |
!> There is `IS_LAYER_ON(layer)` as well, however the `layer_state_cmp` function has some additional handling to ensure that on layer 0 that it returns the correct value. Otherwise, if you check to see if layer 0 is on, you may get an incorrect value returned. |Function |Description |Aliases
|---------------------------------|-------------------------------------------------------------------------------------------------|-----------------------------------------------------------------------|
| `layer_state_is(layer)` | Checks if the specified `layer` is enabled globally. | `IS_LAYER_ON(layer)`, `IS_LAYER_OFF(layer)` |
| `layer_state_cmp(state, layer)` | Checks `state` to see if the specified `layer` is enabled. Intended for use in layer callbacks. | `IS_LAYER_ON_STATE(state, layer)`, `IS_LAYER_OFF_STATE(state, layer)` |

View file

@ -249,8 +249,11 @@ void set_single_persistent_default_layer(uint8_t default_layer);
void tap_random_base64(void); void tap_random_base64(void);
#define IS_LAYER_ON(layer) (layer_state & (1UL << (layer))) #define IS_LAYER_ON(layer) layer_state_is(layer)
#define IS_LAYER_OFF(layer) (~layer_state & (1UL << (layer))) #define IS_LAYER_OFF(layer) !layer_state_is(layer)
#define IS_LAYER_ON_STATE(state, layer) layer_state_cmp(state, layer)
#define IS_LAYER_OFF_STATE(state, layer) !layer_state_cmp(state, layer)
void matrix_init_kb(void); void matrix_init_kb(void);
void matrix_scan_kb(void); void matrix_scan_kb(void);

View file

@ -48,9 +48,6 @@
#define LCT_CPS LCTL_T(KC_CAPS) #define LCT_CPS LCTL_T(KC_CAPS)
#define RSF_SLS RSFT_T(KC_SLSH) #define RSF_SLS RSFT_T(KC_SLSH)
#define IS_LAYER_ON_STATE(state, layer) ( (state) & (1UL << (layer)))
#define IS_LAYER_OFF_STATE(state, layer) (~(state) & (1UL << (layer)))
// Clear mods, perform action, restore mods // Clear mods, perform action, restore mods
#define CLEAN_MODS(action) { \ #define CLEAN_MODS(action) { \
uint8_t mods = get_mods(); \ uint8_t mods = get_mods(); \