Simdock ist das von mir adoptierte Dock, das Programmstarter und Fensterverwaltung kombiniert sowie bereits gestartete Fenster beim Klicken auf die Programmicons so durchschaltet, dass man alle verschiedenen Fenster eines einzelnen Programms aufrufen kann, ohne jedes einzeln im Dock haben zu müssen. Es unterstützt zudem Pseudo-Transparenz, was bei meinem Fenstermanager einen Bug umgeht und Systemen zugute kommt, die keinen Compositor laufen lassen können.
Mir ist immer noch nicht klar, warum genau simdock heute nicht mehr funktionierte. Aber dem war so: Nach meinem Upgrade auf Funtoo 1.2 startete mein Lieblingsdock nicht mehr. Beim Versuch das zu debuggen musste ich dann feststellen, dass auch das Kompilieren nicht mehr ging.
Das Makefile zu reparieren war die erste Aufgabe. Ich machte es mir einfach und spielte das ursprüngliche simple Makefile wieder ein, auf das ich damals so stolz war. Es hat zwar das Problem, bei jeder Änderung das ganze Programm neu zu kompilieren, aber es funktionierte damals wie heute zuverlässig.
Doch warum ging das Programm nicht mehr? Auch das habe ich nicht genau rausbekommen, aber nun in der Lage simdock mit neuen Debug-Ausgaben zu bauen konnte ich die Stelle eingrenzen. Diese Codezeilen waren das Problem:
wxSVGDocument* svgDoc = new wxSVGDocument; svgDoc->Load(path);
Dort wird versucht ein SVG zu laden, und genau so ging das bisher. Irgendwas im Zusammenspiel der neuen Versionen meiner Systemlibraries scheiterte nun. Ich öffnete einen Bugreport und wechselte gleichzeitig zur librsvg. Das ist ein Gnome-Projekt mit einer simplen API, die ich erst nicht verstand und an dessen fehlenden Tutorials ich erstmal verzweifelte. Dann aber wurde mir klar, dass die librsvg mir mit zwei Befehlen aus der SVG-Datei ein Pixbuf machen konnte, wobei mir bekannt was dass man daraus ziemlich einfach ein wxImage erstellen kann, und genau das war mein Ziel.
Das alles hat den Vorteil, dass wxSVG sowieso aus den Ubuntu-Paketquellen verschwunden war und es deswegen schon länger kein PPA-Paket für neue Ubuntuversionen gab. Deren Kompilierung sollte jetzt wieder anlaufen.
Nachdem simdock nun wieder so funktionierte wie zuvor fand ich dann zusätzlich noch einen Weg, Anti-Aliasing zu aktivieren. Ich kam darauf, weil ich mir von dem Wechsel zu librsvg auch schöner gerenderte Programmicons erhofft hatte, dem aber nicht so war. Dabei wurde mir klar, dass das Problem das Zeichen der Bitmaps auf die Programmoberfläche ist. Die Dokumentation von wxWidgets ist immer noch viel zu spärlich, aber durch Posts wie diesen konnte ich mir dann doch zusammreimen, dass man zwischen das wxDC
(dem Canvas, auf das bisher gezeichnet wurde) ein wxGraphicsContext
schieben kann, das insbesondere Anti-Aliasing unterstützt, und dieses wxGraphicsContext
kann dann wieder einem wxGCDC
übergeben werden, das sich dann wie ein wxDC mit Anti-Aliasing verhält. Im Ergebnis sind die Programmicons im Dock nun weniger pixelig, auch wenn sie nicht in der Originalgröße gezeichnet oder wenn sie gerade vergrößert werden.
Schön an der ganzen Aktion ist nicht nur, dass die Icons jetzt grundsätzlich besser aussehen sollten. Sondern dass ich schon vorher über Systeme gestolpert war, auf denen simdock einfach nicht startete. Eventuell sind die schon damals in den wxSVG-Bug gelaufen und würden jetzt funktionieren.
Simdock 1.5.2 kann vielleicht bald wieder über das PPA bezogen werden, ich habe gerade den Import angestoßen und bin gespannt ob es klappt. Das Gentoo/Funtoo-Overlay konnte ich schon testen, bei mir funktionierte es.
- Simdock jetzt mit Compositing und GTK3
- Ideen für Simdocks nächste Dekade
- Simdock 1.5: Vektorgrafiken
- Simdock und die richtige Animation
- PPA für simdock