Projet d'économiseur d'écran

1568101125

Réponses

  • AliGatorAliGator Membre, Modérateur
    novembre 2005 modifié #212
    iBook G4 1.07GHz
    MacOS X.4.3, 768 Mo de RAM
    Carte ATI 32Mo (Quartz Extrême géré), écran 12" (1024x768)

    Ca tourne à  20fps en plein écran. (et 60fps en mode fenêtre, si je modifie pas la taille qu'a la fenêtre du Viewer à  l'ouverture du projet QC)

    (Et oui, pour l'effet de "transition sèche" en effet c'est un problème de résolution d'écran ;) en fait :D)
  • Vinc26Vinc26 Membre
    02:58 modifié #213
    Salut tout le monde  :)

    Ca fait une petite semaine qu'on a plus de nouvelles de Boris  :'( Que t'arrive-t-il ? Rien de grave ?

    Bon, aujourd'hui, je vais relancer SuperMic...il y a 15 jours, ilm'avait dit "a dans 15 jours !" alors...

    Et puis je viens aussi de prendre connaissance de cet article http://highschoolblows.blogspot.com/2005/11/take-screenshot-of-dvd-player-in-os-x.html qui parle de l'utilitaire de capture en ligne de commande... si finalement il nous permettait de chopper le contenu de n'importe quelle fenêtre. Je ne sais pas.

    A très vite à  tous ! (Hey ? Boris :  :why?:)
  • GenoseGenose Membre
    02:58 modifié #214
    dans 1133463614:

    Salut tout le monde  :)

    Ca fait une petite semaine qu'on a plus de nouvelles de Boris  :'( Que t'arrive-t-il ? Rien de grave ?

    Bon, aujourd'hui, je vais relancer SuperMic...il y a 15 jours, ilm'avait dit "a dans 15 jours !" alors...

    Et puis je viens aussi de prendre connaissance de cet article http://highschoolblows.blogspot.com/2005/11/take-screenshot-of-dvd-player-in-os-x.html qui parle de l'utilitaire de capture en ligne de commande... si finalement il nous permettait de chopper le contenu de n'importe quelle fenêtre. Je ne sais pas.

    A très vite à  tous ! (Hey ? Boris :  :why?:)


    notre probleme est de trouver un access a des references vers les instances des fentres donc l'api privé du window server, et là  perso j'ai vu le coté obscure de l'api et une alternative tout aussi peu clair pour moi. (et l'inter app communication ?!)

    en gros on ne peut que avoir aujourd'hui comme tout le monde ici le sait que les fenêtre de l' appli active (SuperMic).

    @+
  • boris cargoboris cargo Membre
    décembre 2005 modifié #215
    bonsoir, après une semaine de relache je revient avec une nouvelle version. Vinc je n'inclut pas les modifs que tu fais pour etre sur d'avoir un truc que je controle, mais au final on pourra mettre ton bouton on/off ou tout autre chose. J'ai repris tes images et l'idée du dégradé au premier plan, juste j'ai ajouté une apparition/disparition. J'ai ajouté la gestion du Z suivant le numero de fenetre (voir le croquis au dessus). Corrigé ce problème de tête en bas.

    Voilà  c'est la version18, j'ai un peu nettoyé pour simplifier. Toujours des problèmes avec les reflets. Il faudrait que les fenetres n'aillent pas si bas...

    J'espère que SuperMic pourra filer un coup de main ça serait dommage que ça reste en plan maintenant...

    [Fichier joint supprimé par l'administrateur]
  • Vinc26Vinc26 Membre
    02:58 modifié #216
    Désolé, j'ai un boulot fou. Je regarde à  tout ça demain matin ;)
  • gnomezerognomezero Membre
    02:58 modifié #217
    pas mal du tout Boris.
    Chapeau.
  • Vinc26Vinc26 Membre
    02:58 modifié #218
    Ayé ! je donne enfin des nouvelles !

    Donc oui, une fois de plus bravo !

    Oui, ok, j'avais bien compris que tu n'integrerais mes modules qu'à  la fin ;)

    Trois questions :
    - Tu ne m'as toujours pas expliqué pourquoi tu utilises un iterator particulier pour le back aulieu de le traiter comme une simple fenêtre ?
    - En changeant le nombre de fenêtre via pomme+T de cette nouvelle version, ça donne l'impression que ça gère la position en profondeur en fonction du nombre de fenêtre ; l'idée que j'ai postée il y a quelques jours. Est-ce le cas ? parce que je ne le retrouve pas dans ton code...
    - Enfin, sur quoi es-tu en train de bosser ? Qu'améliore-tu ?

    Bon, dans l'attente du retour de SuperMic...  :why?:

    A très vite !
  • boris cargoboris cargo Membre
    02:58 modifié #219
    dans 1133969846:

    - Tu ne m'as toujours pas expliqué pourquoi tu utilises un iterator particulier pour le back aulieu de le traiter comme une simple fenêtre ?


    hum, ya pas de vrai raison; je pourrais la traiter comme un fenetre normale, si ce n'est qu'actuelemment elle a une animation bien différebte des autres.

    dans 1133969846:

    - En changeant le nombre de fenêtre via pomme+T de cette nouvelle version, ça donne l'impression que ça gère la position en profondeur en fonction du nombre de fenêtre ; l'idée que j'ai postée il y a quelques jours. Est-ce le cas ? parce que je ne le retrouve pas dans ton code...

    oui bien sur c'est le cas, ça donne vraiment une impression de profondeur. Ca se situe dans le Macro patch Animation, il y a un patch "Z position variation", il a en entrée le nombre de fenetre et de la fenetre courante. Il divise l'espace  en autant qu'il y a de fenetres, puis on le multiplie avec le numéro de la fenetre courante. Heu c'est comprehensible??

    dans 1133969846:

    - Enfin, sur quoi es-tu en train de bosser ? Qu'améliore-tu ?

    en se moment rien, je bosse sur un autre truc (mais je trouve pas non plus de développeur pour m'aider), il faudrait que je fasse un site avec les compositions et autres macro pour QC que j'ai fait. J'ai un économiseur d'écran d'ailleurs. Enfin deux, j'en avais fais un pour macgé.
  • gnomezerognomezero Membre
    02:58 modifié #220
    Intéressant...on peut zieuter?
  • Vinc26Vinc26 Membre
    02:58 modifié #221
    dans 1133996869:

    dans 1133969846:

    - En changeant le nombre de fenêtre via pomme+T de cette nouvelle version, ça donne l'impression que ça gère la position en profondeur en fonction du nombre de fenêtre ; l'idée que j'ai postée il y a quelques jours. Est-ce le cas ? parce que je ne le retrouve pas dans ton code...

    oui bien sur c'est le cas, ça donne vraiment une impression de profondeur. Ca se situe dans le Macro patch Animation, il y a un patch "Z position variation", il a en entrée le nombre de fenetre et de la fenetre courante. Il divise l'espace  en autant qu'il y a de fenetres, puis on le multiplie avec le numéro de la fenetre courante. Heu c'est comprehensible??

    Oui oui, je vois. Et si j'ai bien compris, c'est un truc que t'as rajouté dans la v18. Et bien perso, je donnerai une profondeur un peu plus importante à  se partager entre toutes ces fenêtre. Tant pis si la plus éloignée est un peu petite. Juste pour voir ce que ça donne.


    en se moment rien, je bosse sur un autre truc (mais je trouve pas non plus de développeur pour m'aider), il faudrait que je fasse un site avec les compositions et autres macro pour QC que j'ai fait. J'ai un économiseur d'écran d'ailleurs. Enfin deux, j'en avais fais un pour macgé.

    Je suis justement en train de réfléchir à  faire un site pour notre économiseur. Ce serai plus simple peut-être, pour que les sites d'actu fassent une news sur le projet, pour que nous trouvions plus de développeurs.

    Bon... SuperMic !!!!!!!!!?????? (ou d'autres !)
  • gnomezerognomezero Membre
    02:58 modifié #222
    dac pour le site wwww. Ca risque de rameuter du monde.
  • Sky.xSky.x Membre
    décembre 2005 modifié #223
    Bonjour :D

    Boris Cargo m'a parlé de ce projet et je le trouve interessant.

    Alors, je vais essayer de vous aider un peu (même si j'ai pas trop de temps en ce moment...)

    - Pour le "VincScreensaverIM.bundle", c'est simplement l'ajout d'une fonction "screenShotForAllWindows" à  toutes les applications cocoa.
    Il faudrait pour l'utiliser faire une boucle sur toutes les applications ouverte et récupérer les .png dans le dossier : "~/Library/Caches/CapturerToutesLesFenetres/".

    Par contre, je pense que ce code n'est pas necessaire.
    En effet :
    http://developer.apple.com/documentation/GraphicsImaging/Reference/Quartz_Services_Ref/index.html

    Il semble qu'on peut avoir une liste des ID des "display" actifs :
    <br />	CGDirectDisplayID * activeDspys;<br />	CGDisplayCount * dspyCnt;<br /><br />	CGGetActiveDisplayList(400,activeDspys, dspyCnt);<br />	<br />	int i;<br />	for (i = *dspyCnt -1; i &gt;0; i--){<br />	<br />		NSLog(@&quot;%i&quot;,activeDspys[i]); // pour voir :D<br />	<br />	}<br />
    


    Et donc récupérer un NSGraphicContext :
    NSGraphicsContext *myGC = [NSGraphicsContext graphicsContextWithWindow: activeDspys];


    Je n'ai aps eu le temps d'essayer par contre...
  • décembre 2005 modifié #224
    Le code qui marche est

    CGDirectDisplayID displays[100];<br />	CGDisplayCount displayCount;<br /><br />	CGGetActiveDisplayList(100,displays,&amp;displayCount);<br /><br />	int i;<br />	for (i=0; i &lt; displayCount; i++)<br />	{<br />		NSLog(@&quot;%i&quot;,displays[i]); // pour voir :D<br />    }
    


    Mais ne récupère que les fenêtres du programme lui même...

    C'est plutôt pour récupérer les écrans (physique) que les fenêtres...
  • Vinc26Vinc26 Membre
    02:58 modifié #225
    Bon, là , d'un, je suis aux anges parce que je vois que pt'êt que c'est parti pour la partie programmation ! et de deux, je vous laisse voir entres vous les gars pour ce qui est de... codes... charabia ! LOL

    :brule:
  • BruBru Membre
    02:58 modifié #226
    dans 1134048431:
    Bon... SuperMic !!!!!!!!!?????? (ou d'autres !)


    Moi, je n'ai jamais abandonné le projet...

    J'ai suivi 2 voies parallèles :
    - le window-warping qui permet la déformation des fenêtres en temps réèl (à  l'image de ce que fait le Dock quand il miniaturise une fenêtre).
    - le window-grabbing qui permet de "prendre une photo" de n'importe qu'elle fenêtre.

    Pour le window-warping, l'avantage est d'avoir des fenêtres déformées qui ont toujours leur contenu actualisé. L'inconvénient est de 2 ordres : il faut patcher le Dock afin d'être autorisé à  modifier les fenêtre n'appartenant pas à  notre appli (ce qui peut être source d'instabilité), et l'api Core Graphics qui permet de faire du warping est n'est pas encore stabilisé (mes exemples de code fonctionnent bien en 10.3, mal en 10.4). J'ai donc, pour le moment, mis de côté cette solution.

    Pour le window-grabbing, c'est ok. En dumpant l'api Core Graphics, puis en faisant du debug, j'ai réussi à  trouver la fonction Core Graphics qui permet la création d'une image de n'importe quelle fenêtre gérée par le window-server. Cette fonction est la même que celle utilisée par la combinaison de touche POMME+SHIFT+3, ou par l'appli Capture (dans les utilitaires), ou encore par la commande screencapture. Je pense donc que c'est assez stabilisé pour être utilisé.

    .
  • Vinc26Vinc26 Membre
    décembre 2005 modifié #227
    Pour le window-grabbing c'est enorme ce que tu nous dis là  ?!!! Et... comment comptes-tu relier ton travail au notres ? Est-ce que ça complete ou est ce que ça remplace les trouvailles de Supermic ?

    Tu pourrais nous poster un exemple d'appli qui grab tout ça ?

    Donc question à  tous : comment on s'organise maintenant ? Qui fait quoi ? Je vous propose que chacun post son point de vue sur la suite des évenements, et ensuite on fait le point et on choisi une direction si elle va a tout le monde. Ca vous va ? Une conférence iChat serait la bienvenue peut-être ? On peut faire sans si ça embête certains.

    Dans l'attente,

    o:)
  • BruBru Membre
    02:58 modifié #228
    dans 1134206812:

    Et... comment comptes-tu relier ton travail au notres ? Est-ce que ça complete ou est ce que ça remplace les trouvailles de Supermic ?


    Non.


    dans 1134206812:

    Tu pourrais nous poster un exemple d'appli qui grab tout ça ?


    Je fais ça immé.

    .
  • BruBru Membre
    02:58 modifié #229
    dans 1134206812:
    Tu pourrais nous poster un exemple d'appli qui grab tout ça ?


    Voilà  !

    L'appli en pièce jointe créé un fichier .png par fenêtre visible à  l'écran. Les fichiers sont mis à  la racine du disque dur, et le nom est "fenetre-XXX.png" où XXX est un numéro (le window-id) pour ceux qui connaissent).

    Sur mon imac G5, avec une 40aine de fenêtres, ça met 22 secondes pour générer tous les .png.

    Note : le fond de l'ecran est une fenêtre (la numéro 1), la barre de menu et chaque icône du finder sur le desktop sont aussi des fenêtres.
    Le Dock et les icônes dans le dock sont autant de fenêtres supplémentaires.
    Enfin, les UI-elements (les mini icônes dans la barre de menu à  droite) sont aussi des fenêtres.

    Bon test.

    .

    [Fichier joint supprimé par l'administrateur]
  • Sky.xSky.x Membre
    02:58 modifié #230
    Et est-ce qu'on peut avoir le code source ? :D
  • Vinc26Vinc26 Membre
    décembre 2005 modifié #231
    Enorme ! Donc ça marche excellement bien.

    bon, en l'état, tu te doutes surement des question que je vais te poser :

    - Est-ce que l'on peut ne récupérer que les "vraies" fenêtres ? (peut-être faut-il faire le tri en imposant une taille mini pour éliminer les barres de menu, dock, et icones ???)
    - Est-ce que dans ta méthode, on peut récupérer les coordonées des fenêtres récupérée ? (pour pouvoir les repositionner dans QC après)
    - Est-ce que l'on peut récupérer leur position en profondeur ? (savoir qui est au premier plan, puis second plan, etc... jusqu'au fond d'écran...)
    - Est-ce que l'on peut ne récupérer par exemple que les 5 premières, puis la dernière ? (tout ça avant d'écrire les fichiers sur le DD pour réduire le temps... et de sorte a ne récupérer que ce dont on a besoin : on sait que sur une machine lente, on ne va pas faire voler 50 fenêtre !)

    Euh... voilà  pour mes premières questions :D

    Je précise bien que toutes mes questions sous-entendent qu'il serait a mon avis bon que tous les tri... etc... soient faits avant écriture sur le disque.
    Et j'y pense : sommes-nous obligé d'écrire tout ça sur le disque dans l'éco d'écran final ? Ou est-ce que ça peut juste être stocké en mémoire ? (plus rapide)

    Mais... franchement : BRAVO !!! Génial ! Le projet avance ! Je suis comme un  :o ! MERCI !!!

    PS : dernière petite question : Bru, tu te sentirais de pondre la partie programmation de cet économiseur d'écran ? En faisant le lien avec la partie QuartzComposer que essentiellement BorisCargo a développée ? Si quelqu'un veut bien t'aider : est-ce que c'est un truc sur lequel vous pourriez partager le boulot en deux ?
  • Vinc26Vinc26 Membre
    02:58 modifié #232
    Non mais vraiement j'insiste ! C'est formidable ! Ca marche avec n'importe quel type de fenêtre ! Les contenus des fenêtre QuickTime sont là  aussi ! Et MEME le contenu de la fenêtre du lecteur de DVD (DVD commercial ou non !).

    BRA-VO !  <3 Ca vaut bien un post juste pour dire à  quel point je suis content !
  • 02:58 modifié #233
    <3 <br />
    Sans rentrer dans les détails et juste pas curiosité, pourquoi c'est aussi lent ?
  • BruBru Membre
    02:58 modifié #234
    dans 1134210066:

    Et est-ce qu'on peut avoir le code source ? :D


    Des heures et des heures de gdb, nm, otool et shark, ça se paye...

    hé hé hé
    .
  • BruBru Membre
    02:58 modifié #235
    dans 1134210296:

    - Est-ce que l'on peut ne récupérer que les "vraies" fenêtres ? (peut-être faut-il faire le tri en imposant une taille mini pour éliminer les barres de menu, dock, et icones ???)


    Oui. Chaque fenêtre à  un window-level qui permet de savoir quelle est sa catégorie (fenêtre standard, palette d'outil, barre de menu, menu, icône de finder, icône de dock, fond d'écran, etc...). Une simple sélection sur ce window-level permet de ne récupérer que les fenêtres "standards".


    dans 1134210296:

    - Est-ce que dans ta méthode, on peut récupérer les coordonées des fenêtres récupérée ? (pour pouvoir les repositionner dans QC après)

    Re oui. On récupère position et taille.


    dans 1134210296:

    - Est-ce que l'on peut récupérer leur position en profondeur ? (savoir qui est au premier plan, puis second plan, etc... jusqu'au fond d'écran...)


    Je ne sais pas encore. Pour récupérer la liste des fenêtres, j'utilise une fonction de l'AppKit NSWindowList. Il faudrait que je teste la position de chaque fenêtre dans la liste récupérée pour voir si elle correspond à  la position de celle-ci en profondeur.


    dans 1134210296:

    - Est-ce que l'on peut ne récupérer par exemple que les 5 premières, puis la dernière ? (tout ça avant d'écrire les fichiers sur le DD pour réduire le temps... et de sorte a ne récupérer que ce dont on a besoin : on sait que sur une machine lente, on ne va pas faire voler 50 fenêtre !)


    Je n'y vois pas de difficulté dès l'instant où on peut connaitre la position de chaque fenêtre en profondeur.


    dans 1134210296:

    Et j'y pense : sommes-nous obligé d'écrire tout ça sur le disque dans l'éco d'écran final ? Ou est-ce que ça peut juste être stocké en mémoire ? (plus rapide)


    Non. La copie du contenu de chaque fenêtre est stockée dans un bloc mémoire (en fait dans une structure CGImage du Core Graphics). Pour la démonstration, c'est moi qui a fait en sorte d'écrire ces blocs mémoire sur disque au format png...

    .
  • BruBru Membre
    02:58 modifié #236
    dans 1134211498:

    Non mais vraiement j'insiste ! C'est formidable ! Ca marche avec n'importe quel type de fenêtre ! Les contenus des fenêtre QuickTime sont là  aussi ! Et MEME le contenu de la fenêtre du lecteur de DVD (DVD commercial ou non !).


    De plus, j'utilise un contexte graphique ARVB pour récupérer le contenu des fenêtres.
    Le A de ARVB signifie Alpha : donc je récupère la couche de transparence (fais l'essai avec une fenêtre semi transparente...).

    .
  • BruBru Membre
    02:58 modifié #237
    dans 1134212784:

    Sans rentrer dans les détails et juste pas curiosité, pourquoi c'est aussi lent ?


    C'est la fonction d'écriture d'une CGImage dans un fichier qui est longue.
    La lenteur provient, à  mon avis, de la conversion de la CGImage (qui est un bitmap non compressé en RVB avec Alpha) vers le format png.

    Avec écriture sur disque : 22 sec...
    Sans écriture sur disque : 2 sec !

    .
  • Vinc26Vinc26 Membre
    02:58 modifié #238
    Que des bonnes nouvelles ! (en attendant celle de la profondeur... question promodiale dans le cas de cet économiseur d'écran)

    Donc, vu que tu tiens à  ton code (ce que je peux comprendre s'il est très spécial et que tu y a passé des heures et des heures ; c'est ton choix), comment envisages-tu la suite ? Ca veux dire qu'il n'y a que toi qui puisse finir le projet ? Ou est-ce que ça fonctionne par module ? As-tu du temps ?

    Et... est-ce que tu pourrais nous tenir au courant de tes avancées... parce que j'étais loinde me douter que t'avancais dans ton coin sur le projet ! Petit cachotier !  ;)
  • Sky.xSky.x Membre
    décembre 2005 modifié #239
    Ok, j'en suis à  :
    Tout est dans CoreFundation et ApplicationsServices (les 2 seuls frameworks associés à  "Grab").

    Il y a une classe NSClip...
    Apparement ils passent pas un service lookup (donc je suppose que via "Apple Event" on peut récupérer la liste des objets affichés par les applications ouvertes...)
    Enfin, il existe des fonctions sympa (CGContextCopyDisplayCaptureContentsToRect) utilisée par capture.

    Bon je continue à  chercher, mais j'ai l'impression d'être loin du but :D

    Au fait pour la profondeur :
    "the order of windows in the array is the same as their order in the window server?s screen list (their front-to-back order on the screen)."
  • BruBru Membre
    02:58 modifié #240
    dans 1134219947:

    Enfin, il existe des fonctions sympa (CGContextCopyDisplayCaptureContentsToRect) utilisée par capture.


    CGContextCopyDisplayCaptureContentsToRect est la fonction qui permet de copier l'écran en entier.

    Si tu continue dans cette voie, tu n'es plus très loin...
    Ou alors tu attends que je publie les résultats de mes recherches ici même (dans Trucs et astuces) !

    .
  • olofolof Membre
    02:58 modifié #241
    Ben chez moi, WindowGrab plante (voir fichier de log)...

    G5 Bi 2.5, 2 Go RAM, Os X 10.4.2, 2 écrans, ....




    [Fichier joint supprimé par l'administrateur]
Connectez-vous ou Inscrivez-vous pour répondre.