void BasicExamplePluginFactory::describeInContext(OFX::ImageEffectDescriptor& desc, OFX::ContextEnum context) { // Source clip only in the filter context // create the mandated source clip ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(ePixelComponentRGBA); srcClip->addSupportedComponent(ePixelComponentAlpha); srcClip->setTemporalClipAccess(false); srcClip->setSupportsTiles(true); srcClip->setIsMask(false); // if general or paint context, define the mask clip if(context == eContextGeneral || context == eContextPaint) { // if paint context, it is a mandated input called 'brush' ClipDescriptor *maskClip = context == eContextGeneral ? desc.defineClip("Mask") : desc.defineClip("Brush"); maskClip->addSupportedComponent(ePixelComponentAlpha); maskClip->setTemporalClipAccess(false); if(context == eContextGeneral) maskClip->setOptional(true); maskClip->setSupportsTiles(true); maskClip->setIsMask(true); // we are a mask input } // create the mandated output clip ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->addSupportedComponent(ePixelComponentAlpha); dstClip->setSupportsTiles(true); // make some pages and to things in PageParamDescriptor *page = desc.definePageParam("Controls"); // group param to group the scales GroupParamDescriptor *componentScalesGroup = desc.defineGroupParam("componentScales"); componentScalesGroup->setHint("Scales on the individual component"); componentScalesGroup->setLabels("Components", "Components", "Components"); // make overall scale params DoubleParamDescriptor *param = defineScaleParam(desc, "scale", "scale", "Scales all component in the image", 0); page->addChild(*param); // add a boolean to enable the component scale BooleanParamDescriptor *boolP = desc.defineBooleanParam("scaleComponents"); boolP->setDefault(true); boolP->setHint("Enables scales on individual components"); boolP->setLabels("Scale Components", "Scale Components", "Scale Components"); boolP->setParent(*componentScalesGroup); page->addChild(*boolP); // make the four component scale params param = defineScaleParam(desc, "scaleR", "red", "Scales the red component of the image", componentScalesGroup); page->addChild(*param); param = defineScaleParam(desc, "scaleG", "green", "Scales the green component of the image", componentScalesGroup); page->addChild(*param); param = defineScaleParam(desc, "scaleB", "blue", "Scales the blue component of the image", componentScalesGroup); page->addChild(*param); param = defineScaleParam(desc, "scaleA", "alpha", "Scales the alpha component of the image", componentScalesGroup); page->addChild(*param); }
void GenericTestExamplePluginFactory::describeInContext(OFX::ImageEffectDescriptor &desc, OFX::ContextEnum /*context*/) { ClipDescriptor *srcClip = desc.defineClip(kOfxImageEffectSimpleSourceClipName); srcClip->addSupportedComponent(ePixelComponentRGBA); srcClip->addSupportedComponent(ePixelComponentAlpha); srcClip->setTemporalClipAccess(false); srcClip->setSupportsTiles(true); srcClip->setIsMask(false); ClipDescriptor *dstClip = desc.defineClip(kOfxImageEffectOutputClipName); dstClip->addSupportedComponent(ePixelComponentRGBA); dstClip->addSupportedComponent(ePixelComponentAlpha); dstClip->setSupportsTiles(true); DoubleParamDescriptor *param1 = desc.defineDoubleParam("MinMaxTest"); param1->setLabels("Min/Max Test", "Min/Max Test", "Min/Max Test"); param1->setScriptName("minMaxTest"); param1->setHint("A double parameter to illustrate visual min/max."); param1->setDefault(50.0); param1->setRange(-1000, 1000); param1->setDisplayRange(-1000, 1000); param1->setDoubleType(eDoubleTypePlain); ChoiceParamDescriptor* param2 = desc.defineChoiceParam("enableTest"); param2->setLabels("Enabler", "Enabler", "Enabler"); param2->appendOption("Enable parameter", "Enable parameter"); param2->appendOption("Disable parameter", "Disable parameter"); DoubleParamDescriptor *param3 = desc.defineDoubleParam("enableDbl"); param3->setLabels("Enabled by Enabler", "Enabled by Enabler", "Enabled by Enabler"); BooleanParamDescriptor* bparam = desc.defineBooleanParam("Insignificant"); bparam->setLabels("Insignificant", "Insignificant", "Insignificant"); bparam->setHint("Shouldn't cause a re-render."); bparam->setEvaluateOnChange(false); BooleanParamDescriptor* bparam2 = desc.defineBooleanParam("secretTest"); bparam2->setLabels("SECRET!", "SECRET!", "SECRET!"); bparam2->setIsSecret(true); bparam2->setHint("Shouldn't be shown in the user interface."); BooleanParamDescriptor* bparam3 = desc.defineBooleanParam("nonPersistent"); bparam3->setLabels("Non-persistent", "Non-persistent", "Non-persistent"); bparam3->setHint("Shouldn't be saved in the plugin description."); bparam3->setIsPersistent(false); DoubleParamDescriptor *param5 = desc.defineDoubleParam("animateDbl"); param5->setLabels("No Animation", "No Animation", "No Animation"); param5->setAnimates(false); DoubleParamDescriptor *param6 = desc.defineDoubleParam("angleTest"); param6->setLabels("Angle?", "Angle?", "Angle?"); param6->setRange(-180.0, 180.0); param6->setHint("An angle parameter."); param6->setDoubleType(eDoubleTypeAngle); PushButtonParamDescriptor* pb = desc.definePushButtonParam("pbButton"); pb->setLabels("Push Me", "Push Me", "Push Me"); PushButtonParamDescriptor* pb2 = desc.definePushButtonParam("analyseButton"); pb2->setLabels("Analyse", "Analyse", "Analyse"); DoubleParamDescriptor *param7 = desc.defineDoubleParam("analysisParam"); param7->setLabels("Analysis Slave", "Analysis Slave", "Analysis Slave"); Double2DParamDescriptor* widgetPos = desc.defineDouble2DParam("widgetPos"); widgetPos->setLabels("Widget Position", "Widget Position", "Widget Position"); widgetPos->setDoubleType(OFX::eDoubleTypeXYAbsolute); widgetPos->setDefaultCoordinateSystem(eCoordinatesNormalised); widgetPos->setDimensionLabels("X Position", "Y Position"); widgetPos->setDefault(0.5, 0.5); }