aboutsummaryrefslogtreecommitdiff
path: root/quantum/rgb_matrix/animations/fractal_anim.h
diff options
context:
space:
mode:
authorAlbert Y <76888457+filterpaper@users.noreply.github.com>2021-11-02 01:30:07 +0800
committerGitHub <noreply@github.com>2021-11-02 04:30:07 +1100
commit4bf7ce2298dff3f9e256115ff551a86cf239b421 (patch)
tree9825222b20245c8e6d4ac47d19fa97a9af4ae75f /quantum/rgb_matrix/animations/fractal_anim.h
parent2980c63d3d4480a10bb1f7e6cf417bc9c9b65b72 (diff)
downloadqmk_firmware-4bf7ce2298dff3f9e256115ff551a86cf239b421.tar.gz
qmk_firmware-4bf7ce2298dff3f9e256115ff551a86cf239b421.zip
Add Fractal RGB matrix effects (#12670)
* Squashed fractal effect commit for easier rebase * Update documentation * Squashed fractal effect commit for easier rebase * Update documentation * Update doc spacing Co-authored-by: Ryan <fauxpark@gmail.com> * Update feature_rgb_matrix.md Co-authored-by: filterpaper <filterpaper@localhost> Co-authored-by: Ryan <fauxpark@gmail.com> Co-authored-by: Nick Brassel <nick@tzarc.org>
Diffstat (limited to 'quantum/rgb_matrix/animations/fractal_anim.h')
-rw-r--r--quantum/rgb_matrix/animations/fractal_anim.h61
1 files changed, 61 insertions, 0 deletions
diff --git a/quantum/rgb_matrix/animations/fractal_anim.h b/quantum/rgb_matrix/animations/fractal_anim.h
new file mode 100644
index 000000000..99693165d
--- /dev/null
+++ b/quantum/rgb_matrix/animations/fractal_anim.h
@@ -0,0 +1,61 @@
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) { return false; }
29
30 inline uint32_t interval(void) { return 3000 / scale16by8(qadd8(rgb_matrix_config.speed, 16), 16); }
31
32 RGB rgb = rgb_matrix_hsv_to_rgb(rgb_matrix_config.hsv);
33 for (uint8_t h = 0; h < MATRIX_ROWS; ++h) {
34
35 for (uint8_t l = 0; l < MID_COL-1; ++l) { // Light and move left columns outwards
36 if (led[h][l]) { rgb_matrix_set_color(g_led_config.matrix_co[h][l], rgb.r, rgb.g, rgb.b); }
37 else { rgb_matrix_set_color(g_led_config.matrix_co[h][l], 0, 0, 0); }
38 led[h][l] = led[h][l+1];
39 }
40
41 for (uint8_t r = MATRIX_COLS-1; r > MID_COL; --r) { // Light and move right columns outwards
42 if (led[h][r]) { rgb_matrix_set_color(g_led_config.matrix_co[h][r], rgb.r, rgb.g, rgb.b); }
43 else { rgb_matrix_set_color(g_led_config.matrix_co[h][r], 0, 0, 0); }
44 led[h][r] = led[h][r-1];
45 }
46
47 // Light both middle columns
48 if (led[h][MID_COL]) { rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL], rgb.r, rgb.g, rgb.b); }
49 else { rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL], 0, 0, 0); }
50 if (led[h][MID_COL-1]) { rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL-1], rgb.r, rgb.g, rgb.b); }
51 else { rgb_matrix_set_color(g_led_config.matrix_co[h][MID_COL-1], 0, 0, 0); }
52
53 // Generate new random fractal columns
54 led[h][MID_COL] = led[h][MID_COL-1] = (random8() & 3) ? false : true;
55 }
56
57 wait_timer = g_rgb_timer + interval();
58 return false;
59}
60# endif // RGB_MATRIX_CUSTOM_EFFECT_IMPLS
61#endif // ENABLE_RGB_MATRIX_FRACTAL