Commit Graph

38066 Commits

Author SHA1 Message Date
Ben Loftis 4217a68852
Arranger: implement bi-directional selection 2023-09-05 23:08:30 +02:00
Ben Loftis 5ceb66c902
Arranger: allow renaming by context-menu 2023-09-05 23:08:29 +02:00
Ben Loftis 101744b812
Add method to find a section location by position 2023-09-05 23:08:29 +02:00
Robin Gareus 5c888f2b90
Fix deadlock when cut/pasting section to itself 2023-09-05 23:08:29 +02:00
Paul Davis 5223d05854 launchpad pro: various improvements and fixes 2023-09-04 19:41:25 -06:00
Paul Davis 269699c340 temporal: fix get_grid() to work in the presence of "weird" BBT markers 2023-09-04 19:41:25 -06:00
Paul Davis 13bdfda81a temporal: add Meter::round_up_to_beat_div()
reimplement round_up_to_beat() in terms of round_up_to_beat_div()
2023-09-04 19:41:25 -06:00
Paul Davis f1f5df7c9a temporal: add BBT_Time::round_up_to_beat_div() 2023-09-04 19:41:25 -06:00
Paul Davis 7c5e7ddf59 temporal: improve operator<<() for MusicTimePoint (BBT markers) 2023-09-04 19:41:25 -06:00
Robin Gareus cf9f9db48b
Set length of new percussive hits to 1 tick
This prevents overlap of successive hits.

Ardour 7 added a new duration select drop-down menu,
which defaults to "Auto" (musical grid) and removed
the special case when drawing percussive notes.
It was possible to accidentally create overlapping notes,
without the user being aware of doing so.
2023-09-04 23:26:54 +02:00
Ben Loftis 7d95334c0d fix thinko in e53a7 which resulted in unmatched tempo-map UNDO transactions 2023-09-04 08:48:49 -05:00
Robin Gareus 774adfb33c
Fix rounding of arrangement markers 2023-09-01 21:53:26 +02:00
Ben Loftis a6844279ad arranger-treeview 'search' function was stealing keybd events 2023-09-01 07:18:22 -05:00
Paul Davis 0d89bc5789 fix height of tempo ruler curve elements
These were being drawn in a way that failed to really convey relative
tempos very well. This is now better, though perhaps there are other
improvements possible
2023-08-31 18:25:18 -06:00
Paul Davis 0266d98a3b temporal: add TempoMap::{max,min}_notes_per_minute() API 2023-08-31 18:23:40 -06:00
Paul Davis cda0d6ce9f temporal: fix totally broken implementation of TempoMap::shift (timepos...) 2023-08-31 18:22:59 -06:00
Paul Davis c778a6df67 ripple backwards when cutting a section 2023-08-31 18:22:25 -06:00
Paul Davis 69cfe9d3f9 add missing ripple during cut/copy/paste of sections 2023-08-31 18:21:56 -06:00
Paul Davis da9140a390 polish the way we print tempo numerics in tempo ruler 2023-08-31 10:34:48 -06:00
Paul Davis 43d6d4187c display tempo with only 1 digit of decimals 2023-08-31 10:34:48 -06:00
Paul Davis 4969fb9e0b libpbd: tweak for printing pthread ID (windows is int/*nix is ptr) 2023-08-31 10:34:48 -06:00
Robin Gareus b5b4be96e3
Use "Arrangement" in GUI instead of Section (amend 2f6a0abf) 2023-08-31 16:12:50 +02:00
Robin Gareus 1bc795509b
Use "Arrangement" in GUI instead of Section (amend 2f6a0abf) 2023-08-31 05:29:29 +02:00
Robin Gareus b162ffbca8
Clear Arrangement rects when closing a session 2023-08-31 00:58:51 +02:00
Paul Davis c4cb8dbda9 arithmetic simplification 2023-08-30 16:07:48 -06:00
Paul Davis 864b660abe lppro: working send faders, some work on color & pulse for select buttons 2023-08-30 16:06:14 -06:00
Paul Davis e664acc16e lppro: working pan fader controls 2023-08-30 16:06:14 -06:00
Paul Davis 75802cc47b lppro: momentary mode for all fader layouts 2023-08-30 16:06:14 -06:00
Paul Davis ee0d5cfc40 lppro: working gain faders 2023-08-30 16:06:14 -06:00
Paul Davis bc7f25e52c libpbd: AbstractUI must call & destroy sigc::trackable callbacks in its destructor
AbstractUI IS-A BaseUI IS-A EventLoop
                       IS-A sigc::trackable

If we have sent a call_slot() request to an EventLoop that has not executed
when the object involved in the call_slot() functor is destroyed, we need to
ensure that the request is invalidated.

To do this, We register "notify" callbacks with the sigc::trackable that is a
base class of the object involved in the functor given to
call_slot(). sigc::trackable will call these "notify" callbacks from its
destructor.

So when the call_slot() functor's relevant object dies, and its sigc::trackable
base class is destroyed, it will invoke all of its the "notify" callbacks, which will
in turn call EventLoop::invalidate_request() and this hopefully marks all the
queued call_slot() functors as "do not call".

However, invalidate_request() requires a lock, and access to the lock is
granted via a pure virtual, EventLoop::slot_invalidation_lock(). In the
heirarchy cited above, this is implemented by AbstractUI.

When we destroy an AbstractUI, ~AbstractUI() is called first, and this destroys
the lock and changes the VTT so that ::slot_invalidation_lock() becomes a pure
virtual again.

Eventually we will call ~trackable() which in turns runs all the "notify"
callbacks, and then removes them. But when these callbacks end up in
EventLoop::invalidate_request(), we try to call ::slot_invalidation_lock() and
C++ will abort because of its (now) pure virtual status.

Therefore, we must invoke the "notify" callbacks before the
::slot_invalidation_lock() becomes pure, and that means inside ~AbstractUI, as
an explicit call to trackable::notify_callbacks().

This has not appeared before (remarkably), but became an issue when the
Launchpad Pro support code's main object (derived from MIDISurface and hence
from AbstractUI) "failed" to use sub-objects for its various methods. So when
it connects to, for example, the Session::RouteAddedOrRemoved signal, it is
connecting itself (derived from a sigc::trackable). When the Launchpad Pro
object is destroyed, it tries to invalidate all the call_slot() requests, but
this requires access to an event loop lock - owned by the Launchpad Pro event
loop, which is already destroyed!

Other surfaces have generally avoided this by using other objects to provide
methods of dealing with signals from libardour objects.
2023-08-30 16:06:14 -06:00
Paul Davis 187557df57 midi surfaces: use an event loop invalidator for call_slot() 2023-08-30 16:06:14 -06:00
Paul Davis d5ad9ff033 libpbd/guis: move __invalidator() into PBD::EventLoop
we allow use of/dependency on sigc::trackable there, so this is
both legal but also sensible.

Leave the macro definition of invalidator(x) in gtkmm2ext/gui_thread.h
because it doesn't hurt and makes some sense for it to be there. No
reason for a source module that needs invalidator(x) to load EventLoop
decl.
2023-08-30 16:06:14 -06:00
Paul Davis f5f48b421e lppro: get long press working, add undo/redo/metronome 2023-08-30 16:06:14 -06:00
Paul Davis 9ee7c33737 lppro: solo, mute, rec-enable basics 2023-08-30 16:06:14 -06:00
Paul Davis a6e9d6ecd1 lppro: fix selection button color when "off" 2023-08-30 16:06:14 -06:00
Paul Davis 784fa82081 lppro: selection enabled and displayed 2023-08-30 16:06:13 -06:00
Paul Davis a49c961189 lppro: handle new slots and new routes and improve color display 2023-08-30 16:06:13 -06:00
Paul Davis 5deea0c077 libpbd: change static trigger property change signal to take Trigger*
When we add a region to a slot, we create a new Trigger, set its region,
then arrange for an "atomic" swap with the existing Trigger. This
means that the property change signal is emitted on a Trigger that
does not yet exist inside a TriggerBox, and so cannot be found using
row/col or x,y coordinates. Pass a raw pointer instead (lifetime
management is not an issue ... or is it.
2023-08-30 16:06:13 -06:00
Paul Davis f3861a79b6 lppro: more work on displaying triggers, including return of the color map 2023-08-30 16:06:13 -06:00
Paul Davis f65e0b85a8 libpbd: add operator<< for PropertyChange 2023-08-30 16:06:13 -06:00
Paul Davis 1ea104eac1 lppro: fix invalidators 2023-08-30 16:06:13 -06:00
Paul Davis 5cfa881fa9 lppro: more state tracking, stop clip handling etc. 2023-08-30 16:06:13 -06:00
Paul Davis 9fa2fccb5c lppro: track trigger state changes 2023-08-30 16:06:13 -06:00
Paul Davis 6cf7b89aaf triggerbox: fix argument ordering error in static trigger property signal 2023-08-30 16:06:13 -06:00
Paul Davis fef1cfa83b lppro: pads launch clips 2023-08-30 16:06:13 -06:00
Paul Davis c81027fc84 triggerbox: add static signals to allow an object to watch all trigger state changes 2023-08-30 16:06:13 -06:00
Paul Davis 2f9fd8e288 launchpad pro: basics of pad/button handling, complete with cue launch and transport control 2023-08-30 16:06:13 -06:00
Paul Davis 9438914aca ctrl surfaces: fix logic error in toggle_roll() for surfaces 2023-08-30 16:06:13 -06:00
Paul Davis 7406ad01bd lppro: continuing adventures with shadow ports and pad maps 2023-08-30 16:06:13 -06:00
Paul Davis 88a599816a fix name of port bundle for MIDI surface shadow port 2023-08-30 16:06:13 -06:00