From 71c417948e0a735001ec1181f65800baf141b60d Mon Sep 17 00:00:00 2001 From: Paul Davis Date: Mon, 23 Jun 2014 10:06:52 -0400 Subject: [PATCH] fix logic error that meant one side of the waveform outline is not drawn; draw zero line before outline, for better effects with low amplitude waves --- libs/canvas/wave_view.cc | 56 +++++++++++++++++++--------------------- 1 file changed, 27 insertions(+), 29 deletions(-) diff --git a/libs/canvas/wave_view.cc b/libs/canvas/wave_view.cc index 3e131487b6..7db6522d54 100644 --- a/libs/canvas/wave_view.cc +++ b/libs/canvas/wave_view.cc @@ -491,8 +491,20 @@ WaveView::draw_image (Cairo::RefPtr& image, PeakData* _peak context->stroke (); + /* zero line goes next, so that the outline/clip is on top of it + */ + + if (show_zero_line()) { + set_source_rgba (context, _zero_color); + context->set_line_width (1.0); + context->move_to (0, y_extent (0.0) + 0.5); + context->line_to (n_peaks, y_extent (0.0) + 0.5); + context->stroke (); + } + /* now add dots to the top and bottom of each line (this is - * modelled on pyramix, except that we add clipping indicators. + * modelled on pyramix, except that we also visual indicate + * clipping if it occurs). * * the height of the clip-indicator should be at most 7 pixels, * or 5% of the height of the waveview item. @@ -501,15 +513,11 @@ WaveView::draw_image (Cairo::RefPtr& image, PeakData* _peak const double clip_height = min (7.0, ceil (_height * 0.05)); set_source_rgba (context, _outline_color); - + for (int i = 0; i < n_peaks; ++i) { + context->move_to (i, tips[i].top); - - bool show_top_clip = _global_show_waveform_clipping && - ((_shape == WaveView::Rectified && (tips[i].clip_max || tips[i].clip_min)) || - tips[i].clip_max); - - if (show_top_clip) { + if (_global_show_waveform_clipping && ((_shape == WaveView::Rectified && (tips[i].clip_max || tips[i].clip_min)) || tips[i].clip_max)) { /* clip-indicating upper terminal line */ set_source_rgba (context, _clip_color); context->rel_line_to (0, clip_height); @@ -521,30 +529,20 @@ WaveView::draw_image (Cairo::RefPtr& image, PeakData* _peak context->stroke (); } - - if (_global_show_waveform_clipping && _shape != WaveView::Rectified) { - context->move_to (i, tips[i].bot); - if (tips[i].clip_min) { - /* clip-indicating lower terminal line */ - set_source_rgba (context, _clip_color); - context->rel_line_to (0, -clip_height); - context->stroke (); - set_source_rgba (context, _outline_color); - } else { - /* normal lower terminal dot */ - context->rel_line_to (0, -1.0); - context->stroke (); - } + context->move_to (i, tips[i].bot); + if (_global_show_waveform_clipping && _shape != WaveView::Rectified && tips[i].clip_min) { + /* clip-indicating lower terminal line */ + set_source_rgba (context, _clip_color); + context->rel_line_to (0, -clip_height); + context->stroke (); + set_source_rgba (context, _outline_color); + } else { + /* normal lower terminal dot */ + context->rel_line_to (0, -1.0); + context->stroke (); } } - if (show_zero_line()) { - set_source_rgba (context, _zero_color); - context->set_line_width (1.0); - context->move_to (0, y_extent (0.0) + 0.5); - context->line_to (n_peaks, y_extent (0.0) + 0.5); - context->stroke (); - } } void