Finder elegant austricksen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Finder elegant austricksen

    Ich bastle gerade an einem animierten Finder-Schreibtischhintergrund (bitte jetzt nicht fragen, wozu man das braucht - brauchen tut man das nicht wirklich). Dazu nehme ich ein screengroßes Borderless-Window mit Desktop-Windowlevel. Soweit kein Problem.

    Dummerweise scheint der Finder (oder sonstwer) auf dieser Ebene die regelmäßigen Updates der Animation zu verhindern. Sprich: Es animiert nur an der Stelle, an der man gerade ein Desktop-Icon bewegt o.ä. Sämtliches Herumgefummel an den Fenstereigenschaften oder händisches Triggern bringt nichts: Das Fenster, das auf normaler Fensterebene fein animiert, steht dort unten still.

    Einen Trick habe ich gefunden, um das Fenster doch zu einem regelmäßigen Update zu überreden: Mit jedem Update ändere ich den frame origin des Fensters minimal (und gleich wieder zurück). Damit läuft es (fast gänzlich ohne Artefakte).

    Allerdings finde ich diese Lösung nicht wirklich elegant. Hat jemand von Euch eine bessere Idee?
    Multigrad - 360°-Produktfotografie für den Mac
  • RE: Finder elegant austricksen

    So was hat Apple sogar fertig gebastelt:

    Wählt man einen Screensaver aus und führt diesen Befehl im Terminal aus:

    Quellcode

    1. /System/Library/Frameworks/ScreenSaver.framework/Resources/ScreenSaverEngine.app/Contents/MacOS/ScreenSaverEngine -background


    Schwups!
    Aus macfreakz wurde Apfelbeisser …
  • RE: Finder elegant austricksen

    Danke Euch!

    Original von zermelo
    Haben sowas nicht schon einige Leute erfolgreich umgesetzt? Ich bilde mir ganz fest ein, dass es da sogar mal Sample Code gab. Ich glaube irgendwas mit einer Erdansicht, die immer aktuell ist. Oder so.

    Wenn ja, wäre das toll. Hast Du zufällig irgendwo noch einen Verweis darauf? Ich konnte - trotz einigen Suchens - kein brauchbares Beispiel finden.

    Original von Amin Negm-Awad
    Wie hast du denn die Animation implementiert. Über die Event-Loop?

    Jepp, stinknormaler Timer in der Main Event Loop. Ich kann mir aber nicht vorstellen, dass es daran liegt, denn auf anderen Windowlevels läuft es einwandfrei. Der Desktop-Level scheint in einigen Belangen anders gehandhabt zu werden (z.B. wird er von Exposé nicht zur Seite geschoben, was ja auch einen gewissen Sinn ergibt). Oder hast Du eine Idee, wie das mit dem Timer zusammenhängen kann?

    Original von Apfelbeisser
    So was hat Apple sogar fertig gebastelt:

    Stimmt - das ist in der Tat eine elegantere Lösung, zumal mein View zufällig auch ein ScreenSaverView ist. Dummerweise hilft es mir nur wenig, herauszubekommen, wie das Ganze funktioniert (was ich zugegebenermaßen auch nicht gefragt hatte).
    Multigrad - 360°-Produktfotografie für den Mac
  • RE: Finder elegant austricksen

    Original von mattik
    Wenn ja, wäre das toll. Hast Du zufällig irgendwo noch einen Verweis darauf? Ich konnte - trotz einigen Suchens - kein brauchbares Beispiel finden.

    Sorry, ich finde auch nichts mehr. Was aber sicherlich sehr interessant sein sollte für dich ist GeekTool. Das ist eine Hintergrund-App welche dir Text/Consolenfenster auf den Desktop legt. Ich hab damit z.B. immer meine Server und meine Console.log im Auge. Sollte sich wunderbar auch für Deine Zwecke eignen.
    Das ganze war Open Source, irgendwie hat er sich das jetzt wieder ander überlegt. Hier gibt es aber ein Branch mit Quelltext: github.com/balthamos/geektool-3
    C++
  • RE: Finder elegant austricksen

    Original von mattik
    Danke Euch!

    Original von Amin Negm-Awad
    Wie hast du denn die Animation implementiert. Über die Event-Loop?

    Jepp, stinknormaler Timer in der Main Event Loop. Ich kann mir aber nicht vorstellen, dass es daran liegt, denn auf anderen Windowlevels läuft es einwandfrei. Der Desktop-Level scheint in einigen Belangen anders gehandhabt zu werden (z.B. wird er von Exposé nicht zur Seite geschoben, was ja auch einen gewissen Sinn ergibt). Oder hast Du eine Idee, wie das mit dem Timer zusammenhängen kann?

    Richtig schön wie gedacht, kann ich mir das auch nicht denken. Setzt es doch mal testweise in den Common-Mode. (So hieß das Dingens für das Hintergrundrauschen doch!?)
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: Finder elegant austricksen

    Original von Amin Negm-Awad
    Richtig schön wie gedacht, kann ich mir das auch nicht denken. Setzt es doch mal testweise in den Common-Mode. (So hieß das Dingens für das Hintergrundrauschen doch!?)


    Bin jetzt endlich dazu gekommen, das mal auszuprobieren. Scheint was anderes zu sein, Timer läuft fein. Trotzdem gut, das ausschließen zu können.

    Original von ZermeloWas aber sicherlich sehr interessant sein sollte für dich ist GeekTool.


    Guter Tipp, danke. Bei denen läuft's einfach so (die fummeln zwar wild in GCSPrivate rum, aber nur an einer anderen Stelle). Das hat mich eine Ecke weitergebracht: Das Problem taucht nur bei OpenGLauf Desktop-Level auf. Warum das so ist, weiß ich zwar immer noch nicht, aber immerhin bin ich einen Schritt weiter.

    Anbei ein Sample, das das Problem illustriert - je ein OpenGL-View (gelb) und ein normal animierter View (weiß) auf Dokumentfensterebene und auf Desktop-Ebene. 3 von 4 Views laufen, der OpenGL-View auf Desktopebene steht. 10.5 und 10.6. Komisch.
    Multigrad - 360°-Produktfotografie für den Mac
  • RE: Finder elegant austricksen

    hm könnte das eine "optimierung" von apple sein?

    ich hab an meiner OpenGL testapp festgestellt das ein NSOpenGLView bei mir seit den update auf Snow L nicht mehr mehr als 120FPS rendert

    egal wie oft ich flushe oder eine redraw anschuppse es wird definitiv nicht öfter als 120 mal per Sekunde gezeichnet - witzig ist das sogar schon deswegen weil der "rest" (animationsberechnung zb) deutlich schneller werden kann - das hat meine deltatime berrechnung etwas übern haufen geworfen .
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!
  • RE: Finder elegant austricksen

    Original von chartus
    hm könnte das eine "optimierung" von apple sein?

    Schätze ich auch. Aber vermutlich eine andere als die, die Du hast - Dein Phänomen kling ganz nach Coalesced Updates. Apple drosselt schon seit 10.4 standardmäßig die Refreshrate auf die Bildschirmrate, was ja auch recht sinnvoll ist. Viuelleicht haben sie mit 10.6 noch etwas an dem Mechanismus geschraubt. Man kann das grundsätzlich abschalten, aber ist das sinnvoll? Lieber die Animation fps-unabhängig implementieren und im Loop saubere Zeiten nehmen, oder?
    Multigrad - 360°-Produktfotografie für den Mac
  • RE: Finder elegant austricksen

    Ja, klingt für mich auch nach vsync. Ist ja aber nicht schlimm. Wenn ich ein Signal nur mit 30fps abtasten kann, ist es egal, was zwischen den Abtastpunkten geschicht. Animationen werden nicht besser.

    chartus: wenn deine Zeit-bestimmung mit Deiner Framerate zusammenhängt, klingt das nicht so gut, oder?
    C++
  • RE: Finder elegant austricksen

    ja - wie gesagt war bzw ist es eine testapp zum spielen bzw OpenGL lernen und verstehen - und es hat mich halt überrascht das es sich mehr oder weniger plötzlich mit SL geändert hatte

    ich finde das verhalten in so fern auch nicht schlecht oder will es ändern - ich fand nur das es ähnlich klang wie mattiks problem
    snafu
    :() { :|: &};:
    sometimes i dream in hex
    Obey gravity! Because its a law!