SWF Screensaver Eine neue Version des SWF Screensaver for Mac kann heruntergeladen werden. Neu ist ein interaktiver Modus und die Unterstützung von Silverlight. Außerdem werden einige kleinere Probleme behoben.

Wer SWF Screensaver for Mac nicht kennt: Es handelt sich dabei um ein schlankes Development-Kit (keine Applikation) zum Erstellen von Flash- und Silverlight-Bildschirmschonern. Ein vorgefertigtes Screensaver-Paket wird einfach im Finder geöffnet. Über eine Einstellungsdatei wird der Screensaver konfiguriert, z.B. wie die initiale HTML-Datei heißt. Beliebige Inhalte werden in das Paket hineinkopiert und über die HTML-Datei eingebunden und ausgerichtet. Also ideal für Webentwickler/-designer.

Interaktiver Modus ermöglicht Maus- und Tastatureingaben

Nach Features wie Online-Check oder Debug-Modus gibt es nun in diesem Release einen sogenannten interaktiven Modus. Aktiviert man diesen, beendet sich der Screensaver beim Bewegen der Maus nicht. Dadurch kann der Nutzer mit dem Bildschirmschoner interagieren (z.B. Sachen anklicken oder Tastatureingaben machen).

Ich hatte schon mehrere Emailanfragen, die sich dieses Feature gewünscht hatten. Ein besonders hartnäckiger Nutzer konnte mich nun letzte Woche überzeugen, diese Feature umzusetzen…

Selbstverständlich muss es eine Möglichkeit geben, den Screensaver zu beenden. Dies funktioniert über eine Bridge vom ExternalInterface in Flash zur einer JavaScript-Funktion mit den Namen quit, die letztendlich im Cocoa-Screensaver in Empfang genommen wird.

Ein Flash-Beispiel liegt dem Download bei.

Screensaver mit Silverlight erstellen

Silverlight LogoEndlich habe ich die Zeit gefunden, den SWF Screensaver for Mac auch mit Silverlight auszutesten. Funktioniert alles prima, wie das folgende Video zeigt. Im Video wird eine HTML-Seite mit einem Silverlight-Video in das Screensaver-Paket kopiert und anschließend gestartet.

Voraussetzung ist – wie auch bei Flash – lediglich das installierte Silverlight-Plugin. Somit kann für das Authoring von Screensavern für den Mac auch Silverlight verwendet werden.

Läuft der Screensaver im Vorschaumodus?

In manchen Fällen kann es vorkommen, dass man in den Systemeinstellungen im Vorschaumodus eine andere Darstellung möchte als im eigentlichen Screensaver. Zu diesem Zweck gibt es in JavaScript nun die Eigenschaft swfscreensaver.previewMode. So kann über die JavaScript<>Cocoa-Bridge abgefragt werden, in welchem Modus der Screensaver gerade läuft.

JavaScript:
  1. if (swfscreensaver.previewMode) {
  2.     // do something in preview mode
  3. }
  4. else {
  5.     // do something when the screensaver is actually running
  6. }

Über diese Fallunterscheidung kann man z.B. eine andere SWF-Datei laden oder eine andere Ausrichtung/Skalierung wählen.

Binary Patcher

Nach langer Recherche konnte ich herausfinden, dass ein ziemlicher dummer Bug bzw. Sachverhalt in den Systemeinstellungen zu Problemen führt. Alle installierten Bildschirmschoner auf dem Rechner werden beim Öffnen der Systemeinstellungen in den gleichen Adressraum geladen. Deshalb dürfen die Modulennamen — also der Name der Hauptklasse des Screensavers — nicht gleich sein. Hat man mehrere SWF Screensaver gleichzeitig installiert, wird darum die Vorschau nicht richtig aktualisiert. Es wird einfach immer die gleiche angezeigt, da er aufgrund der identischen Klassennamen durcheinander kommt.

Leider lässt sich dies nicht ohne weiteres beim Programmieren lösen, da sich der Name der Hauptklasse beim Kompilieren nicht dynamisch ändern lässt. Ich müsste quasi den SWF Screensaver für jeden Bildschirmschoner-Ersteller mit einem individuellen Klassennamen kompilieren. Spätestens bei einem Update ein hoffnungsloses Unterfangen …

Den „Binary Patcher” sollte man in zwei Fällen benutzen: Zum einen, wenn man mehrere SWF Screensaver beim Entwickeln gleichzeitig installiert hat (damit die Vorschau und das Konfigurationsfenster korrekt funktionieren). Zum anderen, bevor ein fertiger Screensaver ausgeliefert wird (um zu vermeiden, dass er sich mit einem SWF Screensaver von jemand anderem in die Quere kommt)

Die Lösung ist folgende: Ich habe ein kleines Bash-Skript („Binary Patcher”) geschrieben. Man muss einen neuen Klassennamen mit genau 18 Zeichen eingeben, der dann in der Binärdatei ersetzt wird! Das Skript wirft übrigens eine Fehlermeldung mit der Anzahl der Zeichen aus, falls diese nicht stimmt.

Das folgende Video zeigt, wie es geht.

Hier die Anleitung noch einmal in Textform:

  • den Ordner „Binary Patcher” auf die eigene Festplatte kopieren
  • das Terminal starten
  • cd eintippen und den Ordner ins Terminal ziehen. Bestätigen, um in dieses Verzeichnis zu wechseln
  • Mit ./BinaryPatcher.sh das Skript starten
  • Jetzt einfach einen individuellen Namen mit genau 18 Zeichen eingeben.
  • Das Skript erstellt die Datei SWF Screensaver for Mac. Diese kopiert man in das Screensaver-Paket unter Content/MacOS und ersetzt die dortige Datei

Link: SWF Screensaver for Mac