Moving Redkite To Graphics Widgets

25-02-2024

To begin with a small story: when version 1.0 of Geonkick was developed, its GUI was based on Qt, and it was only the standalone version. Then requests to develop the plugin came in, and when the first LV2 plugin was developed, it became evident that Qt was not really suitable for an embeddable GUI if you wanted to have a self-sufficient plugin. There are toolkits suitable for this, but either they don't have widgets or the interface is so different from Qt that I would need to modify everything in Geonkick's GUI code. And, okay, I think Qt interface is cute.

Since version 1.0 was quite stable, I didn't want to modify the Geonkick code extensively. As a result, a small library was developed as a part of the Geonkick project, the interface of which is very close to Qt.

Redkite now supports GNU/Linux and Windows, utilizing XLib for GNU/Linux and WinAPI for Windows. In both cases, it uses Cairo graphics for drawing.

When the VST3 plugin version for Windows was released, I realized that even though it is easier to work with system windows, since every window takes care of its events and stuff, for an embedded UI with numerous widgets like Geonkick, it is not ideal. Also, depending on the platform, it is not straightforward to make these widgets behave as desired, such as adding transparency, creating pop-ups, context menus, scaling, and dialogs that are not transient.

Instead, I thought of having only one embedded system window and making every widget, instead of system windows, a graphics widget drawn with graphics, actually with Cairo. This should improve many aspects that Geonkick's UI currently faces problems with. Thus, I tried to develop this idea, and as a first step, I could move all the widgets to graphics widgets. I was surprised that because the interface of Redkite remained the same, when I compiled Geonkick with the new Redkite, the GUI just worked, even the graphics of the sound wave form that is drawn in a separate thread.

Of course, I need to implement some more stuff, but it seems that the main idea works. Currently, to connect objects in Redkite, I am using a macro that simulates QObject::connect. However, if this idea with graphics widgets will work, I'll improve this point to be closer to QObject::connect and address other aspects as well.

Here's Geonkick running with the new Redkite, but this time every widget is just graphics, no system windows, only one, the main one.

The plan is to start using new Redkite starting from the version 3.5.0 of Geonkick

Next Post: Geonkick Version 3.4.0 Has Been ReleasedPervious Post: Geonkick Version 3.3.0 Has Been Released