[EMAIL PROTECTED] 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




Reply via email to