If pending_visual_change.pending was zero when calling idle_visual_changer
the handler_id was never reset. and the idle-handler was never called
again.
This is necessary to allow calculation of correct intersection of visible
canvas area and items for the new Item::prepare_for_render() API.
samples_per_pixel must be set first to calculate the new horizontal canvas
position in Editor::set_horizontal_position and then
WaveView::set_samples_per_pixel will eventually call
WaveView::prepare_for_render for those items that are visible on the new canvas
position at the new position.
Or if there is not a change to zoom state then call Canvas::prepare_for_render
explicitly.
Also changes so that each method is only called once during
Editor::visual_changer
First visual change will be processed as normal and then blocked until the
canvas renders the change. If further visual changes need processing then
Editor::pre_render callback will schedule another expose/redraw/render.
This prevents an issue where idle_visual_changer is called many times in
response to events(keys/motion/etc) but the canvas does not get a chance to
render any but the last one which results in a big pause/jump.
This results in a more responsive canvas and in particular a smoother and more
predictable zooming experience.
This multiplier really should be based on the "responsiveness" of the
canvas..or something. I think this is an improvement for more complex sessions
with many regions.
all float <=> string conversions are done via PBD::to_string/string_to. Either
via XMLNode::get/set_property or directly in HSV and SVAModifier classes
Saving the new ControlList interpolation methods (enum) breaks loading
the session in older version. The session-format version will
need to be increased.
Until then:
* Fader automation + region gain envelope uses linear fades
* The automation-line visible in the GUI does not match the actual fade
(the y-axis is log/exp-scale, the fade is linear)
* Adding new points on the line is not using the correct initial value
* Custom changes of interpolation mode are not available
Neither of these issues is a regression.
Trim automation is planned via SlavableAC as normal AutomationMode.
Some of this code have a revival (a special "Trim+Preview" state
before merging Automation but that has to be more general than Pan & Gain.
The first click to select a new stripable may actually un-select strip.
counting and ignoring this leads to strange behavior.
Also when the selection_counter hit zero, VCAs were not ignored.
whatever this workaround was good for, it's more trouble than it's worth.
As side-effect this also improves DnD + Gtk::Entry behavior with stock GTK.
Remove old code to remove duplicate engine state which was used to
work-around a bug since 3.x saved duplicates but broke with 4.x separate
i/o devices.
Add a new variant to purge old unused states per backend (after sorting).
* add an abstract StripableTimeAxisView (Route TAV + VCA TAV)
* move common strip-methods into STAV
* Add Automation Lanes to VCA TAV
* Allow ATAV without Automatable for VCA Controls
"Add and Close" is an odd one out and this button should really be
removed for consistency. Still it allows for a 2-click or
2-keyboard-shortcut very common action.
Double clicking on a file or pressing the Return key will now import it.
This means with autoplay enabled you can navigate a directory of audio files
using the up and down arrow keys and import the wanted files (with Return)
without having to touch the mouse.
Being able to use double click to import a file means you don't have to move
the mouse back and forth between the file browser and the import button.
You can still manually audition the file with space as before.