Robin Gareus
3bb4f482b6
Add preference to disable implicit grouping
2025-08-27 16:47:15 +02:00
Franke Burgarino
78bf5022d8
MCU: show surround master in global/mixer view
...
only if the controller doesn't have a master fader
2025-08-27 16:47:14 +02:00
Franke Burgarino
18b027d1d0
MCU: clean up MackieControlProtocol::get_sorted_stripables logic
2025-08-27 16:47:14 +02:00
Franke Burgarino
a5a8246257
MCU: add MackieControlProtocol::is_bus
2025-08-27 16:47:14 +02:00
Franke Burgarino
43a851c2b1
MCU: bring back foldbacks with correct sorting
2025-08-27 16:47:14 +02:00
Paul Davis
ec8c4e7882
several more bbt_delta() unit tests
2025-08-27 16:47:14 +02:00
Paul Davis
3f45c0bdec
temporal: remove iterative bbt_delta() since unit test shows breakage
2025-08-27 16:47:14 +02:00
Paul Davis
d6e331fe6c
temporal: new non-iterative implementation of Meter::bbt_delta()
2025-08-27 16:47:14 +02:00
Paul Davis
b4ca9f2f38
add unit test for Meter::bbt_delta()
2025-08-27 16:47:14 +02:00
Paul Davis
a33edcb3af
Evoral: add ControlList::has_event_at (timepos_t)
2025-08-27 16:47:14 +02:00
Paul Davis
2eb1a31e16
canvas: fix enter notify event handler to work with gtk ungrabs
...
GTK delivers both window and root coordinates as (0,0) for GDK_CROSSING_GTK_UNGRAB
modes. We need the real coordinates of the pointer to pick the right canvas item
2025-08-27 16:47:14 +02:00
Paul Davis
b292e5191c
tag regions captured inside Ardour with tempo and meter from timeline
2025-08-27 16:47:14 +02:00
Franke Burgarino
ede1055cdb
MCU: fix pan values for mixbus
2025-08-27 16:47:14 +02:00
Robin Gareus
8b41d71036
Consolidate PI type flags across projects
...
This is to prevent future conflicts of flags..
2025-08-27 16:47:14 +02:00
Robin Gareus
c4020b22c4
Amend 28c8dbf128, unsubscribe from destroyed signal
...
This handles another edge case where the Frame is deleted
before the child widget.
2025-08-27 16:47:14 +02:00
Franke Burgarino
15fd52960e
MCU: work around mixbus initialization issue
2025-08-27 16:47:14 +02:00
Franke Burgarino
9bb6741435
MCU: fix mcpStripableSorter
2025-08-27 16:47:14 +02:00
Paul Davis
5f7bcc55ef
temporal: fix unused variable warning in TempoMap::paste()
2025-08-27 16:47:13 +02:00
Paul Davis
d4a73cf8e4
temporal: lots more DEBUG_TRACE statements for grid debugging
2025-08-27 16:47:13 +02:00
Paul Davis
96e5229ad1
temporal: in the event of the most common logic failure, provide more info
...
TEMPORAL_MAP_ASSERT() doesn't give us any actual values or context.
2025-08-27 16:47:13 +02:00
Paul Davis
f1606db64a
in launchkey 4 code, use new Meter::bbt_delta() not ::bbt_delta
2025-08-27 16:47:13 +02:00
Paul Davis
0d6402e875
remove incorrect bbt_delta() in BBT_Time, provide Meter::bbt_delta
...
There are two implementations here, the more efficient one (commented out) does
not work correctly yet.
2025-08-27 16:47:13 +02:00
Paul Davis
69cc153470
check for null ActionGroup in ActionManager::drop_action_group()
2025-08-27 16:47:13 +02:00
Robin Gareus
84046ebc35
Hide debug messages in optimized builds
2025-08-27 16:47:13 +02:00
Franke Burgarino
3197c787b1
MCU: hide phase/solo controls for master
2025-08-27 16:47:13 +02:00
Robin Gareus
464303da5e
Handle special case of using unmanaged widgets to Frame
...
This happens in in Ardour's Preference dialog with
e.g. BufferingOptions:
~OptionEditorContainer deletes the Option, which in turn
deletes the Widget BufferingOptions:_buffering_presets_combo
Since the widget is not managed it is not removed from its
parent.
Later ~OptionEditorContainer disposes the page layout, which
eventually also calls the Frame d'tor, causing a heap-use-after-free.
2025-08-27 16:47:13 +02:00
Franke Burgarino
f7d01ea8e9
MCU: give UF1 & UF8 seperate device configs
2025-08-27 16:47:12 +02:00
Franke Burgarino
7e57b644d6
MCU: add master/monitor to global/mixer view if device has no master fader
2025-08-27 16:47:12 +02:00
Robin Gareus
cf4eb99ed8
Handle case where a custom MenuElem is added to the dropdown
2025-08-27 16:47:12 +02:00
Paul Davis
d18ecd5084
unit tests: fix an unusual deadlock/block in TempoMap::write_copy()
...
this call works in other tests, no time to investigate it right now, and
technically the test doesn't require a write copy at all.
2025-08-27 16:47:12 +02:00
Paul Davis
a3cf0a1570
unit tests: use std::cout for any debug output in tempo map cut buffer test
2025-08-27 16:47:12 +02:00
Paul Davis
3d4add15bc
temporal: implement TempoMap::bbt_distance() but do not use it
...
This was implemented to try to fix paste() but was not needed. It might be
useful in the future, or just as an expression of the logic of this. Note that
the BBT_Offset it returns only has the beats field set, which is ... odd. So
this is likely not quite finished.
2025-08-27 16:47:12 +02:00
Paul Davis
5e66f6d363
temporal: undefine macro after use
2025-08-27 16:47:12 +02:00
Paul Davis
ea00d3573d
temporal: show BBT marker point names in operator<<
2025-08-27 16:47:12 +02:00
Paul Davis
af4c7cd960
temporal: fix TempoMap::paste() to pass unit test
...
the BBT times of the newly inserted points during paste() are meaningless until
we recompute them using ::reset_starting_at(). So don't try to compute some
sort of likely value, just use the value from the cut buffer, and call
reset_starting_at() after every point inserted.
2025-08-27 16:47:12 +02:00
Paul Davis
230f08b9fd
temporal: BBT_Time cannot have any round_to_*() or round_up_to_*() methods
...
A meter (time signature) is required to do the math correctly for any operation that may
cross or reach the next bar boundary, which round_to_*() and round_up_to_*() may do.
2025-08-27 16:47:12 +02:00
Robin Gareus
daaa8641b5
ArdourDropdown: use action's short-label for display text
2025-08-27 16:47:11 +02:00
Robin Gareus
430b326174
YTKMM: expose ytk_set_child_packing
2025-08-27 16:47:11 +02:00
Paul Davis
9430adf4ef
refinements to SMF type0 import logic
2025-08-27 16:47:11 +02:00
Paul Davis
06751f64b4
MIDI regions attempt to get their tempo & meter from their source file
2025-08-27 16:47:11 +02:00
Paul Davis
f3fd8d6e40
slightly refine SMF::is_meta() to differentiate realtime system reset
2025-08-27 16:47:11 +02:00
Paul Davis
74851137f9
Reimplement MIDI file import to retain metadata in the files written
...
Previosuly, all meta data was thrown away. Now we retain it, so that MIDI
regions can ask about their source file's tempo & meter.
Significant engineering rework of how this all works, relying on
recently introduced API and API changes in SMF, SMFSource etc.
2025-08-27 16:47:11 +02:00
Paul Davis
fd2fbc7d25
change API of MidiSource::append_event_beats() to allow meta-event legality
...
Because we want a default argument of false, this involved the usual
inline-non-virtual-method-calls-virtual-with-no-default trick.
Also, do NOT append data to a MidiModel or change the length of an SMFSource
unless we know for sure that added that data to the SMF object.
2025-08-27 16:47:11 +02:00
Paul Davis
b559694dca
add SMFSource::end_track() to provide source-level access to SMF method
2025-08-27 16:47:11 +02:00
Paul Davis
35e7080f92
modify API of Evoral::SMF::append_event_beats() to add meta-event legality
...
If the (new) final argument is true, we allow writing SMF meta events to the
underlying libsmf object (which doesn't care one way or another).
2025-08-27 16:47:11 +02:00
Paul Davis
a9dc45a620
add Evoral::SMF::end_track()
...
This changes the assumption that an SMF object only refers to
a single track when being written.
::end_track() is used within begin::write()/end_write() pairs to mark the start
of a new SMF track.
2025-08-27 16:47:11 +02:00
Paul Davis
0126509937
add Evoral::SMF::is_meta() to test for SMF meta events
...
These are not legal in "live" MIDI but are allowed in SMF files.
2025-08-27 16:47:11 +02:00
Paul Davis
f14321213f
use nullptr instead of zero in initializer
2025-08-27 16:47:11 +02:00
Paul Davis
e508fbcdf1
SMF: return meta events, with size set to event size, but return value of zero
2025-08-27 16:47:10 +02:00
Edgar Aichinger
fc7e237352
completing german translation update (libardour)
2025-08-18 09:26:04 +02:00