[LV2] Widget-less UI not working
Stefan Riha
hoitaus at gmail.com
Sat Jun 4 14:36:08 PDT 2016
>>That's why I prefix UI URIs with numbers
Oh, alphabetical. So obvious in hindsight...I should read more code. Thanks
for pointing that out!
On Jun 5, 2016 5:49 AM, "Hanspeter Portner" <ventosus at airpost.net> wrote:
> On 04.06.2016 04:22, Stefan Riha wrote:
> > I should have added that the ui:UI with the additions you suggested
> works well with jalv -s, but only if I remove the
> > kx:Window option from the *ttl, so that jalv doesn't see it at all.
>
> jalv (and many other hosts) just take the first supported UI.
> 'jalv -s' is kind of broken by that it'll take the first UI it finds no
> matter whether it is a ui:showInterface or not.
>
> The first here usually means 'first in alphabetical order'.
>
> <http://example.org/yassy#kx> thus comes before <
> http://example.org/yassy#ui>.
> That's why I prefix UI URIs with numbers :-)
>
> >
> >
> > On Sat, Jun 4, 2016 at 12:16 PM, Stefan Riha <hoitaus at gmail.com <mailto:
> hoitaus at gmail.com>> wrote:
> >
> > Yes, that helped, it works much better now. I tried your
> "customui.lv2" and it works flawlessly.
> >
> > I structured the *ttl's of my project like yours, and using kx in
> Ardour works. But I still get an error with jalv
> > (with -s). It always wants to use the kx:Widget, even though kx is
> listed as a required feature. Maybe a typo, I'll
> > figure it out next week.
> >
> > The ttl's I use are:
> >
> > https://github.com/poidl/yassy/blob/master/yassy.lv2/manifest.ttl
> > https://github.com/poidl/yassy/blob/master/yassy.lv2/yassy.ttl
> > https://github.com/poidl/yassyui/blob/master/yassyui.lv2/yassyui.ttl
> >
> > I used to have the ui in a separate bundle (that's why the projects
> are different), but I install the
> >
> > libyassy.so
> > libyassyui.so
> > manifest.ttl
> > yassy.ttl
> > yassyui.ttl
> >
> > files now all to the same .lv2/yassy.lv2 have the exact same *ttl
> structure as customui.lv2.
> >
> > On Sat, May 28, 2016 at 7:26 PM, Stefan Riha <hoitaus at gmail.com
> <mailto:hoitaus at gmail.com>> wrote:
> >
> > Thanks, that's a lot of valuable information. Much appreciated.
> >
> > Yes makes sense, the x11 quirk is not good.
> >
> > Can't wait to try it next week.
> >
> > On May 28, 2016 19:10, "Hanspeter Portner" <ventosus at airpost.net
> <mailto:ventosus at airpost.net>> wrote:
> >
> > On 28.05.2016 01:27, Stefan Riha wrote:
> > > I had time now to try it. I'm not sure if I understood
> this correctly, but ui:idleInterface and
> > ui:showInterface don't
> > > seem to solve my problem. Jalv and Ardour don't even call
> extension_data(). They break before that, due to
> > the invalid
> > > widget pointer they get from calling instantiate().
> >
> > Ah, I forgot to tell that not all hosts support
> ui:showInterface, yet. e.g. Ardour does not.
> > And jalv needs to be called with a special (undocumented)
> flag (-s), to run in the proper state.
> >
> > Although ui:showInterface is the 'official' extension to do
> custom UIs, some hosts only support its deprecated
> > predecessor extension 'external-ui' [1].
> >
> > 'external-ui' and ui:showInterface/ui:idleInterface are
> pretty similar and you can actually wrap one into the
> > other to support both within the same code [2].
> >
> > [1] http://kxstudio.linuxaudio.org/ns/lv2ext/external-ui
> > [2] https://github.com/ventosus/customui.lv2
> >
> > Have a look at [2], it should get you going, it runs fine in
> jalv(1.4.6), Ardour(4.7), Qtractor (0.7.5)
> >
> > Run your host from the console to see whether it works for
> you (the UI prints some debug strings to stdout)
> >
> > e.g.
> > $ jalv -s http://open-music-kontrollers.ch/lv2/customui#test
> >
> > > However, I noticed that if I declare the widget-less UI as
> a ui:X11UI in the .ttl, then it works! Jalv,
> > Ardour and
> > > Qtractor open an empty window, call extension_data() with
> ui:idleInterface. I actually think that's all I
> > need. Probably
> > > has something to do with the pointer type for X11 windows
> (see http://lv2plug.in/ns/extensions/ui/#X11UI )
> >
> > No, that's not what you need. ui:idleInterface can be used
> apart from ui:showInterface. It's readily used with
> > ui:X11UI to drive animations, screen updates, etc. as X11
> has no main loop as e.g. Gtk and Qt.
> >
> > If your plugin does not create an XWindow, don't declare it
> as ui:X11UI, if your plugin does not create a
> > GtkWidget,
> > don't declare it as ui:GtkUI, ...
> >
> > You're just being lucky here. Hosts expect an ui:X11UI to
> return an XWindow ID. The latter is just a plain
> > Integer.
> > Whathever you return as a widget XWindow ID (or whathever
> resided in memory at that time) may just happen to
> > already exist in your Xwindow environment. Some hosts may
> not even check the retured value for validity, either.
> >
> > > On Sat, May 21, 2016 at 5:08 PM, Hanspeter Portner <
> ventosus at airpost.net <mailto:ventosus at airpost.net>
> > <mailto:ventosus at airpost.net <mailto:ventosus at airpost.net>>>
> wrote:
> > >
> > > On 21.05.2016 06:23, Stefan Riha wrote:
> > > > Hi, I'm a beginner and experimenting with lv2.
> > >
> > > Great
> > >
> > > > I wrote a simply synth and want a UI without Widget.
> On the lv2 page it says
> > > >
> > > > "There is no requirement that a UI actually be a
> graphical widget."
> > > > (from: http://lv2plug.in/ns/extensions/ui/ ).
> > >
> > > True, an UI can theoretically be anything.
> > >
> > > Can you give some more information on what you want to
> accomplish? You may well not need an UI in the
> > first place (but
> > > don't know yet, as you are a beginner).
> > >
> > > > Below that, there is a list of subclasses of UI, but
> all are for widgets. So I thought I'd try ui:UI
> > directly instead of
> > > > ui:GtkUI etc. But neither jalv nor Ardour recognises
> that there is a UI.
> > >
> > > ui:UI is the parent class which the Widget UIs
> (ui:GtkUI, ui:Gtk3UI, ui:QtUI, ...) derive from. It is
> > en empty shell
> > > really, hosts cannot possibly know what is inside, you
> have to give the host some more information.
> > >
> > > > So I used ui:GtkUI instead. In jalv, this yields
> error messages of type Gtk-CRITICAL. Obviously it's
> > because there is no
> > > > actual widget. In Ardour, I can see that the UI is
> instantiated() and immediately cleanedup(),
> > probably because the Gtk
> > > > errors are handled that way.
> > >
> > > If you define the UI as an ui:GtkUI, but do not return
> a valid GtkWidget to the host, sure this raises
> > an error.
> > >
> > > > How do you do this?
> > > >
> > > > I looked for hours for some example code but
> couldn't find one. I stumbled across Ingen which has
> > some form of
> > > > web-interface (if I understood correctly) and tried
> to read the .ttl files, but don't understand them.
> > >
> > > You may be looking for ui:showInterface [1] and
> ui:idleInterface [2], with those you can build arbitrary
> > > UIs.
> > >
> > > Here [3] you can find a dummy plugin I use for testing
> various UIs in my humble host.
> > > <test_show.c> implements an as-simple-as-it-gets
> no-widget UI.
> > >
> > > [1] http://lv2plug.in/ns/extensions/ui/#showInterface
> > > [2] http://lv2plug.in/ns/extensions/ui/#idleInterface
> > > [3] https://github.com/ventosus/alluis.lv2
> > >
> > > > Thanks a lot for your help,
> > > > Stefan
> >
> >
> >
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.lv2plug.in/pipermail/devel-lv2plug.in/attachments/20160605/0e2c0137/attachment-0001.htm>
More information about the Devel
mailing list