On Mon, 2011-02-21 at 20:56 +0000, Fons Adriaensen wrote:
On Mon, Feb 21, 2011 at 02:30:25PM -0500, David
Robillard wrote:
I just
did a simple test:
* added a few lines (< 10) of code to jaaa,
* started Ardour and opened its 'Locations' window,
* and had jaaa running within it in seconds.
And that's wihout any cooperation from Ardour. A plugin could use
whatever X11 toolkit it likes and with minimal support from the host
do the same. Apart from that it would need some cooperation to transfer
data between the dsp code and the GUI, but this can be made almost
transparent to the host.
This is currently a possibility, but it throws away the ability to do
things possible when the toolkits do match (notably embedding the GUI in
another window, such as the presets/etc bar ardour adds to the top).
Embedding the GUI in whatever window you like (e.g. a channel strip)
is just the same thing. The changes I made to jaaa made it accept a
window ID instead of its own top level parent window. It could equally
well accept parameters that define a rectangle in a host's window. And
if the host doesn't trust the plugin not to go outside its assigned
area it can just create a window for the plugin to use and have peace.
It is also not portable (depends on X11),
I don't care about any system that doesn't support X11. I don't even
care about some that do.
Which is why yours is a poor solution. It loses much, and gains little
if anything. Making a UNIX only plugin or UI is fine. Making a UNIX
only plugin API is (in this case) stupid.
You /can/ implement "I don't give a damn about anything but <toolkit
X>"
plugin UIs (or hosts) right now, by design. I have always strongly
advocated this. You can't, however, use some nonexistent authority to
force all the other developers to agree - many (and in this case
virtually all) don't. Try and make a monolithic kitchen sink plugin API
like that and watch as everyone outright rejects the entire thing
instead of little replaceable slivers of it...
Yours is a valid perspective for UI and host authors. It is a terrible
one from the API designer perspective. The good design lets you and
others work only with your preferred technology - and interoperate with
others with different tastes. This is possible, feasible, and makes
more developers and users happy. It is, in other words, an objectively
much better solution.
-dr