Provide an image if there are no peaks.
This commit is contained in:
parent
0f2ead3d6b
commit
69a6c4d747
|
@ -203,6 +203,7 @@ private:
|
||||||
void get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start, framepos_t end, double& image_offset) const;
|
void get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start, framepos_t end, double& image_offset) const;
|
||||||
|
|
||||||
ArdourCanvas::Coord y_extent (double, bool) const;
|
ArdourCanvas::Coord y_extent (double, bool) const;
|
||||||
|
void draw_absent_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int) const;
|
||||||
void draw_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int) const;
|
void draw_image (Cairo::RefPtr<Cairo::ImageSurface>&, ARDOUR::PeakData*, int) const;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
@ -349,6 +349,38 @@ WaveView::y_extent (double s, bool /*round_to_lower_edge*/) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
WaveView::draw_absent_image (Cairo::RefPtr<Cairo::ImageSurface>& image, PeakData* _peaks, int n_peaks) const
|
||||||
|
{
|
||||||
|
Cairo::RefPtr<Cairo::ImageSurface> stripe = Cairo::ImageSurface::create (Cairo::FORMAT_A8, n_peaks, _height);
|
||||||
|
|
||||||
|
Cairo::RefPtr<Cairo::Context> stripe_context = Cairo::Context::create (stripe);
|
||||||
|
stripe_context->set_antialias (Cairo::ANTIALIAS_NONE);
|
||||||
|
|
||||||
|
uint32_t stripe_separation = 150;
|
||||||
|
double start = - floor (_height / stripe_separation) * stripe_separation;
|
||||||
|
int stripe_x = 0;
|
||||||
|
|
||||||
|
while (start < n_peaks) {
|
||||||
|
|
||||||
|
stripe_context->move_to (start, 0);
|
||||||
|
stripe_x = start + _height;
|
||||||
|
stripe_context->line_to (stripe_x, _height);
|
||||||
|
start += stripe_separation;
|
||||||
|
}
|
||||||
|
|
||||||
|
stripe_context->set_source_rgba (1.0, 1.0, 1.0, 1.0);
|
||||||
|
stripe_context->set_line_cap (Cairo::LINE_CAP_SQUARE);
|
||||||
|
stripe_context->set_line_width(50);
|
||||||
|
stripe_context->stroke();
|
||||||
|
|
||||||
|
Cairo::RefPtr<Cairo::Context> context = Cairo::Context::create (image);
|
||||||
|
|
||||||
|
context->set_source_rgba (1.0, 1.0, 0.0, 0.3);
|
||||||
|
context->mask (stripe, 0, 0);
|
||||||
|
context->fill ();
|
||||||
|
}
|
||||||
|
|
||||||
struct LineTips {
|
struct LineTips {
|
||||||
double top;
|
double top;
|
||||||
double bot;
|
double bot;
|
||||||
|
@ -761,14 +793,19 @@ WaveView::get_image (Cairo::RefPtr<Cairo::ImageSurface>& image, framepos_t start
|
||||||
|
|
||||||
boost::scoped_array<ARDOUR::PeakData> peaks (new PeakData[n_peaks]);
|
boost::scoped_array<ARDOUR::PeakData> peaks (new PeakData[n_peaks]);
|
||||||
|
|
||||||
_region->read_peaks (peaks.get(), n_peaks,
|
framecnt_t peaks_read;
|
||||||
|
peaks_read = _region->read_peaks (peaks.get(), n_peaks,
|
||||||
sample_start, sample_end - sample_start,
|
sample_start, sample_end - sample_start,
|
||||||
_channel,
|
_channel,
|
||||||
_samples_per_pixel);
|
_samples_per_pixel);
|
||||||
|
|
||||||
image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, _height);
|
image = Cairo::ImageSurface::create (Cairo::FORMAT_ARGB32, n_peaks, _height);
|
||||||
|
|
||||||
draw_image (image, peaks.get(), n_peaks);
|
if (peaks_read > 0) {
|
||||||
|
draw_image (image, peaks.get(), n_peaks);
|
||||||
|
} else {
|
||||||
|
draw_absent_image (image, peaks.get(), n_peaks);
|
||||||
|
}
|
||||||
|
|
||||||
_image_cache[_region->audio_source ()].push_back (CacheEntry (_channel, _height, _region_amplitude, _fill_color, sample_start, sample_end, image));
|
_image_cache[_region->audio_source ()].push_back (CacheEntry (_channel, _height, _region_amplitude, _fill_color, sample_start, sample_end, image));
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue
Block a user