13
0
Commit Graph

24892 Commits

Author SHA1 Message Date
a1cd4f8dfe Fix friend declaration in WaveView code for non-c++11 builds 2017-06-26 17:04:18 +10:00
6e91ee071c 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-26 08:40:47 +10:00
5f30d87fd0 Changes to Editor::visual_changer to support Item/Canvas::prepare_for_render
This is necessary to allow calculation of correct intersection of visible
canvas area and items for the new Item::prepare_for_render() API.

samples_per_pixel must be set first to calculate the new horizontal canvas
position in Editor::set_horizontal_position and then
WaveView::set_samples_per_pixel will eventually call
WaveView::prepare_for_render for those items that are visible on the new canvas
position at the new position.

Or if there is not a change to zoom state then call Canvas::prepare_for_render
explicitly.

Also changes so that each method is only called once during
Editor::visual_changer
2017-06-26 08:40:47 +10:00
4ddf97f5a2 Add Canvas::get_microseconds_since_render_start() method
Initial use is for the WaveView class to determine whether on not to draw the
waveform in the GUI thread.
2017-06-26 08:40:47 +10:00
ab13e87ec2 Add Canvas::get_last_render_start_timestamp method 2017-06-26 08:40:47 +10:00
8538ba35fe Only call Gtk::Widget::queue_draw_area in canvas when item and visible area intersect
Refactor GtkCanvas::request_redraw to use Rect::intersection
2017-06-26 08:40:47 +10:00
c4e31fc322 Add an optional ArdourCanvas::Item::prepare_for_render interface
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-26 08:40:47 +10:00
265f52535a Coalesce visual changes to canvas/items and allow canvas to render
First visual change will be processed as normal and then blocked until the
canvas renders the change. If further visual changes need processing then
Editor::pre_render callback will schedule another expose/redraw/render.

This prevents an issue where idle_visual_changer is called many times in
response to events(keys/motion/etc) but the canvas does not get a chance to
render any but the last one which results in a big pause/jump.

This results in a more responsive canvas and in particular a smoother and more
predictable zooming experience.
2017-06-26 08:40:47 +10:00
dac25b8db9 Add PreRender signal to the canvas
Emitted by the canvas immediately before rendering.
2017-06-26 08:40:47 +10:00
9618b6dcbb Whitespace fixes in canvas.h 2017-06-26 08:40:47 +10:00
f7c134863c Tweak/Change the zoom scale in RulerZoomDrag
This multiplier really should be based on the "responsiveness" of the
canvas..or something. I think this is an improvement for more complex sessions
with many regions.
2017-06-26 08:40:47 +10:00
843d5ffa59 Output the setting of the --no-threaded-waveviews option during configure 2017-06-26 08:40:47 +10:00
de99d7c528 Allow saving state w/o backend
Connections are remembered by ARDOUR::Port to re-establish at load.
2017-06-25 22:03:42 +02:00
e511985ad9 Report Dummy as not available if not running
This fixes an issue with port-connections being polled from the backend
even when it's not running.
2017-06-25 20:53:47 +02:00
cc7ff53e1f Create a deep-copy of MIDI sources when saving snapshots 2017-06-25 01:57:19 +02:00
a1c5d1be43 Extend API to allow calling new_midi_source_path() with source_lock held
This is in preparation for cloning MIDI-sources during snapshot save.
2017-06-25 01:57:19 +02:00
86ee4de7a9 OSC: simplify GUI and make less error-prone 2017-06-24 13:13:53 -07:00
33bfe681c9 OSC: Allow /bank_up to accept -1 as well as 1 so encoder can work. 2017-06-23 18:08:04 -07:00
01e75da96b OSC: make sed_fader work with banking too. 2017-06-23 17:34:22 -07:00
0b21143234 OSC: Add master_send_enable for MB 2017-06-23 17:09:54 -07:00
1fad162256 OSC: redo math for redux control with fewer calls. 2017-06-23 17:09:54 -07:00
2ea14c25ec OSC: Messages too fast at bank_change/refresh slowed down. 2017-06-23 17:09:54 -07:00
nickolas360
2106ab431b Add missing echo in ardev_common.sh.in 2017-06-24 01:34:21 +02:00
64a091ea4b Fix metronome + capture alignment for Mixbus 2017-06-24 01:22:17 +02:00
92fb6325e3 NO-OP: whitespace 2017-06-23 23:43:01 +02:00
d405b2dd6c Mixbus GUI updates (VCA layout, no panners) 2017-06-23 23:43:01 +02:00
2a08746437 OSC: Fix math error in send fader feedback 2017-06-23 14:26:29 -07:00
1138b62fb8 amend 5e5f7a55; re-add wrongly removed variable 2017-06-23 18:15:50 +02:00
104a4c2030 leave a hint for clang's static analyzer 2017-06-23 17:39:20 +02:00
e765d0b3bb Remove Automation Types that should never have existed. 2017-06-23 17:39:20 +02:00
66a3dd7ded MCU: Remove use of AutomationType as ID, part two.
This may need some small tweaks for MB channelstrip to set
print-format (like LV2 plugins would) for cases where the default
value_as_string() differs.
2017-06-23 17:39:20 +02:00
5e5f7a55ee MCU: Remove use of AutomationType as ID, part one. 2017-06-23 17:39:20 +02:00
de73194050 Implement undo for merging VCA-master automation/value on disconnect. 2017-06-23 17:39:20 +02:00
d34fdb98e3 Improve default parameter display 2017-06-23 17:39:20 +02:00
5aad9d9a33 OSC: only show visible plugins (not MB channel strip PI) 2017-06-22 22:40:06 -07:00
d972fa431c Remove unnecessary LocaleGuard header include 2017-06-23 09:12:53 +10:00
d55cb9ba94 Update GUI to follow Slavable API change 2017-06-22 22:04:10 +02:00
9334c99b35 Update Slavable API
Do not use AutomationType to identify parameters, use complete
Evoral::Parameter and Automatable.

For "batch connections", a Slavables needs to implement an API to return
the relevant controls.

This is only a first step towards a more generic Master/Slave framework.
2017-06-22 22:04:10 +02:00
faa52a3349 NO-OP: whitespace 2017-06-22 22:04:10 +02:00
7af5de2074 OSC: Add increment fader. 2017-06-22 12:54:03 -07:00
57e7531b1f OSC: allow mixbuses to show 2017-06-22 10:20:48 -07:00
6180c5a5fc Accommodate newly introduced source(s) in our MSVC project (libpbd) 2017-06-22 17:59:16 +01:00
3baf360733 OSC: use internal_to_interface or reverse 2017-06-22 09:21:51 -07:00
a5836e2922 Remove LocaleGuard from Plugin::get_state
Let the plugin implementation of Plugin::add_state use a LocaleGuard if it is
necessary (VST/LV2). This puts the LocaleGuards where they are required but the
LocaleGuards in Session::set/get_state will mean these LocaleGuards are a noop.
They are still useful for documentation purposes and in case the code is called
from a non-Session context at some point.
2017-06-22 10:48:38 +10:00
8b10ed2478 Remove LocaleGuards from LadspaPlugin::set/add_state
String <-> type conversion is being performed by the pbd/string_convert.h API
via PBD::XMLNode so LocaleGuards are not necessary.
2017-06-22 10:48:38 +10:00
a65c3ef28f Remove unnecessary LocaleGuards from VSTPlugin derived classes
VSTPlugin::set_state and VSTPlugin::add_state methods both already contain
LocaleGuard instances.
2017-06-22 10:48:38 +10:00
90f169881f Remove unused ArdourCanvas::HSV constructor
Using stringstream for this is not locale independant. If this constructor is
needed at a later stage it should be reimplemented.
2017-06-22 10:48:38 +10:00
6d35b3c4e4 Remove locale_guard.h from ardour/ardour.h header
Add to source files that use LocaleGuard

Results in far less recompiling when pbd/locale_guard.h changes
2017-06-22 10:48:38 +10:00
5ddd7a58b6 Remove unused pbd/locale_guard.h header from Gtkmm2ext::Barcontroller class 2017-06-22 10:48:38 +10:00
7e3a970c1e Remove LocaleGuard from ARDOUR_UI::save_ardour_state method
All float <=> string conversions are now done using PBD::to_string/string_to()
in ConfigVariable class or via XMLNode::get/set_property()
2017-06-22 10:48:38 +10:00