torbenh(a)gmx.de wrote:
On Sat, Jan 07, 2006 at 11:58:49AM +0100, jorgen
wrote:
Hi, Im coding a VST host for windows and linux.
The linux version will
support VSTs compiled on linux and not using wine or aything. Of course,
there is not alot of native linux VST plugins around but that will
change (I already made one :P )
:) cool welcome abord. so you ported vstGUI ?
how will that work ?
does a vst plugin coder only recompile his plug then ?
No, I have made my own toolkit based on xlib calls. The host (energyXT2)
will pass a xlib Window handle that I use as a parent when calling
XCreateWindow:
case effEditOpen:
if (!editor)
editor = new CEditor(app, 0, wsChild | wsNoBorder, "",
100, 100, 200, 200);
#ifdef WIN32
SetWindowLong (editor->handle, GWL_STYLE,
(GetWindowLong (editor->handle, GWL_STYLE) &~ WS_POPUP)
| WS_CHILD);
SetParent(editor->handle, HWND(ptr));
#endif
#ifdef linux
XReparentWindow(dp, editor->handle, (Window)ptr, 0, 0);
editor->parentWnd = (Window)ptr;
#endif
editor->show();
result = 1;
break;
In effEditIdle I then call my message loop:
case effEditIdle:
#ifdef linux
XEvent event;
while (XPending(dp)) {
XNextEvent(dp, &event);
handleEvent(event); // replace
this with your own event handler for your toolkit
}
#endif
break;
There is one
challange though, event dispatching in X11. Unlike windows,
X11 windows doesnt have an assotiated window proc for dispatching
events. I can overcome this in my own gui toolkit by passing a Display*
pointer to the plugin etc, but it wouldnt work with other gui toolkits.
So how do I make a soution that work with any toolkits on linux?
we are still searching for a solution with a window generated in the
same process. with different toolkits etc.
to my knowledge
this has not really been solved. believe me, there would be a much nicer
standard than dssi already.
1) the plugin calls its own event loop in
effEditIdle
2) make a new atom "wndproc" for storing wndproc function per window,
the host will send XEvents to the wndproc if found.
I prefer 1) but I dont know if toolkits supports manually calling the
event loop?
i am not sure i understand what you want to do but.....
for gtk see:
http://www.gtk.org/api/2.6/gtk/gtk-General.html#gtk-main-iteration-do
for qt start along here:
http://doc.trolltech.com/4.1/qeventloop.html#processEvents
cheers
jorgen