diff options
author | Carl Hetherington <carl@carlh.net> | 2009-08-26 01:49:08 +0000 |
---|---|---|
committer | Carl Hetherington <carl@carlh.net> | 2009-08-26 01:49:08 +0000 |
commit | 8934ff78678cafeb03c398e7add299f2bc1a730d (patch) | |
tree | 9f420cbce2cc9e6b4caf33b523098caeaa54609b /gtk2_ardour/audio_streamview.cc | |
parent | ae6dbb836cc1ab1bcbc21883f282361c43f10883 (diff) |
Reintroduce crossfade views for tracks in stacked region mode.
git-svn-id: svn://localhost/ardour2/branches/3.0@5594 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/audio_streamview.cc')
-rw-r--r-- | gtk2_ardour/audio_streamview.cc | 45 |
1 files changed, 34 insertions, 11 deletions
diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 99755d6a97..901828bb4e 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -313,7 +313,7 @@ AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade) CrossfadeViewList::iterator i = crossfade_views.find (crossfade); if (i != crossfade_views.end()) { - if (!crossfades_visible || _layer_display == Stacked) { + if (!crossfades_visible) { i->second->hide(); } else { i->second->show (); @@ -344,9 +344,11 @@ AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade) cv->set_valid (true); crossfade->Invalidated.connect (mem_fun (*this, &AudioStreamView::remove_crossfade)); crossfade_views[cv->crossfade] = cv; - if (!_trackview.session().config.get_xfades_visible() || !crossfades_visible || _layer_display == Stacked) { + if (!_trackview.session().config.get_xfades_visible() || !crossfades_visible) { cv->hide (); } + + update_content_height (cv); } void @@ -380,7 +382,7 @@ AudioStreamView::redisplay_diskstream () // Flag crossfade views as invalid for (xi = crossfade_views.begin(); xi != crossfade_views.end(); ++xi) { xi->second->set_valid (false); - if (xi->second->visible() && _layer_display != Stacked) { + if (xi->second->visible()) { xi->second->show (); } } @@ -771,7 +773,7 @@ void AudioStreamView::reveal_xfades_involving (AudioRegionView& rv) { 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) { + if (i->second->crossfade->involves (rv.audio_region()) && i->second->visible()) { i->second->show (); } } @@ -799,14 +801,35 @@ void AudioStreamView::update_contents_height () { StreamView::update_contents_height (); - + for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) { - if (_layer_display == Overlaid) { - i->second->show (); - i->second->set_height (height); - } else { - i->second->hide (); - } + update_content_height (i->second); + } +} + +void +AudioStreamView::update_content_height (CrossfadeView* cv) +{ + cv->show (); + + if (_layer_display == Overlaid) { + + cv->set_y (0); + cv->set_height (height); + + } else { + + layer_t const inl = cv->crossfade->in()->layer (); + layer_t const outl = cv->crossfade->out()->layer (); + + layer_t const high = max (inl, outl); + layer_t const low = min (inl, outl); + + const double h = child_height (); + + cv->set_y ((_layers - high - 1) * h); + cv->set_height ((high - low + 1) * h); + } } |