Updates on CoverSwitch

Es ist etwas Zeit vergangen seit meinem letzten Post – hatte einfach nichts zum Berichten.
Nun ich war diese Woche endlich wieder fleißig und habe die Probleme mit TwinView in meinem CoverSwitch Effekt behoben. Also auch die Nutzer von zwei Monitoren können nun endlich in den Genuss kommen 😉
In der Zwischenzeit hat auch der PrĂ€sident der KDE e.V. einen Blick auf meinen Effekt geworfen und gleich an der Stelle verbessert wo ich per Definition versage: Design. Er hat die Farbwahl bei der Spiegelung etwas verĂ€ndert und das sieht wirklich gut aus 😉 Seht selbst:
CoverSwitch

Ach fĂŒr alle Freunde von Eye-Candy: der Wobbly-Windows-Effekt wurde heute in das KDE Repository hochgeladen. Habe es vorhin ausprobiert und der Effekt ist echt sehr gelungen – ich merke keinen Unterschied zu Compiz 😉

Was ist so besonders an diesem Post?

Der Eintrag ist in einem WebKit Browser geschrieben.
Ich habe dieses Wochenende mal die KDE 4.1 pre pre alpha (oder wie man so was nennt) gebaut und bin gerade in einer KDE 4.1 Session. Als kleine Zugabe hab ich auch mal den WebKit Part fĂŒr Konqueror gebaut und ja er funktioniert 😉 Ein langer Wunsch geht in ErfĂŒllung: WebKit Browser.

KDE 4.1 macht jetzt einen sehr guten Eindruck. Klar es ist noch eine Alpha und an ein paar Stellen harkts (Systray wird nicht neu gezeichnet), aber ich glaube ich werde es nun produktiv einsetzen. Das liegt aber eher daran, dass ich zum Bauen von KDE 4.1 Qt 4.4 benötige und das macht Plasma aus KDE 4.0 fast unbenutzbar.

Ich hab jetzt auch Amarok und Kontact in der KDE 4 Variante 😉

KBlogger

Kubuntu KDE 4 Hardy Heron enthĂ€lt KBlogger, ein Programm zum Erstellen von Blog EintrĂ€gen und zum Uploaden zum Blog. Diesen Eintrag schreibe ich gerade mit KBlogger zum Testen. Erster Eindruck ist sehr positiv. Ist zwar noch laut Beschreibung Alpha, aber es sollte das Leben mit meinem Blog einfacher machen 😉

Konqui ist tot – es lebe Konqui

Nach zwei Monaten schwerer Krankheit ist heute durch ein Upgrade auf Hardy Heron Alpha 6 KDE 3 auf meinem Rechner gestorben. Was sich bereits im Januar andeutete, konnte nun vollendet werden: der Nachfolger KDE 4 lebt und hat nur noch wenige Verweise auf die alte KDE 3 (amarok, kile, k3b, kdevelop, kaffeine, …). Und auch diese wenigen Überbleibsel werden wohl im nĂ€chsten halben Jahr sterben.

KDE 3 du warst ein guter Partner. Du hast mich zu Linux gebracht und mir den Anfang vereinfacht. Du hast tolle neue Software bekommen, die bei mir zum Standard wurden. So z.B. Kontact und kaffeine. Nun bist du aber in die Jahre gekommen. Viele deiner Teile waren kaum noch wartbar. So wurde ein Nachfolger fĂŒr dich entwickelt. Dieser dein Sohn hat dir am 11. Januar eine tödliche Wunde versetzt. Du der ergraute König bist tot – es lebe der König.

TwinView sucks…

Ich hab mich heute einem Bug gewidmet, der bei meinen Desktop Effekten mit TwinView auftritt. Das Problem ist, dass TwinView den Desktop erweitert. Also wenn man zwei Monitore mit 1280×1024 hat, wird daraus “ein” virtueller Monitor mit 2560×1024. Wenn man nun ĂŒber die ganze Breite zeichnet und die Fenster nach der Mitte ausrichtet kann man sich denken was passiert 😉

Zu meiner Verteidigung: ich kenne halt die KDE API noch nicht so gut und wenn es in Qt eine Klasse gibt, die mir die Dimension des Desktops liefert, dann nimm ich die halt. Leider beachtet dies halt nicht TwinView.

Da ich nun einen neuen Monitor hab, kann ich das jetzt auch mal ausprobieren. Außerdem wurde ein Bug dafĂŒr geöffnet. Ich muss den Effekt so Ă€ndern, dass er nur auf einem Bildschirm erscheint. Also was macht man als guter Informatiker? Richtig, man schaut sich an wie es andere gelöst haben. Quellcode von PresentWindows angeschaut und einen Aufruf effects->clientArea(…) entdeckt, der ein QRect zurĂŒckliefert, also genau das was ich eigentlich brauche. Ein Blick in die API bestĂ€tigt sofort meinen Verdacht: ich hab es falsch gemacht und clientArea(…) ist der richtige Weg. Also schnell mal geĂ€ndert, mich schon gefreut, dass es gar nicht so viel Arbeit war und: nichts.

OpenGL macht mir einen Strich durch die Rechnung. clientArea(…) liefert mir zwar nur die Geometrie eines Bildschirms, aber wenn ich in OpenGL die Perspektive (3D) aufspanne, geschieht das wieder ĂŒber den gesamten Bildschirm. Schön jetzt hatte ich zwar nur noch 1280×1024, male aber mittig in die 2560×1024. Also alles noch nichts gebracht.

An dieser Stelle setzt das Martin Syndrom ein. Anstatt eine Pause zu machen und nachzudenken (und den einfachen Weg zu finden) fange ich an einen Workaround zu programmieren. Ich vergleiche die gesamte Auflösung mit der Auflösung eines Monitors. Wenn die unterschiedlich sind, dann lĂ€uft TwinView. Nun nehme ich also fĂŒr die Perspektive die gesamte “virtuelle” Auflösung, verschiebe aber das Zeichnen in den linken oder rechten Bildschirm. Yeah: funktioniert.

So nun kommt TwinView ins Spiel: zwei Bildschirme nebeneinander ist ja logisch, aber TwinView kann mehr. Man kann auch Bildschirme ĂŒbereinander anordnen (wer sich das ausgedacht hat?). Nun hier wird es interessant. Auf dem unteren Bildschirm ist alles in Ordnung. Nur auf dem oberen da gibt es Probleme. Mein CoverSwitch Effekt nutzt ja Spiegelung. Das ist natĂŒrlich nur eine Pseudospiegelung. Ich spiegel alle Fenster, male dann eine semi-transparente silberne FlĂ€che drĂŒber und male dann alle Fenster normal obendrĂŒber. Das ergibt bei einem Monitor das GefĂŒhl von Spiegelung. Hier hab ich mal wieder die Rechnung ohne TwinView gemacht: natĂŒrlich werden die gespiegelten Fenster nicht komplett dargestellt. Irgendwo werden sie an der unteren Bildschirmkante abgeschnitten. Was passiert wenn man nun einen zweiten Bildschirm darunter ausrichtet? Richtig, sie werden weitergezeichnet. NatĂŒrlich ohne die SpiegelungsflĂ€che, weil ein bißchen gedacht hab ich ja schon und zeichne natĂŒrlich nur im sichtbaren Bereich. Der Test sah echt toll aus (vor allem da die Bildschirme nur virtuell untereinander angeordnet waren).

Hier beginne ich mein Hirn einzuschalten. Ich ĂŒberlege mir, ich muss das irgendwie abschneiden. Also eine clipping plane einziehen. Beim Lesen der OpenGL Doku fĂ€llt mir dann endlich die Lösung ins Auge: Viewports. Ich definiere einfach nur einen Zeichenbereich. NĂ€mlich den, den mir clientArea() liefert. Keine ÜberprĂŒfung mehr bin ich links, rechts, oben oder unten. Einfach das Zeichnen auf einen Monitor einschrĂ€nken. Also Workaround auskommentiert glViewport() eingebaut, ausprobiert und ja es funktioniert. Zumindest links und rechts. Oben und unten hatte ich keine Lust mehr. Jetzt gibt es nur noch eine alles entscheidende Frage, die morgen an die Mailinglinst geht: darf ich viewports ĂŒberhaupt benutzen oder gibt es irgendwelche ungeahnten Komplikationen mit schlecht geschriebenen Grafikkartentreibern? Ich denke aber ja.

Fazit nach einem Tag mit TwinView (zweiter Monitor ist mittlerweile ausgeschaltet): das ist ein großer MĂŒll. Beim Programmieren war es bedingt angenehm auf dem zweiten Monitor die API Referenz zu haben, aber ansonsten ist das nur ein MĂŒll. Kaum etwas funktioniert so wie man es erwartet und wenn die Monitore nicht perfekt nebeneinander angeordnet sind, ist es einfach nur störend.

Spiegelung und Zeitlupe

Ich hab an meinem Cover Switch Effekt weitergearbeitet und noch ein paar nette Features eingebaut. Das beste ist natĂŒrlich: Spiegelung. Jedes Fenster wird nun an einer transparenten, dunkel grauen FlĂ€che gespiegelt. ZusĂ€tzlich hab ich nun eine Start- und Stopanimation eingebaut – mit schönen Ein- und Ausblendeffekten (zum Beispiel wird das Panel transparent).

Hab mir auch ein paar Inspirationen direkt an der Quelle geholt. Schön, dass es im Saturn einen Apple Store gibt 😉 Eins habe ich direkt umgesetzt: man kann nun Zeitlupe aktivieren. Einige weiter Ideen werde ich auch noch implementieren. E.g. beschleunigen und abbremsen der Animation.

Das ganze berechtigt natĂŒrlich wieder zu einem Video. Leider sind die Details nur schwer erkennbar. Also da mĂŒsst ihr wohl auf KDE 4.1 warten, um es im Detail betrachten zu können. Im Gegensatz zum Flip Switch ist das jetzt ein Effekt, bei dem ich mir vorstellen kann ihn selber zu benutzen 😉 Jetzt brauchen wir den Effekt nur noch in Amarok um iTunes zu imitieren 😀

Cover Switch Effect

Ich hab mal wieder ein bisschen an meinen KWin 3D-Effekten gespielt und nun den (vormals als Ring Switch bekannten) Cover Switch Effekt von Compiz Fusion nach implementiert. Dieser Effekt ist ein weiterer Alt+Tab Fensterwechsler, bei dem ein Fenster in der Front angezeigt werden, die restlichen links und rechts jeweils um 60 ° gedreht angezeigt werden. Beim Wechseln der Fenster erscheint natĂŒrlich eine Animation. Das linke Fenster wird zum Front-Fenster, das Front-Fenster geht zu den rechten Fenstern. Eine Animation zu Beginn und Ende des Fensterwechselns fehlt noch, wird aber noch implementiert 😉

Diesmal hab ich auch wieder ein Video, also seht selbst: