Current state of GUI development in Rust?

Rust with gtk-rs, along with gstreamer-rs are working fine for me writing Linux GTK+/GStreamer desktop applications. D with GtkD is also very good though, and in some ways better, on some ways not so good.

2 Likes

I really find I need a GUI library for my purposes, and I have been watching every thread about ui development in RUST with great anticipation.

I have tinkered with gtk-rs, writing a custom browser which interfaces with a restful backend for an asset management prototype. I definitely feel that it worked pretty well. Most of my problems had to do with issues with gtk: Lack of documentation for gtk3 for doing more advanced things, missing functionality with table views, really weird limitations with tree views, etc…

I think that the authors are doing a very good job, and it is the most mature of the frameworks that i have played with, although, I have encountered some performance issues with resizing windows.

I have also played with Azul, and I enjoyed the api, but it had definite issues with laying out components, non-unform scaling, etc.

I really like the feel of Cursive (tui), which relies on channels to handle events. But, its a tui not a GUI.

I also liked Conrod, although I was a bit confused by the lack of a fully abstracted back end, as well as very limited default primitives ( no shadows, single border color, no ramps, etc. It seems like it would be a lot of work to customize the widgets to make them look professional). It appears to be written with a very particular ui style in mind, as evidenced by the main author’s ui work. Not really styled for the desktop.

I ultimately miss Qt widgets though. A lot of effort has gone into Qt and many graphics intensive applications are written using it (maya, houdini, nuke, katana,etc.)

5 Likes

What problems did you have with Azul specifically? Layout is still a bit problematic in regards to layouting text, otherwise it should technically work. What do you mean by “non-uniform scaling” - do you mean the HiDPI factor?

@sharazam
at least on os x, most of the examples flash red before drawing - the more complex the example, the longer it stays red.
when scaling a window the examples (the table example) would squash or stretch (thats what i meant by non-uniform scaling) and only redraw widgets with correct aspect ratios on mouse up. Stuff like that.

flutter-rs might be another choice. But the UI code would be mainly written in Dart, while Rust can take the work that concerns performance, or invoking native libraries.

3 Likes

I like to write UI in plain C, currently on IUP Library. Yes i know, there is a rust binding, but this is not up to date and i like up to date libs. The same i tried with wxWidgets and c++ but…yes…its c++…so i will take plain c. Based on personal reasons i don’t like web based ui.

I tried gtk but currently i am working on windows and was not able to build all the requirements by myself, but i like to build all by myself, too. :slight_smile:

Maybe someone did the same or can point some alternatives? I like small binaries with a low level memory footprint in process,

Cool. I wish it had OpenGL soon.

Hi All,

Just a quick update on skryn. I have been busy the last few months reworking the TextBox and Button and I’m pleased to tell you that they both now support RTL and LTR languages.

Further more, you can have a mixture of RTL and LTR text in a paragraph and the flow corrects the way it is displayed.


Same paragraph resized displaying the mixture of RTL and LTR correctly.

There are a lot more things to be done and a lot of tweaks need to be made, but it is getting to a place where I’d liek to use this myself in my own applications slowly.

If you end up trying this please let me know if you find any bugs or features that you’d like to see. It is also now published on crates.io.

10 Likes

Great Idea. Tk is probably the only comparable and compatible Library to the original NCSA Mosaic Canvas GUI Widget Sets that Netscape used and who WebView, Chrome, Safari among other Browsers use in a highly customized state to render GUI. Interestingly enough the reason being that Tk allows every widget with any number of attributes to be upgraded in the stack using Config Methods. What this means is if you Wish to develop a Browser it is probably the only GUI Tool kit besides Wx that can do so. Also Tk offers the ability to pre set and pre load after render JavaScript and that is what it’s all about. The problem is that nobody studies it fully and it is a very advanced toolkit but many use it in a very limited state likewise. It can mimic Qt or Wx also.

I’m writing a GUI framework based on the elm-architecture. I had successfully implemented it in for the web and realize it could be extended to use native widgets for the target OS. Targeting the TUI is also doable and even easier since TUI don’t need diffing and patching since it is just drawn every time. However TUI libraries in rust projects lack support with mouse events.

4 Likes

Here is the progress of the reactivity in the UI.

A few more iterations, it will be ready for public release.

3 Likes

I need it yesterday please

However TUI libraries in rust projects lack support with mouse events.

cursive supports MouseEvent since 0.7.0.

And tui is just an immediate mode UI, so it doesn’t include any input event handling at all! But all supported backends have mouse support…

2 Likes