Question

Le cacao utilisé pour travailler sur CS3 avec le de mettre un faisceau de cacao à l'intérieur de la principale de faisceau de greffon de carbone, le chargeant à partir de carbone et d'émettre un NSApplicationLoad (). C'est parce que Photoshop CS3 est carbone uniquement et utilisé pour décharger les faisceaux de plug-in.

Photoshop CS4 utilise Cocoa et possède sa propre piscine NSAutorelease en place sur le thread principal.

Sur Photoshop CS4 xibs à base de fenêtres / grué très simples chargés par un NSWindowController travail hors de la boîte.

Mais il suffit d'ajouter une liaison à un contrôle sur la fenêtre et vous obtiendrez des accidents drôles, le cas échéant lorsque vous fermez la fenêtre, ou la deuxième fois que vous utilisez le plug-in, ou même lors de la fermeture Photoshop lui-même.

Pourquoi tout semble bien fonctionner jusqu'à ce que j'utiliser certaines fonctionnalités avancées de cacao? Je suis bloqué.

EDIT : Je me suis vraiment trouvé la solution au problème plus large "Comment utiliser Cocoa dans un plug-in Photoshop CS3 / CS4?". Voir ci-dessous.

Était-ce utile?

La solution

Vous devez créer une nouvelle chargeable Bundle cible contenant vos grué et votre code de cacao. Ajouter le produit bundle à la Copier des ressources Bundle phase de votre plugin. Ensuite, le code pour un plug-in de filtre qui charge une fenêtre Cocoa avec certains contrôles serait:

Boolean DoUI (void) {

    // Create the CF Cocoa bundle
    CFBundleRef pluginBundle;
    CFURLRef cocoaBundleURL;
    pluginBundle = CFBundleGetBundleWithIdentifier(CFSTR("com.example.plugin"));
    cocoaBundleURL = CFBundleCopyResourceURL(pluginBundle, 
                                             CFSTR("Cocoa_bundle"), 
                                             CFSTR("bundle"), 
                                             NULL);
    CFBundleRef cocoaBundleRef;
    cocoaBundleRef = CFBundleCreate(kCFAllocatorDefault, cocoaBundleURL);
    CFRelease(cocoaBundleURL);

    // start Cocoa (for CS3)
    NSApplicationLoad(); 

    NSAutoreleasePool* pool = [[NSAutoreleasePool alloc] init];

    // load the cocoa bundle by identifier
    NSBundle* cocoaBundle;
    cocoaBundle = [NSBundle bundleWithIdentifier:@"com.example.plugin.cocoa"];

    // load the window controller from the bundle
    Class testControllerClass;
    testControllerClass = [cocoaBundle classNamed:@"MyWindowController"];

    MyWindowController* winController = [[testControllerClass alloc] init];
    [NSApp runModalForWindow:[winController window]];
    [[winController window] performClose:nil];
    [winController release];

    // release the bundle
    CFRelease(cocoaBundleRef);

    [pool release];

    return 1;
}

Ceci est basé sur l'affaire Craig Hockenberry bundle . Je suis toujours le tester, mais il devrait fonctionner à la fois sur CS3 et CS4.

Autres conseils

Je viens de commencer à travailler sur la rédaction d'un plug-in à base de cacao pour CS4. Vraiment, il n'y a presque pas d'informations là-bas sur ce sujet, et je l'ai été comme en pensant qu'il je vais.

  • à partir de cet exemple d'Apple, et assurez-vous de télécharger l'ensemble du projet, parce qu'il ya quelques petits détails manquants dans le texte:

Carbon / Cocoa

  • Choisissez un des exemples SDK Photoshop (je ColorMunger), et le garder simple à démarrer, alors essayez simplement de remplacer la boîte de dialogue « A propos », en utilisant l'exemple d'Apple comme modèle. Une fois que vous avez que travailler sans problèmes de mémoire, vous devriez être sur votre chemin.

Je suis un programmeur Java et Ruby pendant 10 ans, donc mon C / C foo est rouillé, et je suis en train d'apprendre Objective C que je vais. Deux « gotchas » Je suis tombé, juste au cas où ....

  • ne créez pas un objet contrôleur dans votre fichier NIB / XIB. Parce que, sur la base de cet exemple Apple, le contrôleur ouvre le fichier NIB dans sa méthode d'initialisation, et vous obtenez une boucle récursive vraiment intéressant
  • L'exemple d'Apple est noyant les choses de cacao dans une application C à base de carbone. Les exemples Adobe sont tous C ++. Ne pas oublier votre extern "C" {} dans votre fichier d'en-tête.

CS2 va charger le code Mach-O PowerPC aussi facilement que CS3 / CS4. Quelqu'un at-il testé cette approche de cacao dans CS2?

Actuellement, j'utilise le carbone pour CS2 / CS3 / CS4 comme cela est garanti pour fonctionner partout les charges de plug-in; et Cocoa pour CS5 bien sûr, que ce soit 32 ou 64 bits.

Chris Cox est pas optimiste quant à Cocoa travailler dans autre chose que CS5: http://forums.adobe.com/message/3256555#3256555

Alors, quelle est la vraie affaire ici? Il est assez difficile d'ignorer les conseils de la bouche du cheval.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top