X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Fmidi_streamview.cc;h=5e2f05558297e484f92c70cb57dfe904f77aae64;hb=6c19a776f43b4a9869780e3312764d039a16cd39;hp=23d31932d836d4cf30f94974ae9711633d59fc41;hpb=cdab4c990685905bb48f916ca27cde85527222e4;p=ardour.git diff --git a/gtk2_ardour/midi_streamview.cc b/gtk2_ardour/midi_streamview.cc index 23d31932d8..5e2f055582 100644 --- a/gtk2_ardour/midi_streamview.cc +++ b/gtk2_ardour/midi_streamview.cc @@ -33,6 +33,7 @@ #include "ardour/region_factory.h" #include "ardour/session.h" #include "ardour/smf_source.h" +#include "ardour/evoral_types_convert.h" #include "gui_thread.h" #include "midi_region_view.h" @@ -358,7 +359,7 @@ MidiStreamView::draw_note_lines() double h = y - prev_y; double mid = y + (h/2.0); - if (height > 1.0) { // XXX ? should that not be h >= 1 ? + if (mid >= 0 && h > 1.0) { _note_lines->add (mid, h, color); } @@ -448,7 +449,7 @@ MidiStreamView::setup_rec_box () { // cerr << _trackview.name() << " streamview SRB\n"; - if (_trackview.session()->transport_rolling()) { + if (!_trackview.session()->transport_stopped()) { if (!rec_active && _trackview.session()->record_status() == Session::Recording && @@ -466,10 +467,10 @@ MidiStreamView::setup_rec_box () // handle multi - framepos_t start = 0; + samplepos_t start = 0; if (rec_regions.size() > 0) { start = rec_regions.back().first->start() - + _trackview.track()->get_captured_frames(rec_regions.size()-1); + + _trackview.track()->get_captured_samples(rec_regions.size()-1); } if (!rec_regions.empty()) { @@ -485,10 +486,10 @@ MidiStreamView::setup_rec_box () is so that the RegionView gets created with a non-zero width, as apparently creating a RegionView with a zero width causes it never to be displayed (there is a warning in TimeAxisViewItem::init about this). However, we - must also set length_beats to something non-zero, otherwise the frame length + must also set length_beats to something non-zero, otherwise the sample length of 1 causes length_beats to be set to some small quantity << 1. Then when the position is set up below, this length_beats is used to recompute - length using BeatsFramesConverter::to, which is slightly innacurate for small + length using BeatsSamplesConverter::to, which is slightly innacurate for small beats values because it converts floating point beats to bars, beats and integer ticks. The upshot of which being that length gets set back to 0, meaning no region view is ever seen, meaning no MIDI notes during record (#3820). @@ -501,8 +502,8 @@ MidiStreamView::setup_rec_box () (RegionFactory::create (sources, plist, false))); if (region) { region->set_start (_trackview.track()->current_capture_start() - - _trackview.track()->get_capture_start_frame (0)); - region->set_position (_trackview.session()->transport_frame()); + - _trackview.track()->get_capture_start_sample (0)); + region->set_position (_trackview.session()->transport_sample()); RegionView* rv = add_region_view_internal (region, false, true); MidiRegionView* mrv = dynamic_cast (rv); @@ -674,7 +675,7 @@ struct RegionPositionSorter { }; bool -MidiStreamView::paste (ARDOUR::framepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num) +MidiStreamView::paste (ARDOUR::samplepos_t pos, const Selection& selection, PasteContext& ctx, const int32_t sub_num) { /* Paste into the first region which starts on or before pos. Only called when using an internal editing tool. */