Description
This has been discussed already many times over a few places (#69 (comment) #44) and it's getting more and more clear that we need a UI for Wolf. The main goals are:
- Configuration: We need an easy way to configure Wolf without editing the config file.
- Sharing: Allow users to share a game session with multiple users (instead of making completely isolated sessions
as we are doing right now). - Monitoring: Allow users to see what's the status of the game session (ex: "Downloading docker image", "Container
died", etc.) - Usability: This GUI has to be controllable by keyboard and mouse, whilst at the same time should be usable in a TV
screen even just with a gamepad.
Implementation
I think our "dream solution" here would have:
- Ability to run multithreaded directly inside Wolf so that each user will have its own UI state, and we can show what's
happening even before the app container is started. - A way to easily communicate bidirectionally with Wolf (status reports, configuration changes, etc.)
- An easy way to inject mouse, keyboard and joypad events without going through the system
- Expose direct access to the raw framebuffer where the UI is rendered so that we can feed it directly into the video
encoding pipeline. - (optionally) An easy way to build the UI, possibly noob friendly like HTML+CSS+JS.
I've been looking around for something like this and I think the best candidate is Sciter, more specifically the windowless version of Sciter: Sciter.Lite
There are some examples:
- render to OpenGL
- render to Bitmap (uses CPU rasterization)
The nice thing is that it seems to tick all the boxes above, the only concern is that it's not open source, and it's not free (albeit just for commercial use which shouldn't concern us). Is there any other alternative that we should consider?
Otherwise, we could just run any normal GUI toolkit (GTK, Qt, Electron, etc.) in a separate process inside the Wolf container, hook it up with our Wayland comp, and communicate with it via a socket or something. This would be a lot more complex and
less efficient, but it would be open source and free.
Metadata
Metadata
Assignees
Labels
Type
Projects
Status