Addendum:
Some random thoughts / ideas / questions that came up while working on the patch.
I wanted to “re-patch” this for quite some time already, but elementa was lacking a key component, namely a fixed size scrollable combobox / dropdown and I was too lazy to add one myself (or to even start my own Gui like @catweasel did).
Borrowed some “things” from @sebescudie’s GammLauncher. Thanks for that!
Maybe interesting to the ImGui team (@Elias / @gregsn / @robotanton / @sebescudie):
-
VL.ImGui is still under heavy development but already feels more accessible than elementa and also seems to be more performant. On the flipside it is a lot less flexible when it comes to styling/ extensibility and there are not (yet) as many widgets.
-
When re-opening a patch that contains ToSkiaLayer [ImGui] vvvv crashes
-
The BehaviorSubject of the widgets seems to “trigger” once on startup, I had to add some workarounds for that.
-
I couldn’t find a way to disable interaction on single widgets. I somehow thought it could be done using Selectable with Flags set to
Disabled
but it didn’t work. (There is an example inside the FileIO subpatch inside UI).
-
I couldn’t find away to change the style / color of Progressbar. In general the styling options of ImGui are a bit cryptic and the documentation of it is really bad. But I guess this will be addressed by this todo on github.
-
I am opening a modal folder browser and while the widgets can not really be interacted with, their events still trigger after closing the dialog. So if for example the source button is clicked again while the dialog is open, new dialogs will pop up after closing the one before (as many times as the button was clicked). I couldn’t find a wokaround for that. Is this a bug or a feature?
-
Some widgets cannot deal with display scaling settings > 100%.
-
Widgets need a unique label, otherwise actions on one widget will also trigger changes on an other one.
-
Add
##
as pre-fix to a label to make it not show up in the gui -
VL.ImGui.vl currently references the ImGui.NET nuget. Wouldn’t it be more practical to reference the dll directly since it already comes with VL.ImGui.dll in the lib folder?
-
I was often wondering when to do something “on the mainloop” or “inside an observable” (not sure about the terminology). Would really love some input on this. Silly example:
(I already learned to open a modal dialog only from the ui thread…) -
I looked at some development patterns / other apps beforehand. Like @dottore’s Model-Runtime-Editor and @sebescudie 's GammLauncher. A lot of times the stuff is “heavily fragmented” (again not sure about terminology) and using references all the time. I might be ignorant but to me it appeared to be kind of over-engineered - at least for small apps.
Would appreciate some insights, best practice tips (especially from the devvvvs) in that regard. Also some feedback on the “structure” I used and in general ideas for improvements.
Edit:
Add Two
Not Sure if this is related to / caused by the Imgui stuff but 2022.5 was a bit trying to patch with.
Timings stop showing (mostly in subpatches). Changes are not picked up by the system. For example:
- changes made to inputs / io-boxes jump back to a previous value
- newly added ouput-boxes don’t show changed values
- newly added nodes are not executed
Restarting the patch (F9) didn’t help by itself. Only thing that worked for me was saving and reloading/reverting the document and then pressing F9.