1
0
Fork 0
mirror of https://github.com/juce-framework/JUCE.git synced 2026-01-25 02:04:23 +00:00
Commit graph

339 commits

Author SHA1 Message Date
reuk
19ddbe2368
Warnings: Fix missing-prototypes warnings 2022-04-22 14:18:48 +01:00
Tom Poole
dea3fe60e4 Update copyright banners 2022-04-04 12:36:32 +01:00
reuk
f77b286b8c
VST3 Client: Work around broken editor resizing in Blue Cat's PatchWork 2022-04-01 16:41:48 +01:00
reuk
cad155bf1c
VST3 Client: Make window sizing slightly more robust in Live
The following was observed for a VST3 plugin hosted in Live 11.1 with
auto-scaling disabled:

- It never calls setContentScaleFactor on the plugin's UI, so the
  wrapper has to check the current display on a timer and update the
  current scale factor when necessary.

- It calls canResize on the plugin view after opening it, but doesn't
  seem to respect the result of this call. According to the VST3
  documentation, a host is supposed to only call checkSizeConstraint
  during a live resize operation (which should only happen if the plugin
  reports it can resize), but Live calls this function every time the
  user drags the editor. It also passes the result of this function to
  onSize, whether or not checkSizeConstraints reported success.

- When dragging an editor between displays, Live will continue to call
  checkSizeConstraint and onSize with the editor’s old size in physical
  pixels. In some cases, JUCE's "scale factor check" timer callback
  fires, resizes the view to the correct size, and then Live
  asynchronously calls onSize again with the editor's old size in
  physical pixels, resulting in the editor being set to the wrong
  logical size.

This patch ensures that checkSizeConstraint always returns the current
size of a nonResizable editor. This means that the logical size of the
editor should not change when the result of checkSizeContraint is used
to resize the window.
2022-04-01 16:41:48 +01:00
reuk
bb2b36a253
VST3 Client: Properly map between VST3 and JUCE layouts 2022-03-23 16:51:40 +00:00
reuk
18300abde9
VST3 Client: Add host API checks to setBusArrangements and activateBus 2022-03-23 16:51:39 +00:00
reuk
ebac835673
Fix some deprecation warnings 2022-03-22 17:27:54 +00:00
reuk
afe5199848
AudioProcessorParameter: Add new ParameterID and Attributes types 2022-03-03 13:47:05 +00:00
reuk
89a7d05180
VST3 Client: Avoid calling performEdit during setState
The host is guaranteed to re-scan all parameter values after setting a
new state on the plugin, so there's no need to notify the host about
parameter changes that happen during the setState call.

This also avoids a problem where Bitwig would complain about invalid
parameter IDs in 'engine.log' when loading projects containing JUCE
VST3s. These log messages were produced because a call to setState was
made before Bitwig registered the plugin's parameters, and the setState
call in turn called performEdit with parameter IDs that were yet to be
registered.
2022-02-23 10:56:11 +00:00
reuk
068dffdb8c
AudioProcessorEditorHostContext: Fix naming of getContextMenuForParameter 2022-02-18 16:43:25 +00:00
reuk
3f315ddd00 Plugin clients: Fix bypass behaviours to match getBypassParameter() documentation 2022-02-07 14:24:11 +00:00
reuk
bd52350c00
VST3 Wrapper: Avoid calling processBlock when there is no audio input/output 2022-01-17 10:58:18 +00:00
reuk
640194c878
MinGW: Improve compatibility
With this patch applied, the DemoRunner should build under MinGW, and be
(nearly) feature-complete compared to the MSVC build.

Specifically, when building with MinGW:
- Adds support for accessibility
- Fixes build issues in the juce_video module
- Fixes a link issue in the VST3 wrapper when VST3_CAN_REPLACE_VST2 is
  defined
- Adds support for the new-style native FileChooser
- Tidies up some other low-severity warnings

Known issues:
- Direct2D rendering is still not supported when building with MinGW due
  to ABI compatibilities.
2022-01-17 10:58:18 +00:00
reuk
6f80be1edb
VST3 Client: Ensure editor scale is correct immediately after creation
This fixes a bug where selecting "Always on top" in the plugin editor
window in Cubase 11 on Windows 11 on a display with > 100% scale would
cause the editor to display with the wrong scale factor.

It seems that Cubase calls removed() then attached() on the plugin view,
destroying and recreating the editor wrapper component. The editor
opened with 100% scale, but requests from the host to set the "real"
scale factor were ignored because the JUCE wrapper thought that the
requested scale had already been applied.

Applying the cached scale factor directly after constructing the editor
keeps everything in a consistent state, and seems to resolve the issue.
2021-11-24 16:20:36 +00:00
reuk
3850a2bb20
AudioPlayHead: Update wrappers to use new FrameRate type 2021-11-19 16:35:22 +00:00
reuk
4ca923a34b
NSViewComponentPeer: Allow mouse events to reach unfocused windows
This change allows mouse events (including enter and exit events) to
reach unfocused views on macOS. This matches the behaviour of unfocused
windows on Linux and Windows, where components paint in their "hovered"
states even when the application window is in the background.

As a byproduct of using tracking areas on macOS, we can remove the fake
mouse move generator.
2021-10-27 16:33:37 +01:00
reuk
4c2dba0822
VST3 Client: Ensure that all programs can be selected via parameter in hosts
Hosts such as REAPER normalise the program parameter value by dividing
the program value by the step count, rather than going via the
parameter's toNormalized function. To be compatible, we should use the
same scaling technique. At time of writing, the coversion process is
detailed under the heading "Conversion of normalized values" on this
page:

https://developer.steinberg.help/display/VST/Parameters+and+Automation
2021-10-26 16:52:15 +01:00
attila
63ac579c1b VST3 Client: Fix build when JUCE_VST3_CAN_REPLACE_VST2 is enabled 2021-10-14 18:56:18 +02:00
reuk
47dcc31e77
VST3 Client: Allow setting latency from inside prepareToPlay 2021-10-07 14:31:26 +01:00
reuk
294caba2b5
VST3: Add dirty-state set/get
Adds a mechanism to notify the host that the plugin state needs saving,
using updateHostDisplay.

Also allows JUCE hosts to detect when a plugin needs its state saving
via the AudioProcessorListener.
2021-10-06 16:59:07 +01:00
reuk
afa6465098
UB Sanitizer: Avoid warnings in third party code, with clang 2021-09-28 11:31:50 +01:00
reuk
d0615041f0
Plugin clients: Avoid notifying listeners when parameters have not changed 2021-09-28 11:31:49 +01:00
reuk
ea250b3655
VST3 Client: Change VST3 native menu so that its position is specified in logical pixels 2021-09-28 11:31:48 +01:00
reuk
cfec0b5356
GenericAudioProcessorEditor: Add support for grouped parameters 2021-09-27 15:44:48 +01:00
reuk
b2a51eb253
VST3 Client: Avoid segfaults when updating program and bypass parameters
Previously, updating the program or bypass parameter could cause an
out-of-bounds access into the parameter value cache. This is because
AudioProcessorParameter::getParameterIndex() was used to index into the
cache, but the parameter index could be negative for parameters that
had not been added to the AudioProcessor.

We now use the appropriate index in the cache for parameters that
have not been added to the AudioProcessor.
2021-09-07 11:30:19 +01:00
reuk
8f29b2cb83
VST3: Allow plugins to designate the first input bus as Aux rather than Main
To use this feature, derive your AudioProcessor from
VST3ClientExtensions and override getPluginHasMainInput() to return
false. The main input bus will then be designated as an Aux bus, rather
than a Main bus.

This is mainly useful for synth plugins like vocoders, which may need a
sidechain audio input, but which should replace all audio on the channel
with the output of the synth, rather than mixing with the audio input.
2021-07-27 15:10:53 +01:00
ed
4fd0401752 VST3: Fix editor creation in Adobe Premiere Pro
See commit message of a1337a38 for more details
2021-07-22 16:33:42 +01:00
attila
7c68dd3709 VST3 Client: Avoid allocation in processParameterChanges() 2021-07-22 12:18:11 +02:00
attila
570e173583 VST3 Client: Fix allocation on audio thread caused by PluginHostType ctor 2021-06-25 15:05:19 +00:00
reuk
c3ab3eb77f
VST3 Client: Implement IProcessContextRequirements
This function is required by the Steinberg VST3 validator from VST 3.7
onwards.
2021-06-21 19:05:40 +01:00
reuk
bfb521b610
AudioProcessorEditor: Allow showing a host-provided parameter menu in VST3 plugins 2021-06-11 11:12:35 +01:00
reuk
63a40188d9
AudioProcessor: Add extensions API for VST3 clients 2021-06-11 10:53:26 +01:00
reuk
75922cac38
VST3 Client: Ensure main buses are enabled by default when using PreferredChannelConfigurations 2021-06-04 17:44:02 +01:00
reuk
712b14a272
VST3 Client: Normalise and denormalise program parameter correctly 2021-06-04 17:44:02 +01:00
reuk
77ad8b23bb
VST3 Client: Enable support for more FrameRateTypes, and set editOriginTime correctly 2021-06-04 13:04:44 +01:00
reuk
31a7c62baf
Windows: Fix and suppress some analysis warnings
This fixes warnings that are emitted when building with the `-analyze`
flag enabled.
2021-05-26 15:34:26 +01:00
reuk
6db900926b
VST3 Client: Fix issue where host failed to receive latency change notifications
In cases where a VST3 plugin set a non-zero latency in its
prepareToPlay, and then set its latency to 0 later on, the host was not
notified about the latency change.
2021-05-21 16:30:18 +01:00
reuk
2f04d6a846
VST3 Client: Fix leak caused by unnecessary manual refcounting
In older versions of the VST3SDK, hostContext is a raw pointer,
in newer versions it's a smart pointer. If we do manual
refcounting with the smart pointer, we may cause leaks.
2021-05-21 16:29:48 +01:00
reuk
47c7751750
VST3 Host: Avoid calling IMidiMapping functions on the audio thread 2021-05-12 11:14:35 +01:00
reuk
f35c2d90e2
VST3 Host: Ensure AudioProcessor parameter indices are used when appropriate
Previously, IEditController parameter indices were being used to index
into the AudioProcessor parameter array, but these parameter indices are
not guaranteed to point to the same parameter (parameter groups may
cause reordering on JUCE's side). Now, we use the IEditController
indices universally.
2021-05-06 16:04:22 +01:00
ed
a8aafed53d Removed some unnecessary virtual keywords 2021-04-27 15:56:01 +01:00
ed
a1337a3863 VST3: Workaround incorrect VST3 editor ref-count bug in Adobe Audition
Audition incorrectly increments the ref-count of the IPlugView* returned from IEditController::createView() and never fully releases it. This commit reverts e0306d25 for Audition to ensure that an editor is always returned, otherwise Audition displays a blank GUI.
2021-04-22 12:20:07 +01:00
ed
a06063dfd7 VST3: Added a missing return in the previous commit 2021-04-14 11:44:13 +01:00
ed
b1294fdadb VST3: Call setComponentState() on message thread on Linux 2021-04-13 16:25:43 +01:00
reuk
361f839546
VST3 Client: Avoid calling performEdit from the audio thread
Previously, all VST3 parameter changes were signalled to the host via
performEdit, regardless of the originating thread. This breaks the
contract of the IEditController interface, which requires that all calls
are made from the UI thread.

This change modifies the VST3 wrapper so that it will only call
performEdit when a parameter is set on the message thread. If a
parameter is set on the audio thread instead, then the parameter change
will be signalled to the host using
`ProcessData::outputParameterChanges`.

If your VST3 plugin uses a background thread to update parameters for
some reason, you'll encounter data races. Please don't do that.
2021-04-09 12:19:22 +01:00
reuk
c507ec9e73
VST3 Client: Ensure IComponentHandler::restartComponent is only called from the UI thread
When loading a JUCE plugin in Live, Live was producing diagnostic
messages in its Log.txt warning that restartComponent was being called
from a non-UI thread. This change should silence this warning, and
improve compliance with the VST3 spec.
2021-04-09 12:19:22 +01:00
ed
0aeee97b91 VST3: Reduced the scope of some MessageManagerLocks on Linux/BSD 2021-04-08 11:51:41 +01:00
ed
efd52398d1 VST3: Use shared MessageThread on Linux to run the message loop when host run loop interface isn't available 2021-04-08 11:51:41 +01:00
Tom Poole
60e13bec0c Allow use of an external VST3 SDK on BSD 2021-04-01 08:39:25 +01:00
ed
af4b727b8a VST3: Fixed an assertion when JUCE_FORCE_LEGACY_PARAM_IDS=1 due to getProgramParameter() returning the wrong parameter 2021-03-29 17:02:00 +01:00