X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=libs%2Fcanvas%2Fxfade_curve.cc;h=c8e477697c47679f2ebeb520830a2b69001f6f2c;hb=440618b463ff88bd42847456b1470479ce25871d;hp=0d7d7a5245b76075ee5a8b009729036bdefdea02;hpb=14ffde884fe3bb2521b2e44998804f5169760aa2;p=ardour.git diff --git a/libs/canvas/xfade_curve.cc b/libs/canvas/xfade_curve.cc index 0d7d7a5245..c8e477697c 100644 --- a/libs/canvas/xfade_curve.cc +++ b/libs/canvas/xfade_curve.cc @@ -35,7 +35,7 @@ static const bool show_bg_fades = false; #else static const bool show_bg_fades = true; #endif - + XFadeCurve::XFadeCurve (Canvas* c) : Item (c) , points_per_segment (32) @@ -178,14 +178,15 @@ XFadeCurve::get_path(Rect const & area, Cairo::RefPtr context, C Points::size_type left = 0; Points::size_type right = c.n_samples - 1; + assert (left < right); // we should really really do a binary search rather than iterate for (Points::size_type idx = 0; idx < c.n_samples - 1; ++idx) { left = idx; window_space = item_to_window (Duple (c.samples[idx].x, 0.0), false); if (window_space.x >= area.x0) break; } - for (Points::size_type idx = c.n_samples; idx >= left;) { - --idx; + for (Points::size_type idx = c.n_samples; right > left;) { + if (--idx <= left) break; window_space = item_to_window (Duple (c.samples[idx].x, 0.0), false); if (window_space.x <= area.x1) break; right = idx; @@ -286,7 +287,7 @@ XFadeCurve::render (Rect const & area, Cairo::RefPtr context) co if (IS_START || show_background_fade) { set_source_rgba (context, IS_START ? _outline_color : outline_shaded); context->set_line_width (IS_START ? 1.0 : .5); - + context->begin_new_path (); context->append_path (*path_in); context->stroke();