Como implementar um plug-in Adobe Photoshop baseada em Cocoa
-
12-09-2019 - |
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.
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:
- 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.