X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Faudio_streamview.cc;h=a69f398ef45d0ac96c14196c04d44cb4f0d55967;hb=b426e7d5e4c2b2c0071ded015c193f78f16ead78;hp=c66685d5d72a23939fed21fcbb30c6b9ee38143a;hpb=a46af0460b0fdcc145c4dd282fa4fe071d4971fc;p=ardour.git diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index c66685d5d7..a69f398ef4 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -70,6 +70,9 @@ AudioStreamView::AudioStreamView (AudioTimeAxisView& tv) AudioStreamView::~AudioStreamView () { + for (CrossfadeViewList::iterator xi = crossfade_views.begin(); xi != crossfade_views.end(); ++xi) { + delete xi->second; + } } int @@ -121,7 +124,7 @@ AudioStreamView::create_region_view (boost::shared_ptr r, bool wait_for_ if (recording) { region_view = new AudioRegionView (_canvas_group, _trackview, region, _samples_per_unit, region_color, recording, TimeAxisViewItem::Visibility( - TimeAxisViewItem::ShowFrame | + TimeAxisViewItem::ShowFrame | TimeAxisViewItem::HideFrameRight | TimeAxisViewItem::HideFrameLeft | TimeAxisViewItem::HideFrameTB)); @@ -163,7 +166,7 @@ RegionView* AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wait_for_waves, bool recording) { RegionView *region_view = create_region_view (r, wait_for_waves, recording); - + if (region_view == 0) { return 0; } @@ -191,6 +194,12 @@ AudioStreamView::add_region_view_internal (boost::shared_ptr r, bool wai region_views.push_front (region_view); + if (_trackview.editor().internal_editing()) { + region_view->hide_rect (); + } else { + region_view->show_rect (); + } + /* catch region going away */ r->DropReferences.connect (*this, invalidator (*this), boost::bind (&AudioStreamView::remove_region_view, this, boost::weak_ptr (r)), gui_context()); @@ -463,22 +472,22 @@ AudioStreamView::setup_rec_box () if (src) { sources.push_back (src); src->PeakRangeReady.connect (rec_data_ready_connections, - invalidator (*this), - ui_bind (&AudioStreamView::rec_peak_range_ready, this, _1, _2, boost::weak_ptr(src)), - gui_context()); + invalidator (*this), + ui_bind (&AudioStreamView::rec_peak_range_ready, this, _1, _2, boost::weak_ptr(src)), + gui_context()); } } // handle multi - nframes_t start = 0; + framepos_t start = 0; if (rec_regions.size() > 0) { start = rec_regions.back().first->start() + _trackview.track()->get_captured_frames(rec_regions.size()-1); } - PropertyList plist; - + PropertyList plist; + plist.add (Properties::start, start); plist.add (Properties::length, 1); plist.add (Properties::name, string()); @@ -488,7 +497,7 @@ AudioStreamView::setup_rec_box () boost::dynamic_pointer_cast(RegionFactory::create (sources, plist, false))); assert(region); - region->set_position (_trackview.session()->transport_frame(), this); + region->set_position (_trackview.session()->transport_frame()); rec_regions.push_back (make_pair(region, (RegionView*) 0)); } @@ -600,7 +609,7 @@ AudioStreamView::foreach_crossfadeview (void (CrossfadeView::*pmf)(void)) } void -AudioStreamView::rec_peak_range_ready (nframes_t start, nframes_t cnt, boost::weak_ptr weak_src) +AudioStreamView::rec_peak_range_ready (framepos_t start, framecnt_t cnt, boost::weak_ptr weak_src) { ENSURE_GUI_THREAD (*this, &AudioStreamView::rec_peak_range_ready, start, cnt, weak_src) @@ -630,42 +639,44 @@ AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt) if (!Config->get_show_waveforms_while_recording ()) { return; } - + uint32_t n = 0; - + for (list,RegionView*> >::iterator iter = rec_regions.begin(); iter != rec_regions.end(); n++) { - + list,RegionView*> >::iterator tmp = iter; ++tmp; - + + assert (n < rec_rects.size()); + if (!canvas_item_visible (rec_rects[n].rectangle)) { /* rect already hidden, this region is done */ iter = tmp; continue; } - + boost::shared_ptr region = boost::dynamic_pointer_cast(iter->first); - + if (!region) { iter = tmp; continue; } - - nframes_t origlen = region->length(); + + framecnt_t origlen = region->length(); if (region == rec_regions.back().first && rec_active) { - + if (last_rec_data_frame > region->start()) { - - nframes_t nlen = last_rec_data_frame - region->start(); - + + framecnt_t nlen = last_rec_data_frame - region->start(); + if (nlen != region->length()) { region->suspend_property_changes (); - region->set_position (_trackview.track()->get_capture_start_frame(n), this); - region->set_length (nlen, this); + region->set_position (_trackview.track()->get_capture_start_frame(n)); + region->set_length (nlen); region->resume_property_changes (); - + if (origlen == 1) { /* our special initial length */ add_region_view_internal (region, false, true); @@ -673,7 +684,7 @@ AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt) } check_record_layers (region, (region->position() - region->start() + start + cnt)); - + /* also update rect */ ArdourCanvas::SimpleRect * rect = rec_rects[n].rectangle; gdouble xend = _trackview.editor().frame_to_pixel (region->position() + region->length()); @@ -681,16 +692,16 @@ AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt) } } else { - - nframes_t nlen = _trackview.track()->get_captured_frames(n); - + + framecnt_t nlen = _trackview.track()->get_captured_frames(n); + if (nlen != region->length()) { - + if (region->source_length(0) >= region->start() + nlen) { region->suspend_property_changes (); - region->set_position (_trackview.track()->get_capture_start_frame(n), this); - region->set_length (nlen, this); + region->set_position (_trackview.track()->get_capture_start_frame(n)); + region->set_length (nlen); region->resume_property_changes (); if (origlen == 1) { @@ -705,9 +716,9 @@ AudioStreamView::update_rec_regions (framepos_t start, framecnt_t cnt) } } } - - iter = tmp; } + + iter = tmp; } } @@ -835,7 +846,7 @@ void AudioStreamView::horizontal_position_changed () { /* we only `draw' the bit of the curve that is visible, so we need to update here */ - + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { i->second->horizontal_position_changed (); }