Commit Graph

2320 Commits

Author SHA1 Message Date
Ryan
41bd4e35a0
Clean up RGB LED type (#21859) 2023-09-04 01:19:59 +01:00
Joel Challis
11a8101301
Fix compilation of dynamic_keymap.c without VIA (#21858) 2023-08-29 14:28:09 +01:00
Ryan
70e34e491c
Unicode, Unicodemap and UCIS refactor (#21659) 2023-08-27 13:30:19 +10:00
Ryan
37bc949945
RGB Matrix: driver naming cleanups (#21594) 2023-08-23 01:00:03 +01:00
Joel Challis
dfb6d38f08
Simplfy RGB/LED matrix effect logic (#21703) 2023-08-23 00:03:01 +01:00
Less/Rikki
0d535381de
fix: restore indicators to jellybean_raindrops (#21792)
After #21169, rgb_matrix_indicators() was limited to running on the
final render iteration. Since the jellybean_raindrops animation
immediately returns false after updating a single LED, the iteration
count no longer ends up high enough to render non-advanced indicators.

This change also brings jellybean_raindrops more in line with raindrops.
2023-08-22 18:39:33 +01:00
Ryan
0b802defd4
haptic: further naming cleanups (#21682) 2023-08-04 01:16:16 +01:00
Nebuleon
f0c9453083
audio: Don't play the first note of zero-note melodies (#21661) 2023-08-02 17:07:43 +01:00
James Young
eab315e935
Fix Dynamic Macro Compilation for avr-gcc 5.4.0 + Linux (#21653)
Co-authored-by: Joel Challis <git@zvecr.com>
2023-08-01 22:49:58 -07:00
Ryan
6018b56c55
Remove old OLED API code (#21651) 2023-07-31 15:43:10 +01:00
Ryan
f407d90598
keycode aliases: work around ChibiOS ch.h include guard (#21497) 2023-07-31 09:35:06 +10:00
Ryan
571b8bac82
LED Matrix: driver naming cleanups (#21580) 2023-07-29 15:25:00 +10:00
Ryan
4af6f1df06
quantum.h: clean up process_keycode includes (#21579) 2023-07-29 15:05:15 +10:00
Nebuleon
96789a7cb0
Unify MIDI note calculation with the audio feature's algorithm (#21588) 2023-07-27 16:14:34 -07:00
Ryan
727b1d1597
Unicode: move keycode aliases to a separate header (#21613) 2023-07-27 16:29:22 +01:00
Nebuleon
9bc85ff5af
Reduce needless precision in audio note frequency calculation (#21496) 2023-07-26 21:05:26 -07:00
leep-frog
2c70d38910
On-each-release tap dance function (#20255)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2023-07-26 21:04:35 -07:00
Ryan
8b7ac7f2ca
Raw HID: documentation improvements (#21596) 2023-07-25 09:20:41 +10:00
Ryan
d136d49053
Revert "[Bug] Fix compilation error when Split Watchdog enabled" (#21572) 2023-07-22 06:43:14 +10:00
Drashna Jaelre
625671d1cf
[Bug] Fix compilation error when Split Watchdog enabled (#21543) 2023-07-20 18:40:05 -07:00
Ryan
b090354143
haptic: naming cleanups (#21551) 2023-07-21 09:17:39 +10:00
Ryan
da2d2f947d
quantum: remove direct quantum.h includes (#21507) 2023-07-16 23:42:56 +10:00
フィルターペーパー
83c73d42f9
process_combo: restore wait.h header (#21514)
Required for `wait_ms()` function
2023-07-12 09:38:59 +01:00
Ryan
eee0384167
process_keycode: remove direct quantum.h includes (#21486) 2023-07-11 17:07:24 +10:00
フィルターペーパー
a05e5b5554
Add MOUSEKEY_WHEEL_DELTA documentation (#21493) 2023-07-10 10:57:08 -07:00
Ryan
03ecd34684
keymap_extras: remove direct quantum.h includes (#21485) 2023-07-09 20:05:01 +10:00
Ryan
7457e90887
debounce: remove direct quantum.h includes (#21480) 2023-07-09 02:05:20 +01:00
Ryan
cb2331713c
Relocate backlight drivers (#21444) 2023-07-08 23:13:10 +10:00
Nick Brassel
f41bc8ce20
bootmagic mods covering the case when swapped mods are pressed at the same time (#21320) (#21472)
Co-authored-by: Nimish Gåtam <nimishg@gmail.com>
2023-07-08 10:15:51 +10:00
Pablo Martínez
d13925be9a
[Bugfix] Check NULL pointers on QP (#20481) 2023-07-08 00:51:19 +10:00
フィルターペーパー
9b3ac793bc
Refactor times inverse of sqrt 2 calculation (#21293) 2023-07-08 00:50:21 +10:00
Pascal Getreuer
a8a87a0922
[Core] Simplify audio_duration_to_ms() and audio_ms_to_duration(), reduce firmware size by a few bytes. (#21427) 2023-07-08 00:47:16 +10:00
Jake Grossman
e648b84da3
Allow key override to respect weak mods caused by caps word (#21434) 2023-07-08 00:40:09 +10:00
フィルターペーパー
0035ed6762
Set minimum middle column value (#21365) 2023-07-08 00:35:22 +10:00
フィルターペーパー
df5984022f
Refactor kinetic mouse key feature (#21164) 2023-07-08 00:26:06 +10:00
mechlovin
2264e6d26b
add VIA support for LED Matrix (#21281) 2023-07-08 00:24:29 +10:00
precondition
1abf8f3e8b
[Feature] Send a dummy keycode to neutralize flashing modifiers in retro tap and key overrides (#20992) 2023-07-08 00:18:02 +10:00
Pablo Martínez
55295ed3dc
[Enhancement] More info on apply_autocorrect (#21056)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-07-08 00:13:15 +10:00
Chris Salch
e9ff66d8ad
Adds a way to separate tab from AUTO_SHIFT_SPECIAL. (#20996) 2023-07-07 21:52:24 +10:00
Ryan
87b11345a5
Get rid of USB_LED_CAPS_LOCK (#21436) 2023-07-06 09:48:02 +01:00
Xelus22
c4f66e5d6e
[Core] RGB Matrix limit basic indicators to the last render (#21169)
Co-authored-by: Joel Challis <git@zvecr.com>
2023-07-02 15:56:48 -07:00
Ryan
9ab16e62f7
Get rid of USB_LED_NUM_LOCK (#21424) 2023-07-02 19:35:41 +01:00
Ryan
7ff80a57cb
Get rid of USB_LED_SCROLL_LOCK (#21405) 2023-07-02 19:24:22 +01:00
Ryan
5542f5ede1
Get rid of USB_LED_KANA and USB_LED_COMPOSE (#21366) 2023-06-27 09:15:33 +10:00
QMK Bot
7178645be7 Merge remote-tracking branch 'origin/master' into develop 2023-06-18 04:33:50 +00:00
Nick Brassel
884be6c1ba
Fix up operator precedence in RGBLIGHT (#21280) 2023-06-18 14:33:18 +10:00
Nick Brassel
6c7c5889ca
Rely on introspection to handle OOB access. (#21247) 2023-06-14 20:48:19 -07:00
Albert Y
3444e9656d
Refactor the rain lighting decision operator (#21139) 2023-06-10 23:55:03 -07:00
Xelus22
806b61c2f7
[Core] RGB matrix ws2812 update (#21135)
* ws2812_update boolean to stop update every single cycle

* lint1

Co-authored-by: Joel Challis <git@zvecr.com>

* lint2

Co-authored-by: Joel Challis <git@zvecr.com>

* Update quantum/rgb_matrix/rgb_matrix_drivers.c

---------

Co-authored-by: Joel Challis <git@zvecr.com>
2023-06-09 01:00:22 +01:00
dexter93
90ea9e447a
Reset matrix_need_update properly in eager debouncing algorithms (#21154)
The `matrix_need_update` variable needs to be reset to `false` in
`transfer_matrix_values()`, otherwise that function continues to be
invoked for every scanning loop (forever with `sym_eager_pk` and
`sym_eager_pk`, or until some key gets released with
`asym_eager_defer_pk`), and the scanning rate gets much lower because of
all that useless work.

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2023-06-08 02:01:45 +01:00
QMK Bot
542749433c Merge remote-tracking branch 'origin/master' into develop 2023-06-07 23:00:02 +00:00
Pablo Martínez
ae0342c12a
[Bugfix] LVGL bindings wrong offset math (#21147) 2023-06-08 08:59:13 +10:00
Albert Y
fd1e638c28
Use unsigned integer for mousekey kinetic speed (#21151) 2023-06-07 13:12:49 -07:00
Joel Challis
0c0cabe3f5
Remove quantum/keymap.h (#21086) 2023-06-05 06:17:38 +01:00
Pablo Martínez
edaf665414
[Enhancement] Decouple autocorrect logic (#21116) 2023-06-04 02:11:54 +01:00
Ariane Emory
c754f644dc
[Core] Move dynamic macro "stop recording" logic to a function (#21108) 2023-06-02 14:46:04 -07:00
Ryan
a4ed6ad0f5
Unicodemap keycodes rename (#21092) 2023-06-01 17:25:08 +01:00
Evgenii Vilkov
04719c774d
Fix backlight sync on suspend_power_down for split keyboards (#21079) 2023-05-31 11:46:03 -07:00
André Greiner-Petter
249fb3c2c2
[BUG] Allow multiple IS31FL3741 drivers per board in rgb_matrix (#20988) 2023-05-27 13:26:14 +10:00
Pascal Getreuer
3993b15f05
[Core] Add Repeat Key ("repeat last key") as a core feature. (#19700)
Co-authored-by: casuanoob <96005765+casuanoob@users.noreply.github.com>
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2023-05-20 22:35:06 +10:00
Sergey Vlasov
21b660fa07
Move pre_process_record_kb() before process_combo() (#20969) 2023-05-20 22:15:55 +10:00
Nick Brassel
5faa23d54c
Keymap introspection for combos. (#19670) 2023-05-15 22:27:37 +10:00
Albert Y
128f808496
Add a user callback for pre process record (#20584) 2023-05-13 08:42:06 +01:00
Drashna Jaelre
aec882528a
[Bug] Fix compilation error introduced by #20669 (#20849) 2023-05-11 00:06:12 +01:00
Pete Sevander
8a332e6f01
Fix Mod-Tap combo regression (#20669)
* Add keyevent for combo keyrecord

* Fix formatting

* Update quantum/process_keycode/process_combo.c

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>

* Add combo unit-tests and hot-fix process_record_tap_hint

...as this function tries to lookup the combo keys passed in. This will
be refactored in a later pr.

---------

Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2023-05-10 17:59:52 +02:00
Drashna Jaelre
5c4b53a143
[Bug] Realign and size check EECONFIG structures (#20541)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-05-08 10:56:03 -07:00
QMK Bot
50e99864dd Merge remote-tracking branch 'origin/master' into develop 2023-05-06 14:53:53 +00:00
Nick Brassel
88780bf710
Fixup QP font rendering when --no-ascii is specified. (#20637) 2023-05-06 15:53:14 +01:00
Drashna Jaelre
59eb8940b0
Make Pointing Device Auto Layer more configurable (#20061)
Co-authored-by: Pablo Martínez <58857054+elpekenin@users.noreply.github.com>
2023-05-06 06:38:45 -07:00
Pablo Martínez
82a34aee30
[Feature] Disable debug on QP's internal task (#20623)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-05-01 19:38:18 -07:00
Xelus22
6a619e6403
[Core] Clean up ISSI drivers, Add IS31FL3736 support (#20572)
Co-authored-by: Pablo Martínez <58857054+elpekenin@users.noreply.github.com>
2023-04-30 12:35:27 +10:00
QMK Bot
9c9670b25f Merge remote-tracking branch 'origin/master' into develop 2023-04-30 01:57:38 +00:00
Jasmin
4887f03dbd
typing_heatmap: Add macro to configure increase steps (#20300)
Co-authored-by: Joel Challis <git@zvecr.com>
2023-04-30 11:57:30 +10:00
Christopher Berner
7138fa4582
Fix MATRIX_HAS_GHOST when MATRIX_COL > 16 (#20093) 2023-04-30 11:56:58 +10:00
precondition
c3ae5c1076
Fix capital letters not getting sent with sendstring_swiss_fr.h (Issue #20080) (#20515) 2023-04-20 16:07:04 +01:00
Nick Brassel
c9f619124d
Encodermap direction define. (#20454) 2023-04-15 16:18:44 +01:00
Manuel Ullmann
1502193181
quantum/action_util.c: Use uint8_t for oneshot_layer_data (#20423) 2023-04-12 07:24:07 -07:00
Giuseppe Rota
e77699a58a
Fix preprocessor condition for SPLIT_HAPTIC_ENABLE (#20411) 2023-04-12 07:22:07 -07:00
Ricardo Hermida Ruiz
d3b8179f46
Prevent Tri-Layer keys from stopping caps words (#20398) 2023-04-10 13:45:25 +01:00
Albert Y
f5b7491883
Add swap hands toggle functions (#20381) 2023-04-09 09:37:31 -07:00
Stefan Kerkmann
73b376a881
[Chore] Remove stray mod tap interrupt defines and per key functions (#20347)
* Remove stray defines and per key functions

* Remove defunct get_ignore_mod_tap_interrupt declaration
2023-04-06 00:04:23 +01:00
Drashna Jaelre
7115927559
[Bug] Fix compilation issue with Swap Hands and Encoder Map (#20348) 2023-04-05 23:36:08 +01:00
Nick Brassel
b1b8cd1bf0
Add basic profiler. (#20238) 2023-04-06 08:10:40 +10:00
Pascal Getreuer
ae63c0f509
[Core] Caps Word "Invert on shift" option: pressing Shift inverts the shift state. (#20092)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-04-04 09:11:26 +10:00
ngs-ch
ccda5d2d2f
Make "detected_host_os()" available on the SLAVE side of the split keyboard (#19854)
Co-authored-by: ngs.ch <ngs.ch>
Co-authored-by: Drashna Jaelre <drashna@drashna.net>
2023-04-04 08:48:51 +10:00
CobraSock
d82c6648f5
Fixed split keyboard issue where custom LED indicators could activate incorrect LEDs (#20203) (#20204)
Co-authored-by: N M <ninja.milkman@gmail.com>
Fixed split keyboard issue where custom LED indicators could activate incorrect LEDs (#20203)
2023-04-04 08:46:00 +10:00
jack
36ab0c0aaa
Add core/fallback encoder behaviour (#20320) 2023-04-03 10:18:17 -06:00
Stefan Kerkmann
fcf8b804ed
[Core] Refactor keyevent_t for 1ms timing resolution (#15847) 2023-04-03 18:33:45 +10:00
Kasimir Pihlasviita
46844347c4
Fix OSMs getting stuck (#20034) 2023-04-03 15:38:44 +10:00
precondition
1899793f27
Make IGNORE_MOD_TAP_INTERRUPT the default behaviour for mod-taps (#20211) 2023-04-03 15:32:47 +10:00
Johannes H. Jensen
68efea70b2
Add direction to dynamic_macro_record_start_user (#19689) 2023-04-03 13:01:07 +10:00
Vladislav Marchenko
9a68472da8
Added PMW3320 driver (#19543) 2023-04-03 12:57:19 +10:00
QMK Bot
fe58538b8f Merge remote-tracking branch 'origin/master' into develop 2023-04-03 02:43:23 +00:00
Pablo Martínez
15a106b1ef
[Bugfix] Check QGF's bpp against display's native_bits_per_pixel (#19995) 2023-04-03 12:42:46 +10:00
Joel Challis
5b0bd553b3
Delete config_common.h (#20312) 2023-04-01 23:34:13 +01:00
Drashna Jaelre
297779385f
Add last activity functions for pointing device (#20079) 2023-03-30 18:27:39 -07:00
Ryan
647c2835e6
WS2812 driver improvements (#20262) 2023-03-30 12:21:02 +11:00
Joel Challis
c485d1cf26
Remove use of keymap.h (#20004) 2023-03-27 20:08:17 +01:00
Eli Lipsitz
7e54defa20
Fix rgblight layers when animations aren't enabled (#20097) 2023-03-26 00:12:30 +00:00
Pablo Martínez
cd542a0f67
[Cleanup] Quantum Painter (#19825)
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-03-25 18:56:04 +01:00
Joel Challis
b01dc36fbf
Tidy up duplication of MIN/MAX fallback implementations (#20236) 2023-03-23 05:30:30 +00:00
Joel Challis
6540b31d71
Add some helpers to tidy up XAP (#20235) 2023-03-23 00:37:13 +00:00
Ryan
9c3c159286
Update Doxygen comments for some headers (#20194) 2023-03-22 14:32:49 +11:00
Nick Brassel
a518e1e5d8
Sync activity timestamps between sides. (#20192)
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
2023-03-21 10:16:11 +01:00
Nick Brassel
cd94ba031c
Quantum Painter QoL enhancements -- auto-poweroff, auto-flush, buffer sizing (#20013) 2023-03-20 14:13:53 +11:00
Joel Challis
a974c51d25
Relocate various modifier defines (#18638) 2023-03-10 18:27:29 -08:00
QMK Bot
43648760c4 Merge remote-tracking branch 'origin/master' into develop 2023-03-08 06:38:46 +00:00
Joel Challis
952b88528f
Fix processing of recently added system keycodes (#20058) 2023-03-08 06:38:11 +00:00
Joel Challis
3be5d90b6d
Remove some use of keymap.h (#20006) 2023-03-03 17:50:40 +00:00
Joel Challis
c3c40dfda8
Remove some use of keymap.h (#19980) 2023-03-03 11:26:53 +00:00
Joel Challis
9f2cd9119f
Reallocate user/kb keycode ranges (#19907) 2023-02-23 09:50:09 +11:00
Joel Challis
961f0b7b2d
Reallocate SAFE_RANGE (#19909) 2023-02-23 09:49:07 +11:00
Nick Brassel
7f805cc779
VIA Protocol 12 + fixes (#19916)
Co-authored-by: Wilba <wilba@wilba.tech>
Co-authored-by: zvecr <git@zvecr.com>
2023-02-23 09:19:00 +11:00
Joel Challis
403b0addea
Align magic keycodes (#19877) 2023-02-23 08:14:29 +11:00
precondition
93f2ed3abf
[Bug] Fix compilation error when defining QUICK_TAP_TERM_PER_KEY (#19893) 2023-02-22 11:03:36 -08:00
Joel Challis
0152dd811d
Move KC_MISSION_CONTROL/KC_LAUNCHPAD keycodes to core (#19884) 2023-02-19 18:59:50 +11:00
Drashna Jaelre
48a79b08cc
Fix functions when NO_ACTION_TAPPING is defined (#11528) 2023-02-19 12:08:03 +11:00
Joel Challis
f587a0c548
Align sequencer keycodes (#19875) 2023-02-18 15:44:36 +00:00
Drashna Jaelre
a63808c23f
[Bug] Fix compiliation issue for Key Overrides (#19856) 2023-02-15 21:06:10 +00:00
Pascal Getreuer
7d692d64f3
Fix Layer Mod handling of with right-handed mods. (#19845) 2023-02-14 12:44:42 -08:00
Albert Y
9908ed7ecd
Add swap hands status function (#19831)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-02-14 12:44:18 -08:00
Dasky
74770ac79b Merge branch 'master' into develop 2023-02-14 03:05:44 +00:00
Albert Y
cd91a3ced7
Update fractal attribution comment (#19832) 2023-02-13 10:58:27 -07:00
Nick Brassel
b8ac4dddb6
Fixup develop compiles. (#19828) 2023-02-13 08:57:23 +11:00
Drashna Jaelre
b47f179a4a
Make Magic handling more consistent in Action Keycode handling (#9126)
Co-authored-by: Ryan <fauxpark@gmail.com>
2023-02-13 04:48:14 +11:00
Joel Challis
6ceff1367d
Tidy up use of keycode range helpers (#19813) 2023-02-12 17:09:34 +00:00
dexter93
3ae87b1555
core: allow locking the matrix state (#18852)
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
Co-authored-by: Stefan Kerkmann <karlk90@pm.me>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-02-13 03:38:36 +11:00
Eric.a Gebhart
db1eeea478
Add combo hook to allow per layer combo reference layers. (#16699)
Co-authored-by: Drashna Jaelre <drashna@live.com>
Co-authored-by: Sergey Vlasov <sigprof@gmail.com>
2023-02-13 03:31:04 +11:00
Ryan
bbf7a20b33
Refactor Leader key feature (#19632)
Co-authored-by: Drashna Jaelre <drashna@live.com>
2023-02-13 03:19:02 +11:00
Joel Challis
d10350cd2c
Restore packing of midi note keycodes (#19468) 2023-02-13 02:55:51 +11:00
Sergey Vlasov
584b7cf801
Fix build failures with OPT = 0 due to inline functions (#19767)
Co-authored-by: Joel Challis <git@zvecr.com>
2023-02-12 17:14:34 +11:00
Drashna Jaelre
b1f4d49c43
[Bug] Fix tri layer compiler issue if NO_ACTION_LAYER is defined (#19821) 2023-02-12 17:07:01 +11:00
jack
9c6942ea40
Remove config.h include from quantum files (#19817) 2023-02-12 02:40:16 +00:00
Drashna Jaelre
fe02abc479
[Core] Tri Layer Keys (#19795)
Co-authored-by: wilba <wilba@wilba.tech>
Co-authored-by: Pablo Martínez <58857054+elpekenin@users.noreply.github.com>
Co-authored-by: Joel Challis <git@zvecr.com>
Co-authored-by: Nick Brassel <nick@tzarc.org>
2023-02-12 10:23:07 +11:00
Joel Challis
11d49d00e7
Remove matrix_init_quantum/matrix_scan_quantum (#19806) 2023-02-11 03:47:17 +00:00
Joel Challis
1d0b4c8d38
Tidy up use of keycode range helpers (#19756) 2023-02-10 21:10:14 +00:00
Joel Challis
2ffdec5dc2
Move more unicode ranges to DD (#19755) 2023-02-10 21:08:54 +00:00
jpe230
49c912f9b4
QP: Correct rotation and offset when using LVGL (#19713)
Co-authored-by: Nick Brassel <nick@tzarc.org>
Co-authored-by: Joel Challis <git@zvecr.com>
2023-02-02 14:31:54 +11:00
Joel Challis
d84a7351ea
Strip out more of config_common (#19722) 2023-01-30 20:40:12 +00:00
Nick Brassel
f6dd8dea2e
Remove usages of config_common.h from config.h files. (#19714) 2023-01-31 06:03:30 +11:00
Ryan
2d843088a2
Normalise Swap Hands keycodes (#19720) 2023-01-30 18:37:19 +00:00
Ryan
242b80c63f
Move MIDI code out of tmk_core (#19704) 2023-01-30 18:47:50 +11:00
Joel Challis
968cc1fe7b
Relocate diode direction definitions (#19715) 2023-01-30 15:10:40 +11:00
Ryan
043d8e1140
Remove deprecated Quantum keycodes (#19712) 2023-01-29 16:44:16 +00:00
Joel Challis
8cc2e0e906
Fix quantum ring_buffer for ChibiOS (#19683) 2023-01-28 21:07:51 +00:00
Nick Brassel
ea05045923
Allow overriding of keymap/encodermap layer count. (#19325) 2023-01-24 07:10:03 +11:00
Ryan
cf935d97ae
Fix functions with empty params (#19647)
* Fix functions with empty params

* Found a bunch more
2023-01-20 16:21:17 +00:00
Jouke Witteveen
db7ca07909
Process Tap Dances before WPM/Velocikey (#19599) 2023-01-16 21:23:57 -08:00
Albert Y
0ff52925c0
Refactor pixel rain animation (#19606) 2023-01-16 17:54:51 -08:00
David Hoelscher
45851a10f6
Add RGB565 and RGB888 color support to Quantum Painter (#19382) 2023-01-14 21:24:54 +11:00