On mouse move the pressed button is not present in the event argument
which causes the corresponding code to never fire. Instead it now stores
the original mouse down event and acts according to that on mouse move.
Almost all synthesizer code in Piano is removed in favor of the LibDSP
reimplementation.
This causes some issues that mainly have to do with the way Piano
currently handles talking to LibDSP. Additionally, the sampler is gone
for now and will be reintroduced with future work.
The Piano application used to perform very poorly due to unnecessary
draw calls. This is solved with two optimziations:
1. Don't draw the widgets as often as possible. The widgets are instead
at least updated every 150ms, except for other events.
2. Don't re-draw the entire piano roll sheet. The piano roll background,
excluding in-motion objects (notes, the play cursor), is only re-drawn
when its "viewport" changes.
A minor drawback of this change is that notes will appear on top of the
pitch labels if placed at the left edge of the roll. This is IMO
acceptable or may be changed by moving the text to the "foreground".
SPDX License Identifiers are a more compact / standardized
way of representing file license information.
See: https://spdx.dev/resources/use/#identifiers
This was done with the `ambr` search and replace tool.
ambr --no-parent-ignore --key-from-file --rep-from-file key.txt rep.txt *