So implementieren Sie ein Cocoa-basiertes Adobe Photoshop-Plugin

8

Cocoa benutzt CS3 mit dem Trick, ein Cocoa-Bundle in den main Carbon plugin bundle , lade es von Carbon und erstelle eine NSApplicationLoad (). Das liegt daran, dass Photoshop CS3 nur Carbon war und zum Entladen der Plugin-Bundles verwendet wurde.

Photoshop CS4 verwendet Cocoa und verfügt über einen eigenen NSAutorelease-Pool im Hauptthread.

In Photoshop CS4 funktionieren sehr einfache window-basierte xibs / nibs, die von einem NSWindowController geladen werden.

Aber fügen Sie einfach eine Bindung zu einem Steuerelement im Fenster hinzu und Sie werden lustige Abstürze bekommen, wahlweise wenn Sie das Fenster schließen, oder wenn Sie das Plugin zum zweiten Mal benutzen oder wenn Sie Photoshop selbst schließen.

Warum scheint alles gut zu funktionieren, bis ich einige fortgeschrittene Cocoa-Funktionen verwende? Ich stecke fest.

BEARBEITEN : Ich habe wirklich die Lösung für das umfassendere Problem gefunden "Wie verwende ich Cocoa in einem Photoshop CS3 / CS4 Plugin?". Siehe unten.

    
IlDan 13.07.2009, 16:09
quelle

3 Antworten

1

Sie müssen ein neues Loadable Bundle Ziel erstellen, das Ihre Nibs und Ihren Cocoa-Code enthält. Fügen Sie das Bundle-Produkt der Phase Bundle-Ressourcen kopieren Ihres Plugins hinzu. Dann wäre der Code für ein Filter-Plugin, das ein Cocoa-Fenster mit einigen Steuerelementen lädt:

%Vor%

Dies basiert auf dem Craig Hockenberry Bündeltrick . Ich teste es immer noch, aber es sollte sowohl auf CS3 als auch auf CS4 funktionieren.

    
IlDan 10.07.2009, 17:35
quelle
0

Ich habe gerade angefangen, ein Cocoa-basiertes Plugin für CS4 zu schreiben. Wirklich, es gibt fast keine Informationen zu diesem Thema, und ich habe es herausgefunden, während ich gehe.

  • Beginnen Sie mit diesem Apple-Beispiel und stellen Sie sicher, dass Sie das gesamte Projekt herunterladen, da einige kleine Details fehlen:

Carbon / Cocoa

  • Wählen Sie eines der Photoshop SDK-Beispiele aus (ich habe ColorMunger verwendet) und lassen Sie es einfach starten. Versuchen Sie also, das Dialogfeld "Info" zu ersetzen, indem Sie das Apple-Beispiel als Vorlage verwenden. Sobald Sie das ohne Speicherprobleme arbeiten, sollten Sie auf dem Weg sein.

Ich bin seit 10 Jahren Java und Ruby Programmierer, also ist mein C / C ++ foo rostig und ich lerne gerade Objective C, während ich gehe. Zwei "Gotchas", denen ich begegnet bin, nur für den Fall ....

  • erstellen Sie kein Controller-Objekt in Ihrer NIB / XIB-Datei. Auf der Grundlage dieses Apple-Beispiels öffnet der Controller die NIB-Datei in seiner init-Methode, und Sie erhalten eine wirklich interessante rekursive Schleife
  • Im Apple-Beispiel wird der Cocoa-Kram in eine Carbon-basierte C-App eingebettet. Die Adobe-Beispiele sind alle C ++. Vergessen Sie nicht Ihr externes "C" {} in Ihrer Header-Datei.
wndxlori 10.07.2009 16:54
quelle
0

CS2 lädt PowerPC Mach-O Code so einfach wie CS3 / CS4. Hat jemand diesen Cocoa-Ansatz in CS2 getestet?

Zur Zeit verwende ich Carbon für CS2 / CS3 / CS4, da dies garantiert überall funktioniert, wo das Plugin geladen wird; und Cocoa für CS5 natürlich, ob 32 oder 64 Bit.

Chris Cox ist nicht optimistisch, dass Cocoa in etwas anderem als CS5 arbeitet: Ссылка

Also, was ist hier wirklich los? Es ist ziemlich schwer, Ratschläge aus dem Maul des Pferdes zu ignorieren.

    
qu1j0t3 12.11.2010 17:41
quelle

Tags und Links