Commit Graph

35701 Commits

Author SHA1 Message Date
af38528174
Physical modifier abstraction is constant 2022-06-21 22:09:54 +02:00
9ae9282547
Use abstract group_override_modifier instead of hardcoded modifiers 2022-06-21 21:38:41 +02:00
8a5fc65df4
Expose newly added semantic modifiers 2022-06-21 21:38:37 +02:00
3266b1acb0
Add API to query currently held modifiers keys 2022-06-21 21:37:14 +02:00
f1eb45e129
NO-OP: clang format 2022-06-21 21:37:08 +02:00
696e05c3e5 convert internal implementation of Temporal::Beats to just use a 64 bit tick value
This expands significantly the maximum number of Beats that can be represented, which is a good
thing in itself. It slightly speeds up some Beats::operator methods, and slightly slows down
::get_beats() and ::get_ticks().

One minor change in an API user was required, and several tweaks to the unit tests due to the
macros being used by cppunit creating possible type confusion.

Units test pass
2022-06-21 12:26:54 -06:00
4661957091
Re-establish 47932fb7bf (which was lost in e557245bf7) 2022-06-21 20:17:01 +02:00
0cc9f87baf continued work on modifier semantics (gtk part)
more implementations of group_override_event() and momentary_push_event()
2022-06-21 13:01:30 -05:00
e557245bf7 implement group_override_modifier() (lib part)
Consistently use Tertiary for Group Override on all platforms (and be consistent about it)

Consistently use Primary-mod for Momentary on all platforms (partially reverts 47932f)
Primary modifier is used for fine-adjust on knobs and sliders, with no analogous operation on switches.
2022-06-21 13:01:30 -05:00
4dbdaf7fe9 fix possible negative return from TempoPoint::quarters_at_superclock() 2022-06-21 11:39:10 -06:00
47932fb7bf
Only special case middle-click modifier for macOS by default 2022-06-20 23:30:45 +02:00
bbb0b78a50 fetch thread local tempo map in potential peak-building threads 2022-06-20 14:25:40 -06:00
4825d67c4a
Fix record w/count-in
The pre-nutemo code used fmod() to calculate the offset into the bar:
`bar_fract = fmod (barbeat, 1.0); // fraction of bar elapsed`
with nutempo, beats start at 1, and the tick offset must also be
taken into account.

The bug was introduced in f67029bd0
2022-06-20 21:15:00 +02:00
65b7b3f2eb fix unset per-thread tempo map in AutomationWatch thread 2022-06-20 08:43:00 -06:00
f5866c1dee
Fix video-file audio extraction on big-endian systems 2022-06-20 16:16:25 +02:00
0f2c3bf9c9
Fix mp3 export on big-endian systems 2022-06-20 16:05:28 +02:00
df518cba3c
Don't show blank MIDI Port Config page when no MIDI devices are present 2022-06-20 16:04:59 +02:00
35612d26c6
Unify ::get_buffer, remove debug code 2022-06-18 22:54:09 +02:00
32161cf154
Fix valid_port race/crash when ranaming ports
PortIndex is sorted by name, and uses port-name as unique identifier.

Ports can be re-named concurrently with processing.
::set_port_name() updates the RCU in the background. The engine
may concurrently process with an old RCU reader value.

In this case valid_port() failed in the process-callback.
and ::get_buffer() returned NULL
2022-06-18 22:54:08 +02:00
4acd63b2ef fix uninitialized variable (detected with valgrind) 2022-06-18 12:37:39 -06:00
64c8607ffd midi streamview: fix crash when switching playlists
We need to delete all existing region views before we redisplay the track. This
was removed as part of an "experimental performance optimization" in 4f7a4cd233
but playlist switching is a rare and non-performance limited operation
2022-06-18 08:28:31 -06:00
ca744cd94a tooltips: append 'Lock' to Solo Safe menu-item, to match mixer-strip button 2022-06-17 11:08:04 -05:00
1965e90c24 tooltips: enumerate the various modifiers for mute, solo, scenes
TODO: monitor buttons, maybe more
2022-06-17 11:07:58 -05:00
fd9a76073b modifiers: add momentary_push_name (for tooltips) 2022-06-17 11:07:58 -05:00
9a6533c382 modifiers: unconditionally show the solo context menu
* accessing solo-isolate from the context menu is the preferred way
* some route_uis (like track headers) do not have solo isolate buttons
2022-06-17 11:07:58 -05:00
88888237ac modifiers: remove shortcut for solo isolate
* you should not be able to invisibly change a solo 'mode' from a modified click

* we want to use shift+click for momentary operation, anyway
2022-06-17 11:07:58 -05:00
a92af7768d modifiers: implement is_momentary_push_event for momentary buttons (gtk2 part) 2022-06-17 11:07:58 -05:00
12e703414d modifiers: make a new abstraction for momentary-click, instead of button_2 (lib part)
is_button2_event()  was used to detect the user's desire for a
  momentary-click on some buttons (mute, solo, mixer scenes)

is_momentary_push_event() disambiguates this action from is_button2_event()

for the special case of momentary, we can drop the workarounds for
  the lack of middle-mouse buttons on Mac, and instead just use
  shift+left-click on all platforms.
2022-06-17 11:07:49 -05:00
71833911a4 modifiers: publish button2_name (for use in tooltips) 2022-06-17 10:52:06 -05:00
86ddb11b9b
Fix displaying note events across tempo-changes
Note position in samples must be calculated using absolute position
on the timeline. Otherwise the tempo-map is not applied correctly.

Previously this caused issues since the position was first
offset back by _region->position() - time relative to region left
edge - and then the tempo-map was applied.

Another solution identically would be:
(note_start + session_source_start).samples() - _region->position().samples()
2022-06-17 17:07:47 +02:00
7724af1850 remove debug output 2022-06-16 22:34:59 -06:00
2f6047e000 tempo display: remove dangling unconditional call to reassociate markers 2022-06-16 22:14:43 -06:00
f60b35483d temporal: fix major conceptual error managing Point reference to owner map
When TempoMap::copy_points() is called, the new points are intended to belong
to the (nascent) new map. But the copy constructor for the points leaves the
_map member of a Point unchanged, and so the new points reference the old
map (forever!). ::copy_points() must reset each Point to reference the new map.

Refactored the object that has the _map member, so that we could limit access
to its ::set_map() method to TempoMap.
2022-06-16 22:11:56 -06:00
cdf98a1bd7 tempo display: when the tempo map changes, avoid unnecessary work
If the initial tempo marker is referencing a point in the new map, assume that
all markers have already been associated with the map.
2022-06-16 22:09:53 -06:00
3482d6db4e tempo display: when reassociating markers, use sclock equivalence
Since we're reconnecting visible marker objects with a new map, there's a good
chance that the map will contain map points that don't correspond to the map
points currently referenced by those markers. Thus, tests for address
equivalence will often fail.

Instead, repeat what has been done elsewhere and use the heuristic that we only
allow one point of a given type at the same superclock position.
2022-06-16 22:07:21 -06:00
8f7a267900 tempo display: when tempo map changes, metric markers must be reassociated with the new map 2022-06-16 12:58:03 -06:00
d66bda9f07 mackie send subview: potential fix for send-enable banking (vpot push) 2022-06-16 13:27:30 -05:00
a992adf0c3 lua reset_mixer script: ignore hidden io processors like "main out"
* fixes a problem in Mixbus where the reset script will kill audio output
2022-06-16 13:22:20 -05:00
215acaca2e NO-OP: reset_mixer.lua remove CR at line endings 2022-06-16 13:19:59 -05:00
7e039d4f3f
Cleanup: retain sources used by triggers in this session
Note that ::find_all_sources_across_snapshots() finds and retains
all sources in the SourceList of other snapshots regardless
if they are used in those snapshots.
2022-06-16 20:03:58 +02:00
9964f20c63 when creating a session without a template, reset tempo map to default 2022-06-16 10:36:18 -06:00
32096afc90 temporal: remve debug output 2022-06-16 10:36:02 -06:00
2cfc013b0c temporal: fix loading tempo map from XML
We need to clear out all 4 intrusive lists before we start, not just the 3 typed ones
2022-06-16 10:18:37 -06:00
477b136e97 temporal: if requested via -Dtemporalmap, dump tempo map after any update 2022-06-16 10:18:37 -06:00
41bce61552
Cleanup bindings key replacement arrays 2022-06-15 15:32:39 +02:00
047296060f
Fix printing keybindings #8924 (brace/bracket mismatch) 2022-06-15 15:28:57 +02:00
d037dff213
NO-OP: comments and cleanup 2022-06-15 14:16:16 +02:00
471330a292
Fix uninitialized variable (leading to crashes when adding routes)
A route may be processed before latency-compensation callback
sets the route's output_latency. In this case a random offset
was added to the start/end position (via latency_offset).
2022-06-15 14:15:24 +02:00
2f02b809e7
Fix save/restore of Insert-At position
UIConfig insert-at-position saves/restores the enum as integer.
This is used directly as parameter for insert_at_combo.set_active().
For this to work, the enum needs to match the order of elements
in the dropdown.

It would be preferable to register the enum, and map the
dropdown entries, but for now this does the trick, without
breaking existing UIConfigs.
2022-06-15 02:41:50 +02:00
5d10fd84eb
Reduce mixer redraws, and fix scrolling to newly added tracks
PresentationInfo::Change (Properties::selected) is emitted and
handled before Mixer_UI::add_routes() is called. At that point
in time the MixerStrip(s) to be selected may not exist.
Visual selection state was lost.

Furthermore move_stripable_into_view() calling translate_coordinates()
only works after GTK has completed the resize operation.
This lead to the mixer scrolling back to the left edge when creating
new tracks.

Also each selection change caused all tracks to be re-packed.
Now redisplay_track_list() is only called if visibility or order
changes. This signficanly improves performance with large sessions.
2022-06-15 02:41:45 +02:00