Commit Graph

914 Commits

Author SHA1 Message Date
Robbert van der Helm 91a96249fc Implement IEditController2::setKnobMode 2020-12-26 00:03:29 +01:00
Robbert van der Helm 448158df8f Update comments in Editor implementation 2020-12-25 22:53:33 +01:00
Robbert van der Helm 6b4df4d274 Explicitly include <mutex>
This is an indirect dependency in Boost 1.72/1.73, but not in older
versions.
2020-12-25 21:55:00 +01:00
Robbert van der Helm 80ef1ec394 Add XEmbed support back in
Still very much broken, albeit a bit less broken than a year ago.
2020-12-25 19:49:47 +01:00
Robbert van der Helm 8a56b67cb3 Add unknown interface logging on the Wine side 2020-12-25 15:25:56 +01:00
Robbert van der Helm 70cb6dad89 Allow indirect IConnectionPoint connections
This is needed to support Ardour. These extra hops and serialization
steps will probably hurt performance, but outside of some huge hacks (to
connect the components directly anyways) there's not much else we can
do.
2020-12-25 14:21:18 +01:00
Robbert van der Helm fbad4a65ab Add an IConnectionPoint proxy implementation
We still have to pass this proxy to the plugin. That's next.
2020-12-25 13:46:03 +01:00
Robbert van der Helm 65694d261c Implement IConnectionPoint::notify 2020-12-25 13:13:56 +01:00
Robbert van der Helm 5d2c7e0aea Replace SDK IMessage implementation with ours 2020-12-25 01:01:13 +01:00
Robbert van der Helm 7cfd1982dd Fix typos in comment 2020-12-25 01:01:13 +01:00
Robbert van der Helm f4c871f07e Add pointer casts to instance creation
I copied this from the SDK implementation and they don't do any pointer
casts there because it's not strictly necessary, but they're relying on
implementation details that may not always hold true.
2020-12-24 14:46:02 +01:00
Robbert van der Helm b0fc8f2c5f Remove are_objects_directly_connected check
It's not necessary, since all of these objects are simple data objects
that will be passed as arguments to other functions. When we have to
pass through one of those functions we can just serialize the objects at
that point.
2020-12-24 14:45:58 +01:00
Robbert van der Helm 50b50418f4 Fix messages between directly connecting objects
iZotope plugins will already send messages when connect() is called on
the first object, so this flag has to be set on both host contexts at
the same time.
2020-12-24 13:58:32 +01:00
Robbert van der Helm a86c37a21d Partially implement IHostApplication
For now only works for directly connected components.
2020-12-24 13:48:31 +01:00
Robbert van der Helm 1186e7d775 Store whether two objects are connected directly
In the host context. So when the plugin wants to create an `IMessage`
object to send a message to the other object, we don't have to go
through the host.
2020-12-24 13:22:54 +01:00
Robbert van der Helm 7a55fc3ec0 Significantly clean up mutual recursion workaround
This has much fewer moving parts, and it's probably more understandable.
There was also a race condition in the previous implementation, so
there's that.
2020-12-23 16:11:05 +01:00
Robbert van der Helm 3beaaf2312 Always handle IPlugView::onSize() from UI thread
This requires a super hacky workaround because the UI thread can be
currently blocked by the plugin calling `IPlugFrame::resizeView()` from
the Win32 message loop.
2020-12-22 17:36:30 +01:00
Robbert van der Helm 9ee7982591 Call IPlugView::on* from the UI thread
Since these can trigger a redraw.
2020-12-22 15:47:57 +01:00
Robbert van der Helm 9bb90388c1 Implement IPlugView::checkSizeConstraint()
With this the whole of `IPlugView` and thus also `IEditController` is
implemented.
2020-12-22 15:42:41 +01:00
Robbert van der Helm 5ef7e73725 Implement IPlugView::canResize() 2020-12-22 15:37:06 +01:00
Robbert van der Helm 656f6d3f6c Implement IPlugFrame::resizeView()
The base IPlugFrame only contains this single function.
2020-12-22 15:09:33 +01:00
Robbert van der Helm da6ddccf07 Implement IPlugView::setFrame() 2020-12-22 14:16:00 +01:00
Robbert van der Helm 9288cdcb59 Remove support for null pointers in setHostContext
Like the other functions, null pointers are never valid here so we
shouldn't bother passing them as it only increases complexity.
2020-12-22 14:04:42 +01:00
Robbert van der Helm 3b96ffa349 Remove null pointer supported in initialize() 2020-12-22 13:59:47 +01:00
Robbert van der Helm 51876a024c Remove null pointer support in setComponentHandler
This should be an implementation fault.
2020-12-22 13:59:15 +01:00
Robbert van der Helm 37897da2b7 Destroy IPlugFrame proxy together with IPlugView
Not that we have implemented `IPlugView::setFrame()` yet, but that
should be trivial at this point.
2020-12-22 13:43:08 +01:00
Robbert van der Helm 91c4b414b0 Add a Vst3PlugFrameProxy implementation with stubs 2020-12-22 13:37:58 +01:00
Robbert van der Helm d4d9746f69 Implement IPlugView::onFocus() 2020-12-22 00:19:23 +01:00
Robbert van der Helm 463557349d Implement IPlugView::onSize() 2020-12-21 23:46:29 +01:00
Robbert van der Helm 1aa5d5d8b4 Add note to input focus grabbing
This shouldn't be necessary for VST3, but it is.
2020-12-21 22:46:59 +01:00
Robbert van der Helm 063b480fd0 Implement IPlugView onKey{Up,Down} 2020-12-21 19:13:14 +01:00
Robbert van der Helm d49814d21d Add todo about input focus in VST3 2020-12-21 19:13:14 +01:00
Robbert van der Helm 06c55fcdd8 Implement IPlugView::onWheel() 2020-12-21 18:56:22 +01:00
Robbert van der Helm f1009f1941 Implement IPlugView::removed() 2020-12-21 18:30:42 +01:00
Robbert van der Helm 7e34cf69fe Remove Editor::handle_win32_events
This apparently isn't needed anymore.
2020-12-21 18:24:07 +01:00
Robbert van der Helm 0f43e21fc0 Remove old todos 2020-12-21 18:22:40 +01:00
Robbert van der Helm 5324e4142b Clean up proxy object construction/destruction 2020-12-21 17:59:38 +01:00
Robbert van der Helm 51877796fa Add dedicated IAudioProcessor/IComponent sockets
This way every relevant object instance will get its own thread for
handling these calls. The alternative would be creating a full fat
Vst3MessageHandler pair for all object instances, but that would be a
huge waste.
2020-12-21 17:26:30 +01:00
Robbert van der Helm b38f272013 Run all other lifecycle events on main thread
This is probably where plugins instantiate timers for their GUI updates.
2020-12-20 12:29:59 +01:00
Robbert van der Helm f2153148b2 Construct and destruct IPlugView from GUI thread 2020-12-20 12:18:51 +01:00
Robbert van der Helm 703b6d9285 Add functions to schedule tasks in main IO context 2020-12-20 12:18:51 +01:00
Robbert van der Helm 66450407f0 Instantiate the editor within the main context
Otherwise it of course won't work.
2020-12-20 00:34:51 +01:00
Robbert van der Helm 36c2d877c2 Handle X11 events in Vst3Bridge 2020-12-19 23:55:21 +01:00
Robbert van der Helm 960e2d50d1 Implement IPlugView::getSize() 2020-12-19 23:46:45 +01:00
Robbert van der Helm 09f6d93214 Implement IPlugView::attached() 2020-12-19 23:31:41 +01:00
Robbert van der Helm 49fc896d62 Remove Win32 effEditIdle() timer
Now Editor is completely decoupled from VST2.
2020-12-19 23:30:47 +01:00
Robbert van der Helm e72e6d5642 Implement IPlugView::isPLatformTypeSupported()
This of course requires us to substitute the relevant Linux platform
type for the Win32 one.
2020-12-19 22:34:56 +01:00
Robbert van der Helm 7306809991 Drop IPlugView pointer when host drops proxy 2020-12-19 22:17:10 +01:00
Robbert van der Helm f0ece64018 Implement the Wine side for createView() 2020-12-19 20:41:06 +01:00
Robbert van der Helm a724b378fe Move the editor handling back to Vst2Bridge
Since we can have multiple editors in Vst3Bridge.
2020-12-19 19:56:49 +01:00