Compare commits
16 Commits
d71c67ce9c
...
765a8b3303
Author | SHA1 | Date | |
---|---|---|---|
765a8b3303 | |||
df7fe4fb91 | |||
bbcaf617c4 | |||
af9472ecb6 | |||
d7f9b659f2 | |||
f54fd286ee | |||
10cd3c85cd | |||
0e7a5235e1 | |||
b91e9fbe64 | |||
cdab8f950f | |||
509108f23e | |||
3e5dfe0466 | |||
c74735ba07 | |||
2a9d60a5c7 | |||
44d01f5951 | |||
24f574772e |
@ -1920,7 +1920,7 @@ AudioRegionView::show_xfades ()
|
||||
void
|
||||
AudioRegionView::drag_start ()
|
||||
{
|
||||
TimeAxisViewItem::drag_start ();
|
||||
RegionView::drag_start ();
|
||||
|
||||
//we used to hide xfades here. I don't see the point with the new model, but we can re-implement if needed
|
||||
}
|
||||
|
@ -2795,11 +2795,12 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
|
||||
rv->trim_front_starting ();
|
||||
}
|
||||
|
||||
rv->drag_start ();
|
||||
|
||||
AudioRegionView* const arv = dynamic_cast<AudioRegionView*> (rv);
|
||||
|
||||
if (arv) {
|
||||
arv->temporarily_hide_envelope ();
|
||||
arv->drag_start ();
|
||||
}
|
||||
|
||||
std::shared_ptr<Playlist> pl = rv->region ()->playlist ();
|
||||
@ -2875,10 +2876,13 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
|
||||
}
|
||||
}
|
||||
|
||||
bool changed = false;
|
||||
|
||||
switch (_operation) {
|
||||
case StartTrim:
|
||||
for (list<DraggingView>::iterator i = _views.begin (); i != _views.end (); ++i) {
|
||||
bool changed = i->view->trim_front (timepos_t (i->initial_position) + dt, non_overlap_trim);
|
||||
changed = i->view->trim_front (timepos_t (i->initial_position) + dt, non_overlap_trim);
|
||||
|
||||
|
||||
if (changed && _preserve_fade_anchor) {
|
||||
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
|
||||
@ -2899,7 +2903,7 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
|
||||
|
||||
case EndTrim:
|
||||
for (list<DraggingView>::iterator i = _views.begin (); i != _views.end (); ++i) {
|
||||
bool changed = i->view->trim_end (timepos_t (i->initial_end) + dt, non_overlap_trim);
|
||||
changed = i->view->trim_end (timepos_t (i->initial_end) + dt, non_overlap_trim);
|
||||
|
||||
if (changed && _preserve_fade_anchor) {
|
||||
AudioRegionView* arv = dynamic_cast<AudioRegionView*> (i->view);
|
||||
@ -2917,6 +2921,13 @@ TrimDrag::motion (GdkEvent* event, bool first_move)
|
||||
break;
|
||||
}
|
||||
|
||||
if (changed) {
|
||||
for (list<DraggingView>::const_iterator i = _views.begin (); i != _views.end (); ++i) {
|
||||
StreamView* sv = i->view->get_time_axis_view ().view ();
|
||||
sv->update_coverage_frame ();
|
||||
}
|
||||
}
|
||||
|
||||
switch (_operation) {
|
||||
case StartTrim:
|
||||
show_verbose_cursor_time (rv->region ()->position ());
|
||||
|
@ -166,6 +166,10 @@ MidiTracer::ports_changed ()
|
||||
|
||||
_midi_port_list->clear ();
|
||||
|
||||
if (!AudioEngine::instance()->running()) {
|
||||
return;
|
||||
}
|
||||
|
||||
PortManager::PortList pl;
|
||||
AudioEngine::instance()->get_ports (DataType::MIDI, pl);
|
||||
|
||||
|
@ -963,17 +963,22 @@ RegionView::set_height (double h)
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
RegionView::clear_coverage_frame ()
|
||||
{
|
||||
for (auto& i : _coverage_frame) {
|
||||
delete i;
|
||||
}
|
||||
_coverage_frame.clear ();
|
||||
}
|
||||
|
||||
/** Remove old coverage frame and make new ones, if we're in a LayerDisplay mode
|
||||
* which uses them. */
|
||||
void
|
||||
RegionView::update_coverage_frame (LayerDisplay d)
|
||||
{
|
||||
/* remove old coverage frame */
|
||||
for (auto& i : _coverage_frame) {
|
||||
delete i;
|
||||
}
|
||||
|
||||
_coverage_frame.clear ();
|
||||
clear_coverage_frame ();
|
||||
|
||||
if (d != Stacked) {
|
||||
/* don't do coverage frame unless we're in stacked mode */
|
||||
|
@ -238,6 +238,8 @@ private:
|
||||
|
||||
void update_cue_markers ();
|
||||
|
||||
void clear_coverage_frame ();
|
||||
|
||||
struct ViewCueMarker {
|
||||
ArdourMarker* view_marker;
|
||||
ARDOUR::CueMarker model_marker;
|
||||
|
@ -126,6 +126,7 @@ public:
|
||||
void check_record_layers (std::shared_ptr<ARDOUR::Region>, ARDOUR::samplepos_t);
|
||||
|
||||
virtual void playlist_layered (std::weak_ptr<ARDOUR::Track>);
|
||||
void update_coverage_frame ();
|
||||
|
||||
sigc::signal<void, RegionView*> RegionViewAdded;
|
||||
sigc::signal<void> RegionViewRemoved;
|
||||
@ -193,9 +194,6 @@ protected:
|
||||
*/
|
||||
samplepos_t _new_rec_layer_time;
|
||||
void setup_new_rec_layer_time (std::shared_ptr<ARDOUR::Region>);
|
||||
|
||||
private:
|
||||
void update_coverage_frame ();
|
||||
};
|
||||
|
||||
#endif /* __ardour_streamview_h__ */
|
||||
|
@ -60,6 +60,7 @@ class LIBARDOUR_API MidiPort : public Port {
|
||||
MidiBuffer& get_midi_buffer (pframes_t nframes);
|
||||
|
||||
void set_trace (std::weak_ptr<MIDI::Parser> trace_parser);
|
||||
std::shared_ptr<MIDI::Parser> trace_parser() const;
|
||||
|
||||
typedef boost::function<bool(MidiBuffer&,MidiBuffer&)> MidiFilter;
|
||||
void set_inbound_filter (MidiFilter);
|
||||
|
@ -231,9 +231,14 @@ AsyncMIDIPort::write (const MIDI::byte * msg, size_t msglen, MIDI::timestamp_t t
|
||||
* delivered
|
||||
*/
|
||||
|
||||
std::shared_ptr<MIDI::Parser> tp (trace_parser());
|
||||
|
||||
_parser->set_timestamp (AudioEngine::instance()->sample_time() + timestamp);
|
||||
for (size_t n = 0; n < msglen; ++n) {
|
||||
_parser->scanner (msg[n]);
|
||||
if (tp) {
|
||||
tp->scanner (msg[n]);
|
||||
}
|
||||
}
|
||||
|
||||
Glib::Threads::Mutex::Lock lm (output_fifo_lock);
|
||||
|
@ -395,6 +395,12 @@ MidiPort::set_trace (std::weak_ptr<MIDI::Parser> p)
|
||||
_trace_parser = p;
|
||||
}
|
||||
|
||||
std::shared_ptr<MIDI::Parser>
|
||||
MidiPort::trace_parser() const
|
||||
{
|
||||
return _trace_parser.lock();
|
||||
}
|
||||
|
||||
void
|
||||
MidiPort::set_input_active (bool yn)
|
||||
{
|
||||
|
@ -102,14 +102,23 @@ MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, samplepos_t when, std::shared_pt
|
||||
|
||||
uint8_t buf[4];
|
||||
size_t cnt;
|
||||
std::shared_ptr<AsyncMIDIPort> aport = std::dynamic_pointer_cast<AsyncMIDIPort>(output_port);
|
||||
MIDI::Parser* parser (aport ? aport->parser() : output_port->trace_parser().get());
|
||||
|
||||
MIDIOutputActivity (); /* EMIT SIGNAL */
|
||||
|
||||
if ((cnt = msc->get_bank_msb_message (buf, sizeof (buf))) > 0) {
|
||||
mbuf.push_back (when, Evoral::MIDI_EVENT, cnt, buf);
|
||||
|
||||
for (size_t n = 0; parser && n < cnt; ++n) {
|
||||
parser->scanner (buf[n]);
|
||||
}
|
||||
|
||||
if ((cnt = msc->get_bank_lsb_message (buf, sizeof (buf))) > 0) {
|
||||
mbuf.push_back (when, Evoral::MIDI_EVENT, cnt, buf);
|
||||
for (size_t n = 0; parser && n < cnt; ++n) {
|
||||
parser->scanner (buf[n]);
|
||||
}
|
||||
}
|
||||
|
||||
last_delivered_bank = msc->bank();
|
||||
@ -117,7 +126,9 @@ MIDISceneChanger::rt_deliver (MidiBuffer& mbuf, samplepos_t when, std::shared_pt
|
||||
|
||||
if ((cnt = msc->get_program_message (buf, sizeof (buf))) > 0) {
|
||||
mbuf.push_back (when, Evoral::MIDI_EVENT, cnt, buf);
|
||||
|
||||
for (size_t n = 0; parser && n < cnt; ++n) {
|
||||
parser->scanner (buf[n]);
|
||||
}
|
||||
last_delivered_program = msc->program();
|
||||
}
|
||||
}
|
||||
@ -324,12 +335,12 @@ MIDISceneChanger::program_change_input (MIDI::Parser& parser, MIDI::byte program
|
||||
new_mark = true;
|
||||
}
|
||||
|
||||
int bank = -1;
|
||||
int bank = 0;
|
||||
if (have_seen_bank_changes) {
|
||||
bank = std::dynamic_pointer_cast<AsyncMIDIPort>(input_port)->channel (channel)->bank();
|
||||
}
|
||||
|
||||
MIDISceneChange* msc =new MIDISceneChange (channel, bank, program & 0x7f);
|
||||
std::shared_ptr<MIDISceneChange> msc (new MIDISceneChange (channel, bank, program & 0x7f));
|
||||
|
||||
/* check for identical scene change so we can re-use color, if any */
|
||||
|
||||
@ -344,8 +355,8 @@ MIDISceneChanger::program_change_input (MIDI::Parser& parser, MIDI::byte program
|
||||
}
|
||||
}
|
||||
|
||||
loc->set_scene_change (std::shared_ptr<MIDISceneChange> (msc));
|
||||
loc->set_name( string_compose(_("scene [%1]"), 1+bank*128+(program & 0x7f)));
|
||||
loc->set_scene_change (msc);
|
||||
loc->set_name (string_compose(_("scene [%1]"), 1 + ((bank*128)+(program & 0x7f))));
|
||||
|
||||
/* this will generate a "changed" signal to be emitted by locations,
|
||||
and we will call ::gather() to update our list of MIDI events.
|
||||
|
Loading…
Reference in New Issue
Block a user