I love Qt. Honestly. I began to study it on a cargo ferry from Travemünde to Helsinki in the company of drunk truckers, their half-drunk girlfriends, car traders and just blasted people, who with their daily journey by sea can effectively deal with the severity of the Finnish anti-alcohol rules. I didn’t have any cabins, I didn’t have the Internet either, so by the end of the trip I was already quite cheerfully shuffling QML tags and even the need to use QString didn’t cause the former hiccups. No, no, I really love Qt.
But I love Turbo Vision even more. For me, he is a hello from youth, when the world was simpler, when people didn't drag powerful frameworks back and forth, tasks for four lines were solved by four lines and it never occurred to anyone to draw trivial pictures using HTML, CSS and javascript. When the button could be put at point X and be sure that it will remain there in any weather. When tasks were not solved by the “download” and “install” methods, as well as the “pick up” and “configure” methods. When it was forbidden to use code that has “no one knows what is inside”, and any problem could be debugged in a finite number of steps. When the documentation was a book, not a printout from the forum.
Therefore, when we once had the task of “drawing on anything,” including various LCD monitors, electronic paper, remote screens and even flash files, and all this from several different operating systems, I had my hands itched.
')
To draw a UI for us is a non-core task and has always been solved by the residual principle, this is not a lordly thing - to arrange the buttons on the screen. But, once secured, it is necessary to do.
Do you understand what I'm talking about? Yes, we wrote our Qt. Rather, of course, not him, because there is no point in rewriting what has already been written.
We have written a library for drawing graphical interfaces, sharpened on embedded systems we love so much. With the condition:
- Pure C ++, no frameworks, no dependencies, third-party libraries and loadable modules, STL in limited quantities, so as not to reinvent the wheel,
- No “configuration languages” and other magic that requires hundreds of hours to master,
- The minimum binding to the operating system: threads, mutexes and sleep, to port anywhere,
- “Memory is nothing to eat”, it is always less than you want,
- Draw on everything that can draw a pixel. Color, or black and white.
For half a year, the “Kitty Drawing Library”, at first called simply Componentality Graphics, and then received the more harmonious name JetCat (not to be confused with the manufacturer of aircraft engines) was overgrown with meat. First graphic primitives, transparency and sprites. Then - ViewPort'y and scrollers. Then - raster fonts, anti-aliasing and the generator of these same fonts from TrueType (dragging TTF fair rasterization to embedded platforms in order to often draw several labels - this is exactly what I wanted to avoid), then labels, frames, fields input, windows, menus ... In February, we released the first product with JetCat inside and set to work with remote screens. Fortunately, ISurface, on which drawing actually takes place, is an interface with two methods: plot and peek.
And when, in addition to several different target Linux, as well as to Windows, under which it is so convenient to debug, Raspberry PI, AllWinner A13 and FreeScale iMX6 JetCat launched on OS X without any problems, we decided to put it in open access.
First, surely someone will come in handy.
Secondly, there may be those who will identify and correct mistakes faster than we do, and we have something to do besides that.
Thirdly, we absolutely do not have enough time to write documentation.
And most importantly - a good thing turned out.
Of course, not Qt. Less. Simpler. Weaker while at least. Much weaker. But cheaper, going without a tambourine and start up with a half-kick. What else is necessary for happiness to the embedded-developer, who was assigned to arrange the buttons on the screen?
You can take and use it here:
https://bitbucket.org/componentality-admin/jetcatNext you need to remember to clone
https://bitbucket.org/componentality-admin/common-libs , it provides portability.
Examples are on the way, no documentation whatsoever. While you can study the test code ... Well, everything is simple there.
This is not an advertisement. MIT license. On health, use.


Note 1: Dear, invaluable Community! We really appreciate your criticism and your help. And we perfectly understand how you want examples, descriptions, cleaned code with a long history of use, and many ASSERTs with intelligible diagnostics that cover your specific problem too. All this will be sooner or later. The problem is that when it comes, you will no longer need us. We need you now, when all this is not. To make it appear. In exchange, we give you a large and fairly valuable (estimates may vary) product of their labor. This, in our understanding, is fair exchange.
And further.
To everyone who said “thank you” our huge thanks. And those who help to make JetCat better - thanks in the box. And for us usually does not rust.