summaryrefslogtreecommitdiff
path: root/libs/canvas/wave_view.cc
diff options
context:
space:
mode:
authorPaul Davis <paul@linuxaudiosystems.com>2014-06-23 10:06:52 -0400
committerPaul Davis <paul@linuxaudiosystems.com>2014-06-23 10:06:59 -0400
commit71c417948e0a735001ec1181f65800baf141b60d (patch)
treeab9f9169f613236a50900e7f8e361fb535b8c241 /libs/canvas/wave_view.cc
parent07fafac36e4599738009d49ce1ccac8cfa2a7450 (diff)
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
Diffstat (limited to 'libs/canvas/wave_view.cc')
-rw-r--r--libs/canvas/wave_view.cc56
1 files 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<Cairo::ImageSurface>& 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<Cairo::ImageSurface>& 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<Cairo::ImageSurface>& 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