diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index e61bd6e744..99755d6a97 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -77,7 +77,7 @@ AudioStreamView::set_samples_per_unit (gdouble spp) StreamView::set_samples_per_unit(spp); for (CrossfadeViewList::iterator xi = crossfade_views.begin(); xi != crossfade_views.end(); ++xi) { - (*xi)->set_samples_per_unit (spp); + xi->second->set_samples_per_unit (spp); } return 0; @@ -207,15 +207,15 @@ AudioStreamView::remove_region_view (boost::weak_ptr weak_r) if (!_trackview.session().deletion_in_progress()) { - for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end();) { - list::iterator tmp; + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end();) { + CrossfadeViewList::iterator tmp; tmp = i; ++tmp; boost::shared_ptr ar = boost::dynamic_pointer_cast(r); - if (ar && (*i)->crossfade->involves (ar)) { - delete *i; + if (ar && i->second->crossfade->involves (ar)) { + delete i->second; crossfade_views.erase (i); } @@ -232,7 +232,7 @@ AudioStreamView::undisplay_diskstream () StreamView::undisplay_diskstream(); for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - delete *i; + delete i->second; } crossfade_views.clear (); @@ -257,8 +257,8 @@ AudioStreamView::playlist_modified (boost::shared_ptr ds) /* make sure xfades are on top and all the regionviews are stacked correctly. */ - for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - (*i)->get_canvas_group()->raise_to_top(); + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { + i->second->get_canvas_group()->raise_to_top(); } } @@ -311,17 +311,15 @@ AudioStreamView::add_crossfade (boost::shared_ptr crossfade) /* first see if we already have a CrossfadeView for this Crossfade */ - for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - if ((*i)->crossfade == crossfade) { - - if (!crossfades_visible || _layer_display == Stacked) { - (*i)->hide(); - } else { - (*i)->show (); - } - (*i)->set_valid (true); - return; + CrossfadeViewList::iterator i = crossfade_views.find (crossfade); + if (i != crossfade_views.end()) { + if (!crossfades_visible || _layer_display == Stacked) { + i->second->hide(); + } else { + i->second->show (); } + i->second->set_valid (true); + return; } /* create a new one */ @@ -345,7 +343,7 @@ AudioStreamView::add_crossfade (boost::shared_ptr crossfade) *lview, *rview); cv->set_valid (true); crossfade->Invalidated.connect (mem_fun (*this, &AudioStreamView::remove_crossfade)); - crossfade_views.push_back (cv); + crossfade_views[cv->crossfade] = cv; if (!_trackview.session().config.get_xfades_visible() || !crossfades_visible || _layer_display == Stacked) { cv->hide (); } @@ -358,9 +356,9 @@ AudioStreamView::remove_crossfade (boost::shared_ptr r) boost::shared_ptr xfade = boost::dynamic_pointer_cast (r); - for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - if ((*i)->crossfade == xfade) { - delete *i; + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { + if (i->second->crossfade == xfade) { + delete i->second; crossfade_views.erase (i); break; } @@ -371,7 +369,7 @@ void AudioStreamView::redisplay_diskstream () { list::iterator i; - list::iterator xi, tmpx; + CrossfadeViewList::iterator xi, tmpx; // Flag region views as invalid and disable drawing for (i = region_views.begin(); i != region_views.end(); ++i) { @@ -381,9 +379,9 @@ AudioStreamView::redisplay_diskstream () // Flag crossfade views as invalid for (xi = crossfade_views.begin(); xi != crossfade_views.end(); ++xi) { - (*xi)->set_valid (false); - if ((*xi)->visible() && _layer_display != Stacked) { - (*xi)->show (); + xi->second->set_valid (false); + if (xi->second->visible() && _layer_display != Stacked) { + xi->second->show (); } } @@ -408,8 +406,8 @@ AudioStreamView::redisplay_diskstream () tmpx = xi; tmpx++; - if (!(*xi)->valid()) { - delete *xi; + if (!xi->second->valid()) { + delete xi->second; crossfade_views.erase (xi); } @@ -611,8 +609,8 @@ AudioStreamView::setup_rec_box () void AudioStreamView::foreach_crossfadeview (void (CrossfadeView::*pmf)(void)) { - for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - ((*i)->*pmf) (); + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { + (i->second->*pmf) (); } } @@ -762,9 +760,9 @@ AudioStreamView::hide_all_xfades () void AudioStreamView::hide_xfades_involving (AudioRegionView& rv) { - for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - if ((*i)->crossfade->involves (rv.audio_region())) { - (*i)->fake_hide (); + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { + if (i->second->crossfade->involves (rv.audio_region())) { + i->second->fake_hide (); } } } @@ -772,9 +770,9 @@ AudioStreamView::hide_xfades_involving (AudioRegionView& rv) void AudioStreamView::reveal_xfades_involving (AudioRegionView& rv) { - for (list::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - if ((*i)->crossfade->involves (rv.audio_region()) && (*i)->visible() && _layer_display != Stacked) { - (*i)->show (); + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { + if (i->second->crossfade->involves (rv.audio_region()) && i->second->visible() && _layer_display != Stacked) { + i->second->show (); } } } @@ -804,10 +802,10 @@ AudioStreamView::update_contents_height () for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { if (_layer_display == Overlaid) { - (*i)->show (); - (*i)->set_height (height); + i->second->show (); + i->second->set_height (height); } else { - (*i)->hide (); + i->second->hide (); } } } diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h index 1c5265f193..19254c0312 100644 --- a/gtk2_ardour/audio_streamview.h +++ b/gtk2_ardour/audio_streamview.h @@ -107,7 +107,7 @@ class AudioStreamView : public StreamView double _amplitude_above_axis; - typedef std::list CrossfadeViewList; + typedef std::map, CrossfadeView*> CrossfadeViewList; CrossfadeViewList crossfade_views; bool crossfades_visible; diff --git a/gtk2_ardour/crossfade_view.cc b/gtk2_ardour/crossfade_view.cc index 63c2115b87..521c33240a 100644 --- a/gtk2_ardour/crossfade_view.cc +++ b/gtk2_ardour/crossfade_view.cc @@ -126,7 +126,10 @@ CrossfadeView::crossfade_changed (Change what_changed) if (what_changed & BoundsChanged) { set_position (crossfade->position(), this); set_duration (crossfade->length(), this); - need_redraw_curves = true; + + /* set_duration will call reset_width_dependent_items which in turn will call redraw_curves via active_changed, + so no need for us to call it */ + need_redraw_curves = false; } if (what_changed & Crossfade::FollowOverlapChanged) { diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index 35b8576a48..4a10708e8c 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -312,7 +312,7 @@ StreamView::playlist_modified (boost::shared_ptr ds) ENSURE_GUI_THREAD (bind (mem_fun (*this, &StreamView::playlist_modified_weak), ds)); /* update layers count and the y positions and heights of our regions */ - if (ds->playlist()) { + if (ds->playlist() && _layer_display == Stacked) { _layers = ds->playlist()->top_layer() + 1; update_contents_height (); update_coverage_frames (); diff --git a/libs/ardour/ardour/crossfade.h b/libs/ardour/ardour/crossfade.h index 4afa38126c..9e1e39bb14 100644 --- a/libs/ardour/ardour/crossfade.h +++ b/libs/ardour/ardour/crossfade.h @@ -106,8 +106,6 @@ class Crossfade : public ARDOUR::AudioRegion nframes_t overlap_length() const; - void invalidate(); - sigc::signal > Invalidated; sigc::signal StateChanged; diff --git a/libs/ardour/crossfade.cc b/libs/ardour/crossfade.cc index 2f0d66f8fb..86d509ec66 100644 --- a/libs/ardour/crossfade.cc +++ b/libs/ardour/crossfade.cc @@ -408,7 +408,7 @@ Crossfade::refresh () int32_t new_layer_relation = (int32_t) (_in->layer() - _out->layer()); - if (new_layer_relation * layer_relation < 0) { // different sign, layers rotated + if (new_layer_relation * layer_relation < 0) { // different sign, layers rotated Invalidated (shared_from_this ()); return false; } @@ -438,7 +438,6 @@ Crossfade::refresh () send_signal = true; } else { - Invalidated (shared_from_this ()); return false; } @@ -926,9 +925,3 @@ Crossfade::set_short_xfade_length (nframes_t n) { _short_xfade_length = n; } - -void -Crossfade::invalidate () -{ - Invalidated (shared_from_this ()); /* EMIT SIGNAL */ -}