From 0e2ed90cfcfc0062f6b3cbd9feb36b3a0beef4f4 Mon Sep 17 00:00:00 2001 From: nick_m Date: Sun, 10 Jul 2016 02:11:36 +1000 Subject: Revert incorrect 'optimisation' from 4f7a4cd2333. - fixes regression in stacked layering display. --- gtk2_ardour/region_view.cc | 47 ++++++++++++++++++++++++++++++---------------- gtk2_ardour/streamview.cc | 2 +- 2 files changed, 32 insertions(+), 17 deletions(-) diff --git a/gtk2_ardour/region_view.cc b/gtk2_ardour/region_view.cc index 4f904d9f2b..16bf44a689 100644 --- a/gtk2_ardour/region_view.cc +++ b/gtk2_ardour/region_view.cc @@ -775,27 +775,42 @@ RegionView::update_coverage_frames (LayerDisplay d) /* the color that will be used to show parts of regions that will not be heard */ uint32_t const non_playing_color = UIConfiguration::instance().color_mod ("covered region", "covered region base"); - t = pl->find_next_region_boundary (t, 1); - /* is this region is on top at time t? */ - bool const new_me = (pl->top_unmuted_region_at (t) == _region); + while (t < end) { - /* start off any new rect, if required */ - if (cr == 0 || me != new_me) { - cr = new ArdourCanvas::Rectangle (group); - _coverage_frames.push_back (cr); - cr->set_x0 (trackview.editor().sample_to_pixel (t - position)); - cr->set_y0 (1); - cr->set_y1 (_height + 1); - cr->set_outline (false); - cr->set_ignore_events (true); - if (new_me) { - cr->set_fill_color (UINT_RGBA_CHANGE_A (non_playing_color, 0)); - } else { - cr->set_fill_color (non_playing_color); + t++; + + /* is this region is on top at time t? */ + bool const new_me = (pl->top_unmuted_region_at (t) == _region); + /* finish off any old rect, if required */ + if (cr && me != new_me) { + cr->set_x1 (trackview.editor().sample_to_pixel (t - position)); } + + /* start off any new rect, if required */ + if (cr == 0 || me != new_me) { + cr = new ArdourCanvas::Rectangle (group); + _coverage_frames.push_back (cr); + cr->set_x0 (trackview.editor().sample_to_pixel (t - position)); + cr->set_y0 (1); + cr->set_y1 (_height + 1); + cr->set_outline (false); + cr->set_ignore_events (true); + if (new_me) { + cr->set_fill_color (UINT_RGBA_CHANGE_A (non_playing_color, 0)); + } else { + cr->set_fill_color (non_playing_color); + } + } + t = pl->find_next_region_boundary (t, 1); + if (t < 0) { + break; + } + me = new_me; } + t = pl->find_next_region_boundary (t, 1); + if (cr) { /* finish off the last rectangle */ cr->set_x1 (trackview.editor().sample_to_pixel (end - position)); diff --git a/gtk2_ardour/streamview.cc b/gtk2_ardour/streamview.cc index be4b3949df..02aa5168df 100644 --- a/gtk2_ardour/streamview.cc +++ b/gtk2_ardour/streamview.cc @@ -297,7 +297,7 @@ StreamView::playlist_layered (boost::weak_ptr wtr) if (_layer_display == Stacked) { update_contents_height (); /* tricky. playlist_changed() does this as well, and its really inefficient. */ - //update_coverage_frames (); + update_coverage_frames (); } else { /* layering has probably been modified. reflect this in the canvas. */ layer_regions(); -- cgit v1.2.3