aboutsummaryrefslogtreecommitdiff
path: root/quantum/rgb_matrix/animations
diff options
context:
space:
mode:
Diffstat (limited to 'quantum/rgb_matrix/animations')
-rw-r--r--quantum/rgb_matrix/animations/alpha_mods_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/breathing_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/fractal_anim.h74
-rw-r--r--quantum/rgb_matrix/animations/gradient_left_right_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/gradient_up_down_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/hue_breathing_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/jellybean_raindrops_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/pixel_rain_anim.h44
-rw-r--r--quantum/rgb_matrix/animations/raindrops_anim.h2
-rw-r--r--quantum/rgb_matrix/animations/rgb_matrix_effects.inc2
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h2
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h2
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_i.h2
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_reactive.h2
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h2
-rw-r--r--quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h2
-rw-r--r--quantum/rgb_matrix/animations/solid_color_anim.h2
17 files changed, 134 insertions, 14 deletions
diff --git a/quantum/rgb_matrix/animations/alpha_mods_anim.h b/quantum/rgb_matrix/animations/alpha_mods_anim.h
index 3f2c9b799..b8f507268 100644
--- a/quantum/rgb_matrix/animations/alpha_mods_anim.h
+++ b/quantum/rgb_matrix/animations/alpha_mods_anim.h
@@ -19,7 +19,7 @@ bool ALPHAS_MODS(effect_params_t* params) {
19 rgb_matrix_set_color(i, rgb1.r, rgb1.g, rgb1.b); 19 rgb_matrix_set_color(i, rgb1.r, rgb1.g, rgb1.b);
20 } 20 }
21 } 21 }
22 return led_max < DRIVER_LED_TOTAL; 22 return rgb_matrix_check_finished_leds(led_max);
23} 23}
24 24
25# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 25# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/breathing_anim.h b/quantum/rgb_matrix/animations/breathing_anim.h
index a00ccb83a..baac51ed1 100644
--- a/quantum/rgb_matrix/animations/breathing_anim.h
+++ b/quantum/rgb_matrix/animations/breathing_anim.h
@@ -13,7 +13,7 @@ bool BREATHING(effect_params_t* params) {
13 RGB_MATRIX_TEST_LED_FLAGS(); 13 RGB_MATRIX_TEST_LED_FLAGS();
14 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 14 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
15 } 15 }
16 return led_max < DRIVER_LED_TOTAL; 16 return rgb_matrix_check_finished_leds(led_max);
17} 17}
18 18
19# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 19# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/fractal_anim.h b/quantum/rgb_matrix/animations/fractal_anim.h
new file mode 100644
index 000000000..83a69daa6
--- /dev/null
+++ b/quantum/rgb_matrix/animations/fractal_anim.h
@@ -0,0 +1,74 @@
1/* Copyright (C) 2021 @filterpaper
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17// Inspired from 4x12 fractal created by @schwarzgrau
18
19#ifdef ENABLE_RGB_MATRIX_FRACTAL
20RGB_MATRIX_EFFECT(FRACTAL)
21# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
22
23static bool FRACTAL(effect_params_t* params) {
24# define MID_COL MATRIX_COLS / 2
25 static bool led[MATRIX_ROWS][MATRIX_COLS];
26
27 static uint32_t wait_timer = 0;
28 if (wait_timer > g_rgb_timer) {
29 return false;
30 }
31
32 inline uint32_t interval(void) { return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); }
33
34 RGB rgb = rgb_matrix_hsv_to_rgb(rgb_matrix_config.hsv);
35 for (uint8_t h = 0; h < MATRIX_ROWS; ++h) {
36 for (uint8_t l = 0; l < MID_COL - 1; ++l) { // Light and move left columns outwards
37 if (led[h][l]) {
38 rgb_matrix_set_color(g_led_config.matrix_co[h][l], rgb.r, rgb.g, rgb.b);
39 } else {
40 rgb_matrix_set_color(g_led_config.matrix_co[h][l], 0, 0, 0);
41 }
42 led[h][l] = led[h][l + 1];
43 }
44
45 for (uint8_t r = MATRIX_COLS - 1; r > MID_COL; --r) { // Light and move right columns outwards
46 if (led[h][r]) {
47 rgb_matrix_set_color(g_led_config.matrix_co[h][r], rgb.r, rgb.g, rgb.b);
48 } else {
49 rgb_matrix_set_color(g_led_config.matrix_co[h][r], 0, 0, 0);
50 }
51 led[h][r] = led[h][r - 1];
52 }
53
54 // Light both middle columns
55 if (led[h][MID_COL]) {
56 rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL], rgb.r, rgb.g, rgb.b);
57 } else {
58 rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL], 0, 0, 0);
59 }
60 if (led[h][MID_COL - 1]) {
61 rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL - 1], rgb.r, rgb.g, rgb.b);
62 } else {
63 rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL - 1], 0, 0, 0);
64 }
65
66 // Generate new random fractal columns
67 led[h][MID_COL] = led[h][MID_COL - 1] = (random8() & 3) ? false : true;
68 }
69
70 wait_timer = g_rgb_timer + interval();
71 return false;
72}
73# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
74#endif // ENABLE_RGB_MATRIX_FRACTAL
diff --git a/quantum/rgb_matrix/animations/gradient_left_right_anim.h b/quantum/rgb_matrix/animations/gradient_left_right_anim.h
index b4f2752ff..8b13d4e48 100644
--- a/quantum/rgb_matrix/animations/gradient_left_right_anim.h
+++ b/quantum/rgb_matrix/animations/gradient_left_right_anim.h
@@ -15,7 +15,7 @@ bool GRADIENT_LEFT_RIGHT(effect_params_t* params) {
15 RGB rgb = rgb_matrix_hsv_to_rgb(hsv); 15 RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
16 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 16 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
17 } 17 }
18 return led_max < DRIVER_LED_TOTAL; 18 return rgb_matrix_check_finished_leds(led_max);
19} 19}
20 20
21# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 21# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/gradient_up_down_anim.h b/quantum/rgb_matrix/animations/gradient_up_down_anim.h
index 3fd45cf99..7431ddcd9 100644
--- a/quantum/rgb_matrix/animations/gradient_up_down_anim.h
+++ b/quantum/rgb_matrix/animations/gradient_up_down_anim.h
@@ -15,7 +15,7 @@ bool GRADIENT_UP_DOWN(effect_params_t* params) {
15 RGB rgb = rgb_matrix_hsv_to_rgb(hsv); 15 RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
16 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 16 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
17 } 17 }
18 return led_max < DRIVER_LED_TOTAL; 18 return rgb_matrix_check_finished_leds(led_max);
19} 19}
20 20
21# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 21# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/hue_breathing_anim.h b/quantum/rgb_matrix/animations/hue_breathing_anim.h
index 6d974b8c3..82be1a442 100644
--- a/quantum/rgb_matrix/animations/hue_breathing_anim.h
+++ b/quantum/rgb_matrix/animations/hue_breathing_anim.h
@@ -15,7 +15,7 @@ bool HUE_BREATHING(effect_params_t* params) {
15 RGB_MATRIX_TEST_LED_FLAGS(); 15 RGB_MATRIX_TEST_LED_FLAGS();
16 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 16 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
17 } 17 }
18 return led_max < DRIVER_LED_TOTAL; 18 return rgb_matrix_check_finished_leds(led_max);
19} 19}
20 20
21# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 21# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
index 7d8eafffb..d639ba9b6 100644
--- a/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
+++ b/quantum/rgb_matrix/animations/jellybean_raindrops_anim.h
@@ -22,7 +22,7 @@ bool JELLYBEAN_RAINDROPS(effect_params_t* params) {
22 for (int i = led_min; i < led_max; i++) { 22 for (int i = led_min; i < led_max; i++) {
23 jellybean_raindrops_set_color(i, params); 23 jellybean_raindrops_set_color(i, params);
24 } 24 }
25 return led_max < DRIVER_LED_TOTAL; 25 return rgb_matrix_check_finished_leds(led_max);
26} 26}
27 27
28# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 28# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/pixel_rain_anim.h b/quantum/rgb_matrix/animations/pixel_rain_anim.h
new file mode 100644
index 000000000..0209d3303
--- /dev/null
+++ b/quantum/rgb_matrix/animations/pixel_rain_anim.h
@@ -0,0 +1,44 @@
1/* Copyright (C) 2021 @filterpaper
2 *
3 * This program is free software: you can redistribute it and/or modify
4 * it under the terms of the GNU General Public License as published by
5 * the Free Software Foundation, either version 2 of the License, or
6 * (at your option) any later version.
7 *
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
12 *
13 * You should have received a copy of the GNU General Public License
14 * along with this program. If not, see <http://www.gnu.org/licenses/>.
15 */
16
17#ifdef ENABLE_RGB_MATRIX_PIXEL_RAIN
18RGB_MATRIX_EFFECT(PIXEL_RAIN)
19# ifdef RGB_MATRIX_CUSTOM_EFFECT_IMPLS
20
21static bool PIXEL_RAIN(effect_params_t* params) {
22 static uint32_t wait_timer = 0;
23 if (wait_timer > g_rgb_timer) { return false; }
24
25 inline uint32_t interval(void) { return 500 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); }
26
27 bool rain_pixel(uint8_t i, effect_params_t* params, bool off) {
28 if (!HAS_ANY_FLAGS(g_led_config.flags[i], params->flags)) { return true; }
29 if (off) {
30 rgb_matrix_set_color(i, 0,0,0);
31 } else {
32 HSV hsv = {random8(), qadd8(random8() >> 1, 127), rgb_matrix_config.hsv.v};
33 RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
34 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
35 }
36 wait_timer = g_rgb_timer + interval();
37 return false;
38 }
39
40 return rain_pixel(mod8(random8(), DRIVER_LED_TOTAL), params, random8() & 2);
41}
42
43# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
44#endif // ENABLE_RGB_MATRIX_PIXEL_RAIN
diff --git a/quantum/rgb_matrix/animations/raindrops_anim.h b/quantum/rgb_matrix/animations/raindrops_anim.h
index c01688e2c..fa61f9e0b 100644
--- a/quantum/rgb_matrix/animations/raindrops_anim.h
+++ b/quantum/rgb_matrix/animations/raindrops_anim.h
@@ -32,7 +32,7 @@ bool RAINDROPS(effect_params_t* params) {
32 for (int i = led_min; i < led_max; i++) { 32 for (int i = led_min; i < led_max; i++) {
33 raindrops_set_color(i, params); 33 raindrops_set_color(i, params);
34 } 34 }
35 return led_max < DRIVER_LED_TOTAL; 35 return rgb_matrix_check_finished_leds(led_max);
36} 36}
37 37
38# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 38# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
diff --git a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
index 302ad79c0..8ecf4367f 100644
--- a/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
+++ b/quantum/rgb_matrix/animations/rgb_matrix_effects.inc
@@ -26,6 +26,8 @@
26#include "hue_breathing_anim.h" 26#include "hue_breathing_anim.h"
27#include "hue_pendulum_anim.h" 27#include "hue_pendulum_anim.h"
28#include "hue_wave_anim.h" 28#include "hue_wave_anim.h"
29#include "fractal_anim.h"
30#include "pixel_rain_anim.h"
29#include "typing_heatmap_anim.h" 31#include "typing_heatmap_anim.h"
30#include "digital_rain_anim.h" 32#include "digital_rain_anim.h"
31#include "solid_reactive_simple_anim.h" 33#include "solid_reactive_simple_anim.h"
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h
index 4867609c8..2ad0f22c2 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy.h
@@ -13,5 +13,5 @@ bool effect_runner_dx_dy(effect_params_t* params, dx_dy_f effect_func) {
13 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time)); 13 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, time));
14 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 14 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
15 } 15 }
16 return led_max < DRIVER_LED_TOTAL; 16 return rgb_matrix_check_finished_leds(led_max);
17} 17}
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h
index 9545b418d..bcae7c79b 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_dx_dy_dist.h
@@ -14,5 +14,5 @@ bool effect_runner_dx_dy_dist(effect_params_t* params, dx_dy_dist_f effect_func)
14 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time)); 14 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, dx, dy, dist, time));
15 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 15 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
16 } 16 }
17 return led_max < DRIVER_LED_TOTAL; 17 return rgb_matrix_check_finished_leds(led_max);
18} 18}
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_i.h
index 1881cd6c6..b4de2992b 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_i.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_i.h
@@ -11,5 +11,5 @@ bool effect_runner_i(effect_params_t* params, i_f effect_func) {
11 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time)); 11 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, i, time));
12 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 12 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
13 } 13 }
14 return led_max < DRIVER_LED_TOTAL; 14 return rgb_matrix_check_finished_leds(led_max);
15} 15}
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h
index 75b7c0df4..d5c1a26ce 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive.h
@@ -23,7 +23,7 @@ bool effect_runner_reactive(effect_params_t* params, reactive_f effect_func) {
23 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset)); 23 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, offset));
24 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 24 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
25 } 25 }
26 return led_max < DRIVER_LED_TOTAL; 26 return rgb_matrix_check_finished_leds(led_max);
27} 27}
28 28
29#endif // RGB_MATRIX_KEYREACTIVE_ENABLED 29#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h
index 2e46ffb35..d3a6e4e72 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_reactive_splash.h
@@ -23,7 +23,7 @@ bool effect_runner_reactive_splash(uint8_t start, effect_params_t* params, react
23 RGB rgb = rgb_matrix_hsv_to_rgb(hsv); 23 RGB rgb = rgb_matrix_hsv_to_rgb(hsv);
24 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 24 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
25 } 25 }
26 return led_max < DRIVER_LED_TOTAL; 26 return rgb_matrix_check_finished_leds(led_max);
27} 27}
28 28
29#endif // RGB_MATRIX_KEYREACTIVE_ENABLED 29#endif // RGB_MATRIX_KEYREACTIVE_ENABLED
diff --git a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h
index 02351de51..7776491d5 100644
--- a/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h
+++ b/quantum/rgb_matrix/animations/runners/effect_runner_sin_cos_i.h
@@ -13,5 +13,5 @@ bool effect_runner_sin_cos_i(effect_params_t* params, sin_cos_i_f effect_func) {
13 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time)); 13 RGB rgb = rgb_matrix_hsv_to_rgb(effect_func(rgb_matrix_config.hsv, cos_value, sin_value, i, time));
14 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 14 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
15 } 15 }
16 return led_max < DRIVER_LED_TOTAL; 16 return rgb_matrix_check_finished_leds(led_max);
17} 17}
diff --git a/quantum/rgb_matrix/animations/solid_color_anim.h b/quantum/rgb_matrix/animations/solid_color_anim.h
index 79d63cf13..420995946 100644
--- a/quantum/rgb_matrix/animations/solid_color_anim.h
+++ b/quantum/rgb_matrix/animations/solid_color_anim.h
@@ -9,7 +9,7 @@ bool SOLID_COLOR(effect_params_t* params) {
9 RGB_MATRIX_TEST_LED_FLAGS(); 9 RGB_MATRIX_TEST_LED_FLAGS();
10 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b); 10 rgb_matrix_set_color(i, rgb.r, rgb.g, rgb.b);
11 } 11 }
12 return led_max < DRIVER_LED_TOTAL; 12 return rgb_matrix_check_finished_leds(led_max);
13} 13}
14 14
15#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS 15#endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS