Domanda

cacao utilizzato per lavorare su CS3 con la di mettere un fascio di cacao all'interno del principale del plugin Carbon fascio , scaricandole da carbonio e rilasciare un NSApplicationLoad (). Questo perché Photoshop CS3 era Carbon-only e utilizzato per scaricare i pacchetti di plugin.

Photoshop CS4 utilizza Cacao e dispone di una piscina NSAutorelease in posizione sul thread principale.

In Photoshop CS4 molto semplici xibs basati su finestre / pennini caricati da un NSWindowController lavorare fuori dalla scatola.

Ma basta aggiungere un binding a un controllo sulla finestra e si otterrà incidenti divertenti, opzionalmente quando si chiude la finestra, o la seconda volta che si utilizza il plugin, o anche quando si chiude Photoshop stesso.

Perché tutto sembra funzionare bene fino a quando ho uso di alcune funzioni avanzate di cacao? Sono bloccato.

Modifica : ho davvero sono trovato la soluzione al problema più ampio "Come usare cacao in un plugin di Photoshop CS3 / CS4?". Vedi sotto.

È stato utile?

Soluzione

È necessario creare un nuovo caricabile Bundle di destinazione che contiene i pennini e il codice di cacao. Aggiungere il prodotto fascio ottenuto al Copia Bundle Risorse fase del vostro plugin. Poi il codice di un plugin filtro che carica una finestra di cacao con alcuni controlli potrebbe essere:

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;
}

Questa è basata sul Craig Hockenberry fascio trucco . Sto ancora testarlo ma dovrebbe funzionare sia su CS3 e CS4.

Altri suggerimenti

Ho appena iniziato a lavorare sulla scrittura di un plugin a base di cacao per CS4. In realtà, non v'è quasi alcuna informazioni là fuori su questo argomento, e mi è stato capire che fuori come vado.

  • Inizia da questo esempio di Apple, e assicuratevi di scaricare l'intero progetto, perché ci sono un paio di piccoli dettagli mancanti dal testo:

Carbon / Cocoa

  • Scegli uno degli esempi SDK di Photoshop (io ho usato ColorMunger), e mantenere le cose semplici per iniziare, quindi basta cercare di sostituire il "Informazioni su" finestra di dialogo, utilizzando l'esempio di Apple come modello. Una volta che avete che lavorare senza problemi di memoria, si dovrebbe essere sulla buona strada.

Sono stato un programmatore Java e Ruby per 10 anni, quindi il mio C / C ++ foo è arrugginita, e sto solo imparando Objective C come vado. Due "trucchi" Ho incontrato, per ogni evenienza ....

  • non si crea un oggetto controller nel file / XIB NIB. Perché, sulla base di questo esempio di Apple, il controllore si apre il file NIB nel suo metodo init, e si ottiene un ciclo ricorsivo davvero interessante
  • L'esempio di Apple è incorporare il cacao roba in una basata sul carbonio C app. Gli esempi di Adobe sono tutti C ++. Non dimenticate la vostra extern "C" {} nel file di intestazione.

CS2 caricherà PowerPC codice di Mach-O prontamente come CS3 / CS4. Qualcuno ha testato questo approccio cacao in CS2?

Attualmente io uso di carbonio per CS2 / CS3 / CS4 in quanto questo è garantito per funzionare ovunque i carichi di plugin; e Cocoa per CS5 naturalmente, sia 32 o 64 bit.

Chris Cox non è ottimista in merito a Cocoa lavorare in qualcosa di diverso CS5: http://forums.adobe.com/message/3256555#3256555

Allora, qual è il vero affare qui? E 'piuttosto difficile da ignorare consigliare dai bocca del cavallo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top