ControlProtocols are single instance.
Activating an already active protocol leads to crashes due to
various rasons (e.g. port already registered), re-used singleton
event_loop_name and request-buffers, duplicate free of
AbstractUI request buffers during deactivate,..
When I/O port-counts do not change, plugin re-order happens
in sync in the process-thread. ::configure_io() is only called
to ensure that the current configuration is valid.
In case that the ChanCount does not change, the method must
be realtime-safe and not block.
DiskWriter::reset_write_sources() is not realtime-safe and
implicitly causes a session-save:
Write-sources are destroyed and re-created. This includes
a call to write_source->drop_references(), which triggers
ARDOUR::Session::remove_source(), which saves the session.
Furthermore adding/removing plugins will likewise call
::configure_io().
Previously any processor change on a track lead to
saving the session!
* unify line-width calculation
* thin line-width, approximate thickness of
glyph stroke width at same UI scale
* don't use outlines (except main tool buttons)
This fixes issues of generic buttons with bright-theme
* pixel align some lines
* Don't store tags from plugin's own metadata
Those are set during plugin-scan every time
* Save user-tags even if they're not new
* Reset tags to factory-file tag (if any)
Old user tag files (prior to this commit) are interpreted
as "factory-file". This will auto-correct after the
first save_tags().
Inform plugins about host theme (fg, bg colors) and UI scale-factor.
The latter follows an implementation already present in Carla and DPF.
These extension use proposed official URLs.