My experimental rust gui framework

my experimental rust gui framework
It uses both: Skia_safe as a graphics engine, Winit as a window manager, and Softbuffer to connect them.
Features:

  • Ability to add custom user interface components
  • Using themes and adding other themes
  • and more coming soon.

Note:

It is still in the early stages of development

How it works?

When a new window is created using UWindow.new(), UWindow.run() after the button widget has been added to UWindow.children, the event loop runs, and depending on the event, the functions associated with each specific UWidgetTtype are activated, for example: when the movement of the mouse cursor occurs and it is on Button element,UWindow activates the Button.on_hover function of the button,and current UTheme in UWindow.theme draw the button.
It should be noted that the tool is detected with the mouse cursor by the color of the pixels in offscreen buffer that created in UWindow, instead of calculating the tool’s coordinates and size. This method is easier and more accurate.

  • UWindow is responsible for window management and event handling.
  • Utheme is responsible for drawing widgets apearance dependeng on the selected theme.
  • Uwidget is responsible for widget management.

map

This is supposed to be the first release of my UI framework in Rust.
It should be taken into account that there are two known problems in this version that I personally noticed in examples/simple_window.rs:

1- the circle and canvases not following the window resizing smoothly (Maybe because of the LXDE desktop environment in Linux? Or another reason?)

2- There is another problem related to the coordinates of the mouse and the window in the mouse cursor movement event (this problem appears in a specific circumstance that I have not yet been able to determine)

If you have any suggestions to improve the project's source code, or find any other problems, or find a solution to any of the current problems, I will be very grateful to you.

Guidance on writing the appropriate license for the project would also be welcome

2 Likes

So what do you think?
Do I need to change the code structure?
Any suggestions, tips or good resources to help me improve it?