[Code] Add solid reactive gradient mode (#17228)
This commit is contained in:
		
							parent
							
								
									3c58f98929
								
							
						
					
					
						commit
						300dab7962
					
				
					 6 changed files with 25 additions and 0 deletions
				
			
		| 
						 | 
				
			
			@ -688,6 +688,16 @@ Remove the spread effect entirely.
 | 
			
		|||
#define RGB_MATRIX_TYPING_HEATMAP_SLIM
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
### RGB Matrix Effect Solid Reactive :id=rgb-matrix-effect-solid-reactive
 | 
			
		||||
 | 
			
		||||
Solid reactive effects will pulse RGB light on key presses with user configurable hues. To enable gradient mode that will automatically change reactive color, add the following define:
 | 
			
		||||
 | 
			
		||||
```c
 | 
			
		||||
#define RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Gradient mode will loop through the color wheel hues over time and its duration can be controlled with the effect speed keycodes (`RGB_SPI`/`RGB_SPD`).
 | 
			
		||||
 | 
			
		||||
## Custom RGB Matrix Effects :id=custom-rgb-matrix-effects
 | 
			
		||||
 | 
			
		||||
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 `rgb_matrix_user.inc` file in the user keymap directory or userspace folder.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,9 @@ RGB_MATRIX_EFFECT(SOLID_REACTIVE)
 | 
			
		|||
#        ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
 | 
			
		||||
 | 
			
		||||
static HSV SOLID_REACTIVE_math(HSV hsv, uint16_t offset) {
 | 
			
		||||
#            ifdef RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
 | 
			
		||||
    hsv.h = scale16by8(g_rgb_timer, add8(rgb_matrix_config.speed, 1) >> 6);
 | 
			
		||||
#            endif
 | 
			
		||||
    hsv.h += qsub8(130, offset);
 | 
			
		||||
    return hsv;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -19,6 +19,9 @@ static HSV SOLID_REACTIVE_CROSS_math(HSV hsv, int16_t dx, int16_t dy, uint8_t di
 | 
			
		|||
    dy              = dy * 16 > 255 ? 255 : dy * 16;
 | 
			
		||||
    effect += dx > dy ? dy : dx;
 | 
			
		||||
    if (effect > 255) effect = 255;
 | 
			
		||||
#            ifdef RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
 | 
			
		||||
    hsv.h = scale16by8(g_rgb_timer, add8(rgb_matrix_config.speed, 1) >> 6);
 | 
			
		||||
#            endif
 | 
			
		||||
    hsv.v = qadd8(hsv.v, 255 - effect);
 | 
			
		||||
    return hsv;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -16,6 +16,9 @@ static HSV SOLID_REACTIVE_NEXUS_math(HSV hsv, int16_t dx, int16_t dy, uint8_t di
 | 
			
		|||
    if (effect > 255) effect = 255;
 | 
			
		||||
    if (dist > 72) effect = 255;
 | 
			
		||||
    if ((dx > 8 || dx < -8) && (dy > 8 || dy < -8)) effect = 255;
 | 
			
		||||
#            ifdef RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
 | 
			
		||||
    hsv.h = scale16by8(g_rgb_timer, add8(rgb_matrix_config.speed, 1) >> 6);
 | 
			
		||||
#            endif
 | 
			
		||||
    hsv.v = qadd8(hsv.v, 255 - effect);
 | 
			
		||||
    hsv.h = rgb_matrix_config.hsv.h + dy / 4;
 | 
			
		||||
    return hsv;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -4,6 +4,9 @@ RGB_MATRIX_EFFECT(SOLID_REACTIVE_SIMPLE)
 | 
			
		|||
#        ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
 | 
			
		||||
 | 
			
		||||
static HSV SOLID_REACTIVE_SIMPLE_math(HSV hsv, uint16_t offset) {
 | 
			
		||||
#            ifdef RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
 | 
			
		||||
    hsv.h = scale16by8(g_rgb_timer, add8(rgb_matrix_config.speed, 1) >> 6);
 | 
			
		||||
#            endif
 | 
			
		||||
    hsv.v = scale8(255 - offset, hsv.v);
 | 
			
		||||
    return hsv;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -14,6 +14,9 @@ RGB_MATRIX_EFFECT(SOLID_REACTIVE_MULTIWIDE)
 | 
			
		|||
static HSV SOLID_REACTIVE_WIDE_math(HSV hsv, int16_t dx, int16_t dy, uint8_t dist, uint16_t tick) {
 | 
			
		||||
    uint16_t effect = tick + dist * 5;
 | 
			
		||||
    if (effect > 255) effect = 255;
 | 
			
		||||
#            ifdef RGB_MATRIX_SOLID_REACTIVE_GRADIENT_MODE
 | 
			
		||||
    hsv.h = scale16by8(g_rgb_timer, add8(rgb_matrix_config.speed, 1) >> 6);
 | 
			
		||||
#            endif
 | 
			
		||||
    hsv.v = qadd8(hsv.v, 255 - effect);
 | 
			
		||||
    return hsv;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue