Pergunta

Cocoa usado para trabalhar em CS3 com o truque de colocando um feixe de cacau no interior da principal carbono encaixe feixe , carregando-os de carbono e emissão de uma NSApplicationLoad (). Isso porque Photoshop CS3 foi Carbon-somente e usado para descarregar os fardos de plugin.

Photoshop CS4 usa Cacau e tem sua própria piscina NSAutorelease no lugar no segmento principal.

No Photoshop CS4 XIBs baseada janela muito simples / nibs carregado por um trabalho NSWindowController fora da caixa.

Mas basta adicionar uma ligação a um controle na janela e você vai ter acidentes engraçados, opcionalmente, quando você fechar a janela, ou a segunda vez que utilizar o plugin, ou mesmo ao fechar em si Photoshop.

Por que tudo parece funcionar bem até que eu usar alguns recursos avançados de cacau? Eu estou preso.

Editar : eu realmente me encontrei a solução para o problema mais amplo "Como usar cacau em um plug-in Photoshop CS3 / CS4?". Veja abaixo.

Foi útil?

Solução

Você tem que criar um novo Loadable Bundle alvo que contém os nibs e seu código de cacau. Adicionar o produto pacote para o Copiar Pacote de Recursos fase do seu plugin. Em seguida, o código para um filtro de plugin que carrega uma janela de cacau com alguns controles seria:

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

Este é baseado na Craig Hockenberry pacote truque . Eu ainda estou testando ele, mas ele deve funcionar tanto no CS3 e CS4.

Outras dicas

Eu só começou a trabalhar em escrever um plugin base de cacau para CS4. Realmente, não há quase nenhuma informação lá fora, sobre este tema, e eu fui descobrir isso como eu ir.

  • Iniciar a partir deste exemplo da Apple, e certifique-se de baixar todo o projeto, porque há alguns pequenos detalhes que faltam no texto:

carbono / Cacau

  • Escolha um dos exemplos Photoshop SDK (eu usei ColorMunger), e mantê-lo simples para começar, então apenas tentar substituir a caixa de diálogo "Sobre", usando o exemplo da Apple como seu modelo. Uma vez que você tem que trabalhar sem problemas de memória, você deve estar no seu caminho.

Eu fui um programador Java e Ruby por 10 anos, por isso a minha C / C ++ foo está enferrujado, e eu estou começando a aprender Objective C como eu ir. Dois "pegadinhas" Corri para, apenas no caso ....

  • Não criar um objeto controlador no seu arquivo NIB / XIB. Porque, com base nesse exemplo a Apple, o controlador abre o arquivo NIB nele do método init, e você começa um loop recursivo realmente interessante
  • O exemplo a Apple está incorporando o material cacau em um aplicativo C base de carbono. Os exemplos da Adobe são todos C ++. Não esqueça sua extern "C" {} em seu arquivo cabeçalho.

CS2 irá carregar código PowerPC Mach-O tão facilmente como CS3 / CS4. Alguém já testou esta abordagem Cacau em CS2?

Atualmente eu uso Carbono para CS2 / CS3 / CS4, pois isso é garantido que funcione em todos os lugares as cargas de plug-in; e Cacau para CS5 é claro, se 32 ou 64 bits.

Chris Cox não está otimista sobre Cocoa trabalhando em outra coisa senão CS5: http://forums.adobe.com/message/3256555#3256555

Então, qual é o negócio real aqui? É muito difícil de ignorar os conselhos da boca do cavalo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top