summaryrefslogtreecommitdiff
path: root/libs/canvas
AgeCommit message (Collapse)Author
2017-07-19MSVC changes needed to implement the new 'waveview' libraryJohn Emmas
2017-07-18Fix NSGLView invalidationRobin Gareus
2017-07-17Purify libcanvas, remove libardour dependencyRobin Gareus
A canvas is just a canvas. Move WaveView into its own library.
2017-07-17Clean up library inheritance (colors.h, utils.h)Robin Gareus
make libwidget independent of libcanvas. Confine basics to pbd and gtkmm2ext.
2017-06-29Accommodate newly introduced source(s) in our MSVC project (cairocanvas)John Emmas
2017-06-28fix OSX builds (llmath compat)Robin Gareus
2017-06-26Fix friend declaration in WaveView code for non-c++11 buildsTim Mayberry
2017-06-26Reimplementation of large parts of the WaveView classTim Mayberry
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-26Add Canvas::get_microseconds_since_render_start() methodTim Mayberry
Initial use is for the WaveView class to determine whether on not to draw the waveform in the GUI thread.
2017-06-26Add Canvas::get_last_render_start_timestamp methodTim Mayberry
2017-06-26Only call Gtk::Widget::queue_draw_area in canvas when item and visible area ↵Tim Mayberry
intersect Refactor GtkCanvas::request_redraw to use Rect::intersection
2017-06-26Add an optional ArdourCanvas::Item::prepare_for_render interfaceTim Mayberry
Called when an item has requested a redraw and intersects with visible canvas area. Also add Canvas::prepare_for_render that will call Item::prepare_for_render for items visible on the canvas.
2017-06-26Add PreRender signal to the canvasTim Mayberry
Emitted by the canvas immediately before rendering.
2017-06-26Whitespace fixes in canvas.hTim Mayberry
2017-06-22Remove unused ArdourCanvas::HSV constructorTim Mayberry
Using stringstream for this is not locale independant. If this constructor is needed at a later stage it should be reimplemented.
2017-06-22Remove LocaleGuards from SVAModifier and HSV classesTim Mayberry
float <=> string conversion now done using PBD::to_string/string_to so LocaleGuards are no longer needed.
2017-05-14Fix out-of-bounds waveform image rendering.5.9Robin Gareus
With large sample-rates and high-zoom-level the minimal request-size or at least 1/10sed can exceed the max image size supported by cairo. e.g. @192kSPS; 100ms = 19200 samples. * 1 sample/pixel, * 2 (left/right) = 38400px > 2^15px.
2017-04-19Use PBD::to_string from pbd/string_convert.h in WaveView debug codeTim Mayberry
2017-04-19Use locale independent string conversion functions in SVAModifier classTim Mayberry
2017-04-17Stop tooltip timeout when a canvas-widget or item is hidden.Robin Gareus
2017-03-21consolidate NSGLViewRobin Gareus
2017-03-21Allow to selectively use NSGLView CanvasRobin Gareus
Various GdkEvents are not yet handled correctly, eg. unpacking a widget from its container does not unmap it, nor are remaining widgets in the contained re-positioned (size allocation does not change, nor does the mapping). This affects eg. Mixbus Strips
2017-03-20Towards a consistent render() API.Robin Gareus
This fixes an -Woverloaded-virtual ambiguity introduced in b5e613d45 void render (cairo_t*, cairo_rectagle*) void render (Cairo::RefPtr<Cairo::Context> const&, cairo_rectangle_t*) ArdourCanvas prefers cairomm and CairoWidget itself uses Cairo::Context, this improves overall API consistency.
2017-03-20Forward un/map events to NSGLViewRobin Gareus
2017-03-20Move NSGlView into libgtkmm2extRobin Gareus
This allows to re-use the concept with CairoWidget
2017-03-20Fix OSX canvas when used without openGL NSViewRobin Gareus
2017-03-20Use NSGLView with patched gdkRobin Gareus
Special case Ardour's Canvas NSView to forward gdk-events which are otherwise special-cased to read AU-views..
2017-03-19Prepare NSView/OpenGL Canvas (to speed up rendering on [mac]OS[X]Robin Gareus
This avoids Coregraphics (cairo_quartz_surface..) competely. The openGL texture bypasses CG's slow argb_image and CGSColorMask methods.
2017-03-17Snow White and the Pharaoh (mac rendering)Robin Gareus
Once upon a time there was a beautiful Apple tree in palace of GtkAnkhAmun in Cairo...
2017-03-17NO-OP: whitespaceRobin Gareus
2017-03-11Disable Retina/Appple pango text-width workaroundRobin Gareus
Fix right-alignment (tempo-markers) and oversized bounding-boxes. _width_correction should be removed after testing on various systems.
2017-02-01canvas::grid - more tweaks and improvementsPaul Davis
2017-02-01canvas::grid : compute all row/col extentsPaul Davis
2017-02-01basics of row/col span for Canvas::GridPaul Davis
2017-02-01change Grid API to avoid unnecessary Duple and open door for row/col spanPaul Davis
2017-02-01clear up some CSS padding/margin confusion, and add row/col spacingPaul Davis
2017-02-01canvas::grid starts being able to do its job a littlePaul Davis
2017-02-01add basic data members and methods for adding an explicit size allocation ↵Paul Davis
for Canvas::Item
2017-02-01some initial bits of work on canvas allocationPaul Davis
2017-01-25yet another case of misplaced parentheses during the removal of ↵Paul Davis
boost::optional from Canvas
2017-01-25another case of misplaced parentheses during the removal of boost::optional ↵Paul Davis
from Canvas
2017-01-24This wasn't supposed to be pushed to master.Paul Davis
Revert "add basic data members and methods for adding an explicit size allocation for Canvas::Item" This reverts commit d1c1d8df614672b00a9835ae04566b12d21be697.
2017-01-24add basic data members and methods for adding an explicit size allocation ↵Paul Davis
for Canvas::Item
2017-01-19remove use of boost::optional to define "undefined" Canvas::Rect, and use ↵Paul Davis
Rect::empty instead. This commit includes Rect::operator bool() which might be a candidate for removal in a future commit, in an attempt to make the meaning clearer
2017-01-19fix up Canvas::Grid child layoutPaul Davis
2017-01-19correct translation matrix for Canvas::WidgetPaul Davis
2017-01-19do not add items twice to their canvas parent!Paul Davis
2017-01-16Accommodate newly introduced source(s) in our MSVC project (cairocanvas)John Emmas
2017-01-15canvas::grid: get padding and margin to work; remove some debug outputPaul Davis
2017-01-15get grid layout workingPaul Davis