ardour/libs/canvas
Tim Mayberry 69c29a5346 Reimplementation of large parts of the WaveView class
The drawing itself should be unchanged but much of the rest of the
implementation has changed. The WaveViewThreads and WaveViewDrawingThread
classes were added and allow multiple drawing threads.

The Item::prepare_for_render interface is implemented by WaveView to enable
queuing draw requests for the drawing threads to process as soon as the state
change occurs during Editor::visual_changer, which often means the images will
be finished by the time they are needed in WaveView::render. This can
significantly reduce total render time and also flickering caused by images not
being ready for display.

If the drawing thread/s cannot finish the request by the time it is required in
WaveView::render then cancel it and draw the WaveViewImage in the GUI thread if
it is likely it can be completed in the current render pass/frame.  This change
also helps reduce the flickering caused by images not being ready with threaded
rendering, but with several drawing threads, drawing in the GUI thread may not
often occur (unless explicitly requested).

Allow unfinished images to be returned from the cache in
WaveView::prepare_for_render so that new draw requests aren't queued for
duplicate images. This reduces the amount of drawing for instance in
compositions where there are many instances of the same sample/waveform
displayed on the canvas as only a single image should be drawn.

Use a random width within a certain range for
WaveView::optimal_image_width_samples so that image drawing is less likely to
occur at the same time (which will cause a spike in render/draw time and
increase the chance of flickering waveforms).

Move implementations of the private WaveView classes into wave_view_private.h
and wave_view_private.cc source files.

Incorporate a fix for limiting the waveview image size to the cairo image size
limit.

Should hopefully Resolve: #6478
2017-06-17 01:03:36 +10:00
..
benchmark NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
canvas Reimplementation of large parts of the WaveView class 2017-06-17 01:03:36 +10:00
doc
macosx/canvas/canvas.xcodeproj copy all XCode project files from Tracks. 2015-06-29 14:18:10 -04:00
MSVCcanvas Accommodate newly introduced source(s) in our MSVC project (cairocanvas) 2017-01-16 15:21:47 +00:00
test NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
arc.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
arrow.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
box.cc some initial bits of work on canvas allocation 2017-02-01 21:58:20 +01:00
build-and-run-benchmark.sh
build-and-run-manual-test.sh
build-and-run-tests.sh
canvas.cc Add Canvas::get_microseconds_since_render_start() method 2017-06-17 01:03:35 +10:00
circle.cc
colors.cc Use locale independent string conversion functions in SVAModifier class 2017-04-19 09:36:55 +10:00
colorspace.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
container.cc Add an optional ArdourCanvas::Item::prepare_for_render interface 2017-06-17 01:03:34 +10:00
curve.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
debug.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
fill.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
flag.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
framed_curve.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
grid.cc canvas::grid - more tweaks and improvements 2017-02-01 21:58:20 +01:00
image.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
item.cc Add an optional ArdourCanvas::Item::prepare_for_render interface 2017-06-17 01:03:34 +10:00
line.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
line_set.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
lookup_table.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
meter.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
Notes
outline.cc
pixbuf.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
poly_item.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
poly_line.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
polygon.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
rectangle.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
root_group.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
ruler.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
run-manual-test.sh
run-tests.sh
scroll_group.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
stateful_image.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00
text.cc Disable Retina/Appple pango text-width workaround 2017-03-11 05:13:17 +01:00
tracking_text.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
types.cc
utils.cc NOOP, remove trailing tabs/whitespace. 2015-10-05 16:17:49 +02:00
wave_view.cc Reimplementation of large parts of the WaveView class 2017-06-17 01:03:36 +10:00
wave_view_private.cc Reimplementation of large parts of the WaveView class 2017-06-17 01:03:36 +10:00
widget.cc Towards a consistent render() API. 2017-03-20 17:12:08 +01:00
wscript Reimplementation of large parts of the WaveView class 2017-06-17 01:03:36 +10:00
xfade_curve.cc remove use of boost::optional to define "undefined" Canvas::Rect, and use Rect::empty instead. 2017-01-19 20:54:54 +01:00