summaryrefslogtreecommitdiff
path: root/libs/waveview
diff options
context:
space:
mode:
authorRobin Gareus <robin@gareus.org>2019-07-29 03:55:31 +0200
committerRobin Gareus <robin@gareus.org>2019-07-29 03:56:35 +0200
commit7b92f54929315654f0a5ac3417c54d5592227870 (patch)
tree81f3cf1689b3f64da2668780899376c359ab277a /libs/waveview
parenta582b24fcddea0fc55b31dd567982227c5e3c890 (diff)
Fix random off-by-one issue when vertically zooming a waveform
To mitigate concurrent rendering, the waveform cache adds a random range of pixels centered around the visible waveform. Alignment is using integer half_width = width_samples / 2; This always aligns the left-edge to the left-most cairo-pixel. This fixes an issue with moving moiree patterns in waveforms when zooming vertically (which invalidates the cache and uses a different random number of pixels),
Diffstat (limited to 'libs/waveview')
-rw-r--r--libs/waveview/wave_view.cc4
-rw-r--r--libs/waveview/waveview/wave_view_private.h2
2 files changed, 3 insertions, 3 deletions
diff --git a/libs/waveview/wave_view.cc b/libs/waveview/wave_view.cc
index 7b7f7c28eb..938e85fd2a 100644
--- a/libs/waveview/wave_view.cc
+++ b/libs/waveview/wave_view.cc
@@ -1159,8 +1159,8 @@ WaveView::render (Rect const & area, Cairo::RefPtr<Cairo::Context> context) cons
double x = self.x0 + image_origin_in_self_coordinates;
double y = self.y0;
context->user_to_device (x, y);
- x = round (x);
- y = round (y);
+ x = floor (x);
+ y = floor (y);
context->device_to_user (x, y);
/* the coordinates specify where in "user coordinates" (i.e. what we
diff --git a/libs/waveview/waveview/wave_view_private.h b/libs/waveview/waveview/wave_view_private.h
index d3cf88c7e7..2a5a94b90b 100644
--- a/libs/waveview/waveview/wave_view_private.h
+++ b/libs/waveview/waveview/wave_view_private.h
@@ -140,7 +140,7 @@ public: // methods
return sample_end - sample_start;
}
- samplepos_t get_center_sample ()
+ samplepos_t get_center_sample () const
{
return sample_start + (get_length_samples() / 2);
}