
libtau is an Open Source cross-platform library for creating graphical user interfaces (GUI) in C++ programming language.
The library has the same purpose as the leading frameworks Qt, Gtk, Fltk - building graphical interfaces for desktop operating systems, but does not have the same extensive potential as the above-mentioned products.
I am an Electronics Engineer targetted on embedded systems (microcontroller driven devices), so in my work I have to spend more time on hardware than on software. Most of the devices I have created, although small in terms of processing power and price, require client software at a minimum for configuration. Some of them were created for research tasks and have relatively complex graphical interfaces designed for desktop operating systems, primarily for Windows, and less often for Linux.
Therefore, the issue of time spent on mastering modern frameworks is acute. Most devices only need very simple client graphics software, consisting of just a couple of buttons and 5-6 labels.
At the beginning of my working career, I first used libraries for MS-DOS (Borland Turbo Vision, Borland Graphics Interface), later the transition to Windows took place and heavier frameworks were used: Borland Object Windows Library, Borland Visible Component Library. There was an endless rush to master more and more new frameworks, as the previous ones left the arena in favor of newer ones. And all this for the sake of a couple of buttons and six text labels! In addition, the Borland International ceased operations.
The meager documentation of Windows API forced us to switch to Linux at the beginning of the 2000s. The time has come to move from proprietary frameworks to freely distributed ones: Qt, Gtk. Without a doubt, both of the above-mentioned frameworks have shown themselves to be better in terms of survivability (compared to products from Borland).
However, the race of frameworks has been replaced by a race of releases. The first blow was the release of Qt-4, which prompted the transition to a less complex, and, as it seemed then, more stable Gtk-2. However, the painful transition from Gtk-2 to Gtk-3 made us think about creating our own software for a simple cross-platform graphical interface.
In addition, the licensing of leading frameworks is such that it is difficult to create low-profit proprietary software without copyright infringement. If on Unix systems it is relatively easy to comply with the requirements of (L)GPL licenses, then on Windows the problems begin. No one has yet been able to answer me clearly whether it is possible to link libraries of the Gtk family statically to a Windows PE file, provided that the source code is closed. The less complex Fltk library also GPL licensed. All that remains is the Qt commercial license, but we couldn’t afford it.
The library uses classic OOP approach.
The GUI part provides display object and widget stack. The concept of widget stack initially borrowed from Gtk framework: we have a set of containers where each container realizes its own widget allocation policy.
Non-GUI classes and functions is a supplemental tools for GUI part. Here is an event loop class, UTF-8 string class and related functions, geometry primitives (point, size, rectangle, curve, contour, etc.), cross-platform filesystem wrappers with UTF-8 parameters, device independed pixmap.
Internal communication is done using Signal/Slot Pattern Library has its own support for signals derived (and simplified) from libsigc++-2.0.
Error management done with C++ exceptions. Provided exception class derives std::exception class.