a) Fixed root cause, which is conversion of a
negative integer to a large unsigned, leading to
a very tall track.
b) Improved mitigation (in projects that already
have over tall tracks) by setting a smaller minimum
for the allowed size.
The root cause of the bad track height hasn't been tracked down
yet. It may be related to collapsing tracks as it was first seen with
all tracks collapsed.
... A call graph browser easily shows that the extra generality of fetching
samples in some other format is only used in Benchmark -- where the format is
always the same as what the track is constructed with.
This makes re-verification of the claims in comments two commits ago easier.
... ViewInfo should only be concerned with screen geometry.
(And so it won't depend on AudioIO (even higher level) after stream time moves
there.)
PlaybackScroller receives the timer event directly (not from ViewInfo) and
caches playback position instead. Then, as before, it propagates the event
to PlayIndicatorOverlay.
... in many places where the function call will later need to be between
modules (or libraries, or the executable) and the annotation will be a necessity
to keep the linkage working on Windows.
That's all that this sweeping commit does.
... Which will be needed for various reasons for Windows builds of certain
modularizations, which will otherwise complain that they can no longer
generate them as inlines.
In one case, deleted copies require explicitly defaulted moves, but they will
work as generated inline.
... This makes it impossible to forget to include the EXPERIMENTAL definitions
(such as when cutting and pasting code) and so get unintended quiet changes of
behavior.
The EXPERIMENTAL flags are now specified instead in new file Experimental.cmake
My fix for 2565 broke autoscroll.
Scrubbing can be 'paused' when it is not active!
This meant that paused scrubbing could stop autoscroll
of normal play. The fix is to only suppress the autoscroll
if scrubbing is active and paused.
... The setting of scale type now happens in the default constructor of
WaveformSettings, which calls LoadPrefs.
Since creation of WaveformSettings is always forced, we don't need the
distinction between WaveTrack::GetWaveformSettings and
WaveTrack::GetIndependentWaveformSettings.
That distinction was more analogy with the handling of SpectrogramSettings that
we don't need now.
... This is a vestige of the time when "Waveform" and "Waveform dB" were
considered separate wave track view types. But now that scale choice is
independent of Waveform vs. Spectrogram choice, there is no possible change of
scale type happening here, requiring invalidation of the vertical ruler.
Problem:
In DoClipMove() in ClipMenus.cpp, there are a couple of problems in the code for the adjustment of the new value t0 due to potential rounding errors:
1. The code uses the start and end of intervals, and these values are not updated after the move.
2. It's assumed that the same correction is valid for all track types.
Fix:
Implement an adjustment which depends on track type, and does not use the start and end values of intervals.
... These do not require header files; they are tiny proto-plugins that work
by registration of AttachedVirtualFunction overrides at startup.
Dependency may go from them to TrackView subclasses but not back; so in
principle a reduced Audacity without time-shift could be linked that still uses
the TrackView subclasses.
But other work to make the hit test for the Time Shift tool registrable would
have to precede that.
... Implemented non-invasively just with overrides in LabelTrackShifter
Exceeding the bug description: it's also possible to drag just the subset of
labels that fall partly or wholly in the selected region.
I expect details of the new behavior may be debated.
... Because LabelTrack, unlike the others, will also need a mouse y coordinate.
The extra information is present when using the time-shift tool but not when
using the items in ClipMenus.