Revert incorrect 'optimisation' from 4f7a4cd2333.
authornick_m <mainsbridge@gmail.com>
Sat, 9 Jul 2016 16:11:36 +0000 (02:11 +1000)
committernick_m <mainsbridge@gmail.com>
Sat, 9 Jul 2016 16:18:38 +0000 (02:18 +1000)
- fixes regression in stacked layering display.

gtk2_ardour/region_view.cc
gtk2_ardour/streamview.cc

index 4f904d9f2b3b62b6f96b94c27ff42054b5aa09db..16bf44a6897a50b83dcfb7e541235e2524e1eeda 100644 (file)
@@ -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));
index be4b3949dfabe0feacf1c7bc9648e562b5577cc7..02aa5168dfdd607726f48f9ed2277df33a4f825f 100644 (file)
@@ -297,7 +297,7 @@ StreamView::playlist_layered (boost::weak_ptr<Track> 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();