Fährt man mit der Maus über die Icons in simdock, vergrößern sich diese in einer Animation. Ich fand das damals ganz nett und habe es drin gelassen, immerhin sieht man so schnell, welches Programm durch einen Klick ausgewählt würde, und es ist deaktivierbar.
Als ich dann später den Code etwas besser überschaute sah ich, dass das geschickt umgesetzt ist: Bei jeder Bewegung des Mauszeigers wird die Distanz zu seinem Mittelpunkt berechnet und die Größe je nach Distanz gewählt. Diese Zoom-Funktion hat einen hübschen Verlauf:
double
zoom (int stand_dev, float dist_center, int maximum_size)
{
return maximum_size * exp (-pow (dist_center, 2) / pow (stand_dev, 2));
}
Für mich sieht das wie eine schöne Animationskurve ist.
Es gab nur ein Problem: Den Mousemove-Event für die Animation mitzubenutzen ist eine naheliegende Lösung, die durch den gesparten Thread/Timer Code und durch wenige geworfene Events CPU spart, dabei vom Nutzer gut zu kontrollieren ist und hinreichend gut aussieht - sie sieht aber eben auch nur hinreichend gut aus. Selbst, nachdem ich die Icongrößenberechnung und Positionsbestimmung so umgeschrieben hatte, dass sich Icons sowohl nach links und rechts (und nicht nur nach rechts) erweitern - was das Bild beruhigen sollte - blieb die Animation immer noch etwas hakelig. Eben genau dann, wenn der Mauszeiger etwas hakelig bewegt wurde, besonders im Grenzbereich zwischen den Icons und beim Sprung von der vorherigen zur Maximalgröße.
So sah es vor dieser Änderung aus:
So mit:
Besser, aber immer noch hakelig. Das Icon selbst, das vergößert wird, ist meist ok. Aber besonders die weiter entfernten Icons und Aktivitätsmarker ruckeln ein bisschen sehr hin und her.
Meine momentane Lösung ist, die Animation von der Mausbewegung zu entkoppeln. In einem Timer, der alle alle 32ms feuert, werden gehoverte Icons animiert vergrößert und die anderen falls nötig ebenso verkleinert, alles unabhängig von der Distanz zum Iconcenter. Das brauchte ein bisschen Optimierungsarbeit, um sauber zu funktionieren und nicht zu viel CPU zu fressen, und man kann sicher noch viel verbessern. Aber bisher bin ich ganz zufrieden.
So sieht die neue Animation aus:
Auf mich wirkt das wesentlich flüssiger, auch wenn ich noch etwas Zeit brauchen werde, um die geringere Kontrolle über die Animation zu verdauen. Netter Nebeneffekt des ganzen ist, dass - entgegen meiner Erwartung und von mir erst nachträglich entdeckt, ich musste diesen Artikel deswegen ein bisschen umschreiben - die CPU-Belastung durch die neue Animation sinkt. In der ersten Variante ging sie während der Animation bis auf 70% hoch, je nach Mauszeigergeschwindigkeit, hiermit pendelt sie auf meinem System unabhängig von der Zeigergeschwindigkeit bei 20%. Das ist immer noch viel, eigentlich zu viel, aber es ist trotzdem besser als vorher.