blog · git · desktop · images · contact & privacy · gopher


tuxeye2

In den 1990ern gab es ein hübsches kleines Programm. Es hat unseren Lieblingspinguin Tux angezeigt – und seine Augen folgten den Bewegungen der Maus. :-) Der Name dieses Programms war „tuXeyes“ und wurde von Debian mit „a fancier version of Xeyes“ untertitelt. Geschrieben wurde es ursprünglich von Ivo van der Wijk.

Leider gibt es das Programm heute nicht mehr. Es gibt zwar noch alte Paketquellen von Ubuntu 12.04, aber das war’s. Keiner will das Programm mehr innerhalb einer Distribution warten, weil es von einer sehr alten Version von Qt abhängt (und nur ein Spielzeug ist). Ursprünglich scheint es für Qt 1.42 geschrieben worden zu sein, dann später vermutlich von Debian auf Qt 3 portiert. Die aktuelle Qt-Version ist aber 5.8, also hat man da nicht mehr viel Spaß.

Dreimal raten, genau, ich habe das Ding neugeschrieben. Es ist jetzt ein kleines C-Programm und hängt nur noch von der xlib ab. Allerdings gibt es im Moment auch nur ein Theme, Tux, wohingegen das Original noch ein paar andere Kerlchen anzeigen konnte.

tuxeye2

Hat Spaß gemacht. Ich habe mich auch diesmal wieder dazu entschieden, mit farbfeld-Bildern zu arbeiten, was ich bereits in katriawm und bevelbar/infofeld tue. Das ist einfach ein tolles Format, einfach und leicht verdaulich, macht Spaß (abgesehen von der Endianness-Swapperei, aber ich verstehe schon, weshalb man sich dafür entschieden hat).

Tux wird in drei „Ebenen“ gemalt: Ein Hintergrund, dann die sich bewegenden Augen und dann ein Vordergrund. Die Ebenen werden in dieser Reihenfolge gemalt, was es den Augen erlaubt, „im Kopf“ zu verschwinden. All das passiert in Form von farbfeld-Bildern im Arbeitsspeicher und nur das Endergebnis wird dann zu einem XImage und dann zu einer X11-Pixmap konvertiert.

Im Repo liegt die Datei libff.h, die für das Handling der farbfeld-Bilder zuständig ist. Vielleicht erwächst daraus einmal eine „richtige“ Farbfeld-Bibliothek, mal schauen. Eigentlich soll farbfeld ja so einfach sein, dass man keine „Bibliothek“ braucht, aber ein paar Funktionen braucht man halt doch immer wieder in jedem Projekt.

X11-Fenster können nur rechteckig sein, also benutze ich die SHAPE-Erweiterung, um die „nicht-Tux-Teile“ abzuschneiden. Zu meiner Überraschung gibt es da die Funktion XShapeCombineMask(), die direkt aus einer Pixmap-Maske das tatsächliche Shape errechnen kann. Nett.

Um ein undekoriertes Fenster anzufordern, habe ich dann zum erstem Mal die _MOTIF_WM_HINTS in einem Client benutzt. Funktioniert in katriawm und Openbox. Immerhin. Einen entsprechenden Hint gibt es in EWMH oder ICCCM nicht – mir auch nicht ganz klar, wieso nicht.

Viel Spaß: tuxeye2