From 392a7fd2384ef2f77742b34b3b941b37ee505449 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Wed, 4 Jul 2012 21:09:32 +0000 Subject: Don't show previously hidden xfades when finishing a region drag; should fix #4982. git-svn-id: svn://localhost/ardour2/branches/3.0@12987 d708f5d6-7413-0410-9779-e7cbd77b26cf --- gtk2_ardour/audio_region_view.cc | 58 +++++++++++++++++++++++++++++++++++++--- gtk2_ardour/audio_region_view.h | 20 ++++++++++++-- gtk2_ardour/audio_streamview.cc | 17 ++++++++---- gtk2_ardour/audio_streamview.h | 2 +- 4 files changed, 85 insertions(+), 12 deletions(-) (limited to 'gtk2_ardour') diff --git a/gtk2_ardour/audio_region_view.cc b/gtk2_ardour/audio_region_view.cc index c3fc279991..a5688b9fc1 100644 --- a/gtk2_ardour/audio_region_view.cc +++ b/gtk2_ardour/audio_region_view.cc @@ -79,9 +79,11 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView , start_xfade_in (0) , start_xfade_out (0) , start_xfade_rect (0) + , _start_xfade_visible (false) , end_xfade_in (0) , end_xfade_out (0) , end_xfade_rect (0) + , _end_xfade_visible (false) , _amplitude_above_axis(1.0) , fade_color(0) { @@ -100,9 +102,11 @@ AudioRegionView::AudioRegionView (ArdourCanvas::Group *parent, RouteTimeAxisView , start_xfade_in (0) , start_xfade_out (0) , start_xfade_rect (0) + , _start_xfade_visible (false) , end_xfade_in (0) , end_xfade_out (0) , end_xfade_rect (0) + , _end_xfade_visible (false) , _amplitude_above_axis(1.0) , fade_color(0) { @@ -119,9 +123,11 @@ AudioRegionView::AudioRegionView (const AudioRegionView& other, boost::shared_pt , start_xfade_in (0) , start_xfade_out (0) , start_xfade_rect (0) + , _start_xfade_visible (false) , end_xfade_in (0) , end_xfade_out (0) , end_xfade_rect (0) + , _end_xfade_visible (false) , _amplitude_above_axis (other._amplitude_above_axis) , fade_color(0) { @@ -559,6 +565,7 @@ AudioRegionView::reset_fade_in_shape_width (framecnt_t width) start_xfade_in->hide (); start_xfade_out->hide (); start_xfade_rect->hide (); + _start_xfade_visible = false; } } @@ -668,6 +675,7 @@ AudioRegionView::reset_fade_out_shape_width (framecnt_t width) end_xfade_in->hide (); end_xfade_out->hide (); end_xfade_rect->hide (); + _end_xfade_visible = false; } } @@ -1455,6 +1463,7 @@ AudioRegionView::redraw_start_xfade () start_xfade_in->hide (); start_xfade_out->hide (); start_xfade_rect->hide (); + _start_xfade_visible = false; } return; } @@ -1544,6 +1553,8 @@ AudioRegionView::redraw_start_xfade_to (boost::shared_ptr ar, frame start_xfade_out->show (); start_xfade_out->raise_to_top (); + _start_xfade_visible = true; + delete points; } @@ -1561,6 +1572,7 @@ AudioRegionView::redraw_end_xfade () end_xfade_in->hide (); end_xfade_out->hide (); end_xfade_rect->hide (); + _end_xfade_visible = false; } return; } @@ -1652,12 +1664,20 @@ AudioRegionView::redraw_end_xfade_to (boost::shared_ptr ar, framecn end_xfade_out->show (); end_xfade_out->raise_to_top (); + _end_xfade_visible = true; delete points; } void AudioRegionView::hide_xfades () +{ + hide_start_xfade (); + hide_end_xfade (); +} + +void +AudioRegionView::hide_start_xfade () { if (start_xfade_in) { start_xfade_in->hide(); @@ -1668,6 +1688,13 @@ AudioRegionView::hide_xfades () if (start_xfade_rect) { start_xfade_rect->hide (); } + + _start_xfade_visible = false; +} + +void +AudioRegionView::hide_end_xfade () +{ if (end_xfade_in) { end_xfade_in->hide(); } @@ -1677,10 +1704,12 @@ AudioRegionView::hide_xfades () if (end_xfade_rect) { end_xfade_rect->hide (); } + + _end_xfade_visible = false; } void -AudioRegionView::show_xfades () +AudioRegionView::show_start_xfade () { if (start_xfade_in) { start_xfade_in->show(); @@ -1691,6 +1720,13 @@ AudioRegionView::show_xfades () if (start_xfade_rect) { start_xfade_rect->show (); } + + _start_xfade_visible = true; +} + +void +AudioRegionView::show_end_xfade () +{ if (end_xfade_in) { end_xfade_in->show(); } @@ -1700,6 +1736,15 @@ AudioRegionView::show_xfades () if (end_xfade_rect) { end_xfade_rect->show (); } + + _end_xfade_visible = true; +} + +void +AudioRegionView::show_xfades () +{ + show_start_xfade (); + show_end_xfade (); } void @@ -1722,11 +1767,16 @@ AudioRegionView::drag_end () { TimeAxisViewItem::drag_end (); - for (list::iterator i = _hidden_xfades.begin(); i != _hidden_xfades.end(); ++i) { - (*i)->show_xfades (); + for (list::iterator i = _hidden_xfades.first.begin(); i != _hidden_xfades.first.end(); ++i) { + (*i)->show_start_xfade (); } - _hidden_xfades.clear (); + for (list::iterator i = _hidden_xfades.second.begin(); i != _hidden_xfades.second.end(); ++i) { + (*i)->show_end_xfade (); + } + + _hidden_xfades.first.clear (); + _hidden_xfades.second.clear (); } void diff --git a/gtk2_ardour/audio_region_view.h b/gtk2_ardour/audio_region_view.h index ee03fdbc80..5e3240670d 100644 --- a/gtk2_ardour/audio_region_view.h +++ b/gtk2_ardour/audio_region_view.h @@ -119,7 +119,19 @@ class AudioRegionView : public RegionView void redraw_end_xfade (); void hide_xfades (); + void hide_start_xfade (); + void hide_end_xfade (); void show_xfades (); + void show_start_xfade (); + void show_end_xfade (); + + bool start_xfade_visible () const { + return _start_xfade_visible; + } + + bool end_xfade_visible () const { + return _end_xfade_visible; + } protected: @@ -149,10 +161,12 @@ class AudioRegionView : public RegionView ArdourCanvas::Line *start_xfade_in; ArdourCanvas::Line *start_xfade_out; ArdourCanvas::SimpleRect* start_xfade_rect; + bool _start_xfade_visible; ArdourCanvas::Line *end_xfade_in; ArdourCanvas::Line *end_xfade_out; ArdourCanvas::SimpleRect* end_xfade_rect; + bool _end_xfade_visible; boost::shared_ptr gain_line; @@ -203,8 +217,10 @@ private: */ std::vector _data_ready_connections; - /** RegionViews that we hid the xfades for at the start of the current drag */ - std::list _hidden_xfades; + /** RegionViews that we hid the xfades for at the start of the current drag; + * first list is for start xfades, second list is for end xfades. + */ + std::pair, std::list > _hidden_xfades; }; #endif /* __gtk_ardour_audio_region_view_h__ */ diff --git a/gtk2_ardour/audio_streamview.cc b/gtk2_ardour/audio_streamview.cc index 80ed198ab1..6d24dff2ca 100644 --- a/gtk2_ardour/audio_streamview.cc +++ b/gtk2_ardour/audio_streamview.cc @@ -493,12 +493,14 @@ AudioStreamView::hide_all_fades () } /** Hide xfades for regions that overlap ar. - * @return AudioRegionViews that xfades were hidden for. + * @return Pair of lists; first is the AudioRegionViews that start xfades were hidden for, + * second is the AudioRegionViews that end xfades were hidden for. */ -list +pair, list > AudioStreamView::hide_xfades_with (boost::shared_ptr ar) { - list hidden; + list start_hidden; + list end_hidden; for (list::iterator i = region_views.begin(); i != region_views.end(); ++i) { AudioRegionView* const arv = dynamic_cast(*i); @@ -507,14 +509,19 @@ AudioStreamView::hide_xfades_with (boost::shared_ptr ar) case Evoral::OverlapNone: break; default: + if (arv->start_xfade_visible ()) { + start_hidden.push_back (arv); + } + if (arv->end_xfade_visible ()) { + end_hidden.push_back (arv); + } arv->hide_xfades (); - hidden.push_back (arv); break; } } } - return hidden; + return make_pair (start_hidden, end_hidden); } void diff --git a/gtk2_ardour/audio_streamview.h b/gtk2_ardour/audio_streamview.h index a36c57b552..a3f7c63559 100644 --- a/gtk2_ardour/audio_streamview.h +++ b/gtk2_ardour/audio_streamview.h @@ -59,7 +59,7 @@ class AudioStreamView : public StreamView void show_all_fades (); void hide_all_fades (); - std::list hide_xfades_with (boost::shared_ptr ar); + std::pair, std::list > hide_xfades_with (boost::shared_ptr ar); RegionView* create_region_view (boost::shared_ptr, bool, bool); -- cgit v1.2.3