forked from mirrors/qmk_userspace
		
	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:
		
					parent
					
						
							
								f11437aef3
							
						
					
				
			
			
				commit
				
					
						61b64bb82a
					
				
			
		
					 4 changed files with 18 additions and 14 deletions
				
			
		| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
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;
 | 
			
		||||
}
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
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
 | 
			
		||||
 | 
			
		||||
* Keyboard/Revision: `layer_state_t layer_state_set_kb(layer_state_t state)`
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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_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.
 | 
			
		||||
 | 
			
		||||
|Callbacks                                     |Description                                                                                    |
 | 
			
		||||
|Callback                                             |Description                                                                             |
 | 
			
		||||
|-----------------------------------------------------|----------------------------------------------------------------------------------------|
 | 
			
		||||
| `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.                                               |
 | 
			
		||||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
 | 
			
		||||
|Check functions                                                  |Description                                                                   |
 | 
			
		||||
|-------------------------------------------|------------------------------------------------------------------------------|
 | 
			
		||||
| `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). |
 | 
			
		||||
It is also possible to check the state of a particular layer using the following functions and macros.
 | 
			
		||||
 | 
			
		||||
!> 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)` |
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -249,8 +249,11 @@ void set_single_persistent_default_layer(uint8_t default_layer);
 | 
			
		|||
 | 
			
		||||
void tap_random_base64(void);
 | 
			
		||||
 | 
			
		||||
#define IS_LAYER_ON(layer) (layer_state & (1UL << (layer)))
 | 
			
		||||
#define IS_LAYER_OFF(layer) (~layer_state & (1UL << (layer)))
 | 
			
		||||
#define IS_LAYER_ON(layer) layer_state_is(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_scan_kb(void);
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -48,9 +48,6 @@
 | 
			
		|||
#define LCT_CPS LCTL_T(KC_CAPS)
 | 
			
		||||
#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
 | 
			
		||||
#define CLEAN_MODS(action) {       \
 | 
			
		||||
        uint8_t mods = get_mods(); \
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue