Re: [linux-audio-dev] VST compiled for linux / gui message loop

From: jorgen <support@email-addr-hidden-hq.com>
Date: Sat Jan 07 2006 - 15:43:24 EET

torbenh@email-addr-hidden 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
>>
>>
>>
>>
>
>
>
Received on Sat Jan 7 16:15:08 2006

This archive was generated by hypermail 2.1.8 : Sat Jan 07 2006 - 16:15:08 EET