We have a brand new look! Take a tour with us and explore the latest updates on Adobe Support Community.
Previously I've written AEGP plugins and Effect plugins, so I'm somewhat familiar with the SDK. Now I'm getting ready to write an effect plugin with a custom UI, and I'm wondering about the best way to proceed.
Should I create an effect plugin with a custom UI? I found the "Custom_ECW_UI" sample, but it doesn't appear to work very well. It responds to dragging, but doesn't draw a UI other than a solid color background. I'm nervous about using that as a template.
Perhaps I could develop an AEGP plugin with a custom UI panel, and that could be used to control an effect. Would something like that work? If so, how can I get my AEGP plugin to talk to the effect? Would the AEGP plugin and effect plugin be installed seprately, or could they both be contained in one binary file?
Thanks for your help.
Copy link to clipboard
The Frischluft guy seems to have figured out custom UIs in the ECW pretty well, so maybe get in touch. Everybody else pretty much seems to have moved on custom sub-windows and panels. From my hayday of being involved in a ton of testing I all too well rember the tons of issues with actually drawing these darn things and developers spending a lot of time fixing these issues.
Sometimes having a panel UI is helpful, such as a preset browser. In other uses, an ECW custom UI would be more intuitive because you don't need to keep opening and closing panels. Take a look at Christian Lett's Bang plugin, that does custom UI really well.
I used the ColorGrid sample over custom ECW sample, as it demonstrates more things. I replaced all actual drawing code (drawbot) with cairo. It was a lot of work as many others have said on the forum.
I think Colorista is an example of an effect that can optionally be entirely driven by a panel, so I think it's possible but I'm not sure how to do it.
That's really interesting what you said about using Cairo for drawing. Does this mean that I could draw my UI using platform-specific drawing functions? For example, I'd much rather use CoreAnimation or CoreGraphics for drawing my UI on the Mac. Do you know if something like that is possible?
I've been studying the SDK for a function that would give me access to the Mac drawing surface, but I haven't found it yet.
Yes you can draw the ECW buffer with whichever drawing tools you're comfortable with. Only downside is 2x code required for a cross-platform plugin. I think there are some posts (or used to be) on this forum about people drawing with core graphics.
Assuming that I want to draw my own effect UI on the Mac, do you know how I can determine which drawing surface to use? For example, everything on the Mac needs to be drawn into a NSView or CALayer. I can't find a way to get access to those. Thanks again for your help!
Sorry I have 0 experience with core graphics :"(
Ok, so I've decided to build a custom UI inside the effects window, and I would like the custom UI to replace a bunch of existing parameters. Well, the existing parameters will still exist, but they won't be visible. In short, I'll have a single parameter with a custom UI that controls a bunch of hidden parameters. Does this sound possible?
If I do this, then how would I add the custom UI parameter? The ColorGrid sample plugin uses PF_ADD_ARBITRARY2(), but the HistoGrid sample uses PF_ADD_NULL(). I have a feeling that PF_ADD_NULL() might be the way to go, since this parameter won't use any data storage itself. It'll just be controller other hidden parameters. I'm not sure though. I can't find any documentation on PF_ADD_NULL(), so it's difficult to know how to proceed.
Do you have any suggestions?
Yes it is possible to use a custom UI to control and store data inside other dummy/hidden params. I went with PF_ADD_ARBITRARY2 because my custom UI has some data of it's own, but I'm guessing you could get away with the null if it contains no data and simply drives the other params under the hood.
If you find it easier (since it's used in more samples), just use PF_ADD_ARBITRARY2 and just never read it's data.