X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=libs%2Fcanvas%2Fxfade_curve.cc;h=e93331e7f987ce8430fb8e5af573d7a137a48e8d;hb=a66ad184022dd759335648d86f40e3c3ae68cf52;hp=0d7d7a5245b76075ee5a8b009729036bdefdea02;hpb=46c83693284ece4a732d26e62113ea4ac584d539;p=ardour.git diff --git a/libs/canvas/xfade_curve.cc b/libs/canvas/xfade_curve.cc index 0d7d7a5245..e93331e7f9 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 - 1; 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();