Screensaver & Quartz Composer
bodysoulspirit
Membre
Bonjour à tous,
Nouveau sur le forum en tant que rédacteur, pas nouveau en tant que lecteur
Voilà , je déborde de fichiers .qtz, crées dans le but d'en faire des économiseurs de veille, mais voilà , quand je les poste sur des sites tel que DeviantArt, les gens galèrent pour les mettre dans leur dossier "screenSaver"... Enfin, je voudrait creer ces fameux ".saver" pour faciliter les choses ...
Bon quartz je maà®trise plus ou moins, Xcode, je en comprend pas grand chose, j'ai crée un premier Screensaver à l'aide de ce tutoriel : http://cocoadevcentral.com/articles/000088.php, mais je n'ai nulle part trouvé sur internet un tutoriel expliquant la façon d'introduire un .qtz dans un projet .saver...
Alors, peut etre connessez vous un tutoriel pouvant m'aider, ou quelqu'un pourrait t'il me donner des consignes ou me faire un petit template-example ?
un grand merci d'avance,
MAxime
Connectez-vous ou Inscrivez-vous pour répondre.
Réponses
Je ne saurais pas te renseigner directement personnellement, n'ayant jamais fait ça.
Mais je peux déjà en attendant t'orienter vers des posts causant déjà du sujet sur ce forum.
1) Le projet d'économiseur d'écran "Fenêtres Volantes", dont tu as sans doute entendu parler puisqu'il a fait un petit buzz sur le net, a été conçu ici. Tu trouveras le fil de discussion associé ici. Bon il fait 50 pages, va falloir lire en diagonale, mais au final la version qui est sortie est un .saver avec du binaire dedans (donc du vrai code quoi) pour "amorcer/désamorcer" le screensaver (capture des images des fenêtres, activation du screensaver... et sortie de l'économiseur d'écran à la fin), et un QTZ pour le reste de l'animation. Donc ça revient à ce que tu veux faire, un QTZ à la base mais piloté et encapsulé dans un code source fait avec XCode.
2) Sinon tu as Ce topic qui cause de l'interfaçage entre un QTZ et du code Cocoa
Voilà je te laisse déjà explorer ces pistes
En effet, Fenetres volantes est un super fond d'écran que je connaisssait bien avant de connaitre cocoa et j'ai pu découvrir au fil des 50 pages quil avait été concu ici. C'est pourquoi je me tourne vers ce forum. Alors, en effet, dans le fil de discuss, on voit l'évolution, mais Boris donne ses qtz et Bru les introduits dans un .saver mais pas d'explication sur ce faire.
Dans le second fil de discussion, on parle aussi de qtz dans un .saver, mais a part parler du fait qu'on peux utiliser les inputs et outputs dans xcode, la base me manque encore...
En gros, pour un saver basé uniquement sur un qtz, une fois la classe importée et le .qtz aussi, comment et ou l'appeller ? C'est cela ma question...
See you later alligator
1. créer le projet Xcode qui va bien.
Par chance, y'a un template qui existe : new project>cocoa>screen saver module.
2. le nouveau projet sera prérempli avec une sous-classe ScreenSaverView que tu vas devoir compléter.
3. mets ton qtz dans les ressources du projet.
4. modifie la méthode initWithFrame:isPreview: comme suit :
5. ajoute/modifie les méthodes startAnimation et stopAnimation :
6. enfin ajoute la méthode hasConfigureSheet :
7. Tu peux supprimer toutes les autres méthodes de la sous classe.
8. compile puis installe le module screensaver.
Dans l'exemple, le qtz que tu as déposé dans les ressources du projet se nomme mon-qtz.qtz.
Ce que je viens d'écrire est le squelette de base.
Il pourra être enrichi, notamment en utilisant les inputs du qtz (c'est à dire en passant des paramètres du screensaver vers le qtz).
Voilà .
.
Merci Bru, enfin quelques éclairsissement sur ce sombre et pourtant simple passage.
Toutefois, lorsque je suis ton tutoriel, j'ai quand meme quelques problemes.
- Faut t'il quand meme charger le Quartz.framework ?
- Pour introduire le .qtz dans ressources, il suffit bien de faire "action->add->Existing file->choisir le .qtz" ?
- Dans ton code, dois je spécifier le chemin du .qtz? car il ne semble pas le trouver... (je l'ai pourtant mis dans le dossier mère du projet.
je te met les erreurs en fichier joint
Merci...
Ce sont des erreurs typo...
Pour le staticaly allocated ... error
Il semble qu'un manque juste un *:
NSString * cheminQtz
Pour le undeclare suivant, je pense que QCView devrait-être le nom que tu pourrais donner à ta sous classe de ScreenSaverView que tu implémentes ici. remplaces QCView par le nom de ta sous classe perso si tu veux et ça devrait coller.
Pour le self lValue assignement erreur c'est une étourderie de débutant :P .
Pour tester une égalité on utilise == et non pas = seul qui est ici une tentative d'assigner la valeur de droite à l'Objet à gauche.
L'incompatible type assignement suivant vient de la première erreur (NSString au lieu de NSString *)
Pareil, me semble-t-il pour l'erreur suivante.
.
[EDIT] correction typo (décidément !)
Il manque l'étoile lors de la décla du chemin du qtz, et des parenthèses dans le premier if de la méthode initXXX. Enfin, il manque le point-virgule à la ligne [qtz setFrame:frame].
De plus, je n'ai pas vraiment mis les indications des frameworks/#import à faire...
Mais tout est dans la doc Apple !
Pour ajouter le qtz au projet : fais un drag 'n drop du fichier qtz vers la fenêtre du projet Xcode au dessous du groupe "Resources" (dans la partie gauche de la fenêtre). Xcode te demanderas s'il faut ajouter ledit fichier : vérifie bien que l'option "copy" soit bien cochée avant de valider.
Sinon, en effet, faut ajouter à ton projet le framework Quartz.framework.
Toujours dans la partie gauche "Groups and files", tu fais un clic droit sur le groupe Framework, puis "add existing framework", enfin navigue jusqu'à "System/Library/Frameworks/Quartz.framework" pour ajouter.
Enfin, faut ajouter le #import qui va bien : je pense que #import <Quartz/Quartz.h> devrait suffire.
Sinon, je suis au boulot sur un moche PC, d'où le code tapé à la va-vite et non testé.
Ce soir, je pourrais te fournir le code de "Fenêtres volantes" concernant la partie qtz.
.
Bon, je parviens plus ou moins avec vos indications Un grand merci d'ailleur!
Il semble que seul 2 petites erreurs subsistent...
Mais ClicCool, Le nom de la sousClasse, tu veux dire _View.M ?
Je met le log en Fichier Joint si vous pouviez me dire ce qu'il reste encore à changer
Relis aussi le IF qui va pas : je ne l'ai pas écrit comme ça.
.
- Pour le If, j'ai mis un double == suite aux conseils de ClicCool, sinon, si je ne le fait pas, il me met un Invalid IValue in Assignement (comme sur le log joint.
- Que dois-je changer dans le chargement du module? "CheminQtz" ? Dois je le remplacer par le nom du Qtz?
(il est corrigé).
.
Oui, c'est bon, ca marche nickel ! Maintenant je vois comment il faut faire.
Par contre, je suis déçu. Je pensait que le fait de mettre un .qtz avec un module de récuperation de l'image écran, (ce qui fonctionne parfaitement si on utilise le .qtz directement comme économiseur en le placant dans le dossier screensaver) cette fonction serait reprise une fois le qtz dans le .saver, ce qui n'est pas le cas...
C'est dommage, cela aurait été vachement plus simple que les inputs définis dans le .qtz et non rappellés dans le projet Xcode, soit par défaut appellés par le .qtz seul.
Je joins le projet :
Donc, un input de capture d'écran dans le .qtz, doit etre lié dans le projet xcode.
Comment lier les inputs .qtz avec Xcode, ca je devrait trouver sur le web, par contre, quel est le code/la classe qui correspond à la capture d'écran dans xcode ?
Savez vous ou je pourrait trouver de la doc la dessus?
Merci pour le débutant...
Mais le débutant, il te dis que t'es un peu à coté de la plaque.
Car c'est bien une assignation que je veux faire dans le IF !
Ensuite, je teste le résultat de cette assignation.
L'erreur provient du manque de parenthèse pour bien séparer le code assignation du code test.
.
J'ai joint le projet dans mon message précédent.
Juste une petite explication détaillée pour la ligne
En fait il faut mettre autant de parenthèses que ça et un "=" au lieu d'un "==" parce que la ligne est une version condensée du code équivalent suivant :
Donc dans la paire de parenthèses la plus à l'intérieur, il y a un "self = machin", c'est l'affectation.
Et on profite de cette ligne pour tester si ce "self" est ensuite nil, et si c'est le cas directement retourner nil sans attendre.
[tt]if (var)[/tt] est équivalent à [tt]if (var != nil)[/tt] ou [tt]if (var == true)[/tt], et donc [tt]if (!var)[/tt] est équivalent à [tt]if (var == nil)[/tt] ou [tt]if (var == false)[/tt].
Mais si tu mets juste [tt]if (self = valeur)[/tt] le compilateur te met un warning car il pense que c'est uen faute de typo que tu as faite, en écrivant "=" là où il s'attend habituellement à voir un "==" (c'est plus probable d'avoir une coparaison, donc "==" dans la condition d'un "if" qu'un simple "=" qui est souvent le résultat d'une faute de frappe). Pour ne pas qu'il te mette le warning, il faut mettre des parenthèses supplémentaires pour d'une certaine façon indiquer au compilateur "oui oui c'est un "=" et pas un "==" mais c'est voulu et délibéré, pas une faute". Donc [tt]if ((self = valeur))[/tt] ou [tt]if ((self = valeur) != nil)[/tt]. Ou dans le cas qui nous intéresse (puisqu'on teste la condition inverse, si c'est nil), [tt]if (!(self = valeur))[/tt] ou [tt]if ( (self=valeur) == nil )[/tt]. La première syntaxe étant plus conseillée que la seconde.
Voilà , je trouvais que ça méritait explication vu que c'était une ligne condensée et avec une subtilité dont on n'a pas tous l'habitude (et en plus Bru a répondu au message le temps que je rédige celui-ci ;D)
Ahrg, zut ...
Je me disais aussi que c'était trop beau comme occasion pour te taquiner (depuis le temps ...)
Ceci dit moi aussi:
- c'était juste pour aider (je n'avais pas eu l'occasion d'approfondir assez ce que tu veux faire)
- je suis aussi sur un moche PC au travail en ce moment
On est dans le même sac pour le coup: voilà ce qui nous arrive quand on veux aider sans en avoir véritablement les moyens et le temps
Grilled par le grilleur à retardement officiel du site !
c'est pô bien ça :P
Merci pour les explications Ali.
J'ai pas été assez attentif au code de Bru et me suis bêtement fié à ce que disait xCode ...
C'est pas mon jour on dirait ...
Lorsque le qtz démarre sa capture d'écran, le screen-saver est déjà lancé, donc l'écran est noir.
Aussi, c'est du noir que le qtz capture et affiche.
.
Bon, je suis en train de lire toute la doc cocoa sur le ACD Apple... Ca fait un paquet !
Mais, j'aurait quand meme quelques questions a te poser a l'avenir je pense, car récuperer la capture d'écran et ce genre de choses, je ne vois pas ou ils en parlent.
Sinon, ta proposition du code concernant le qtz de fenetres volantes m'interesse toujours...
Bonne soirée,
maxime
Bru, ton exemple de code marche nickel, mais j'ai toujours un petit problème que je ne parviens pas à régler.
- Dans la fenêtre des préférences système, le preview du saver ne s'affiche pas correctement. En effet, il s'affiche en petit en haut à droite de l'espace réservé au preview...
Deuxième question si quelqu'un pouvait m'aider, comment implementer une capture d'écran dans un .qtz importé dans un .saver? (le qtz ayant un input nommé "capture" à cet effet)
Ne trouvant aucun tuturiel ni exemple sur internet me permettant de résoudre ces probelemes, je me permet de demander de laide dans ce fil.
Merci de votre aide.
Re-salut les gars
Je déterre mon vieux post
Entre temps pas mal de choses se sont passées.
J'ai mis sur le web mon petit screensaver iOS 7 qui a été téléchargé plus 300 000 fois et ayant été commenté sur pas mal de magazines en ligne mac Content.
Voir ici: http://bodysoulspirit.weebly.com/ios-7-screensaver-for-mac-os-x-by-bodysoulspirit.html
Bon entre temps j'ai pas appris l'objective d'avantage.
Mes 2 questions sont les suivantes:
1 - Y a t'il quelqu'un qui voudrait collaborer avec moi et encapsuler le .qtz dans un .saver avec un panel d'options ? En effet, Quartz gère mal la sélection de fichiers sur l'ordinateur, et ce serait bien de pouvoir avoir un diaporama d'images plutôt qu'une image seule.
2 - Y a t'il quelqu'un qui voudrait se joindre à nous pour un projet d'application plein écran qui affiche les infos des morceaux écoutés sur iTunes & Spotify. Un mini Front Row quoi. On est 2 pour le moment, mais l'appui connait encore quelques bugs.
Une page d'aperçu du projet ici: http://bodysoulspirit.weebly.com/fullscreen-music-player.html
Voilaaaa,
Si y'a quelque'un c'est cool.