Files
oak-editor/third_party/openfx/HostSupport/include/ofxhInteract.h
T

279 lines
10 KiB
C++
Executable File

#ifndef OFX_INTERACT_H
#define OFX_INTERACT_H
#include "ofxInteract.h"
#include "ofxOld.h" // old plugins may rely on deprecated properties being present
#include "ofxhPropertySuite.h"
namespace OFX {
namespace Host {
namespace Interact {
/// fetch a versioned suite for our interact
const void *GetSuite(int version);
class Base {
public:
virtual ~Base() {
}
/// grab a handle on the parameter for passing to the C API
OfxInteractHandle getHandle() {return (OfxInteractHandle)this;}
/// get the property handle for this instance/descriptor
virtual OfxPropertySetHandle getPropHandle() = 0;
};
/// state the interact can be in
enum State {
eUninitialised,
eDescribed,
eCreated,
eFailed
};
/// Descriptor for an interact. Interacts all share a single description
class Descriptor : public Base {
protected:
Property::Set _properties; ///< its props
State _state; ///< how is it feeling today
OfxPluginEntryPoint *_entryPoint; ///< the entry point for this overlay
public:
/// CTOR
Descriptor();
/// dtor
virtual ~Descriptor();
/// set the main entry points
void setEntryPoint(OfxPluginEntryPoint *entryPoint) {_entryPoint = entryPoint;}
/// call describe on this descriptor, returns true if all went well
bool describe(int bitDepthPerComponent, bool hasAlpha);
/// grab a handle on the properties of this parameter for the C api
OfxPropertySetHandle getPropHandle() {return _properties.getHandle();}
/// get prop set
const Property::Set &getProperties() const {return _properties;}
/// get a non const prop set
Property::Set &getProperties() {return _properties;}
/// call the entry point with action and the given args
OfxStatus callEntry(const char *action,
void *handle,
OfxPropertySetHandle inArgs,
OfxPropertySetHandle outArgs);
/// what is it's state?
State getState() const {return _state;}
};
/// a generic interact, it doesn't belong to anything in particular
/// we need to generify this slighty more and remove the renderscale args
/// into a derived class, as they only belong to image effect plugins
class Instance : public Base, protected Property::GetHook {
protected:
Descriptor &_descriptor; ///< who we are
Property::Set _properties; ///< its props
State _state; ///< how is it feeling today
void *_effectInstance; ///< this is ugly, we need a base class to all plugin instances at some point.
Property::Set _argProperties;
/// initialise the argument properties
void initArgProp(OfxTime time,
const OfxPointD &renderScale);
/// set pen props in the args
void setPenArgProps(const OfxPointD &penPos,
const OfxPointI &penPosViewport,
double pressure);
/// set key args in the props
void setKeyArgProps(int key,
char* keyString);
public:
Instance(Descriptor &desc, void *effectInstance);
virtual ~Instance();
/// what is it's state?
State getState() const {return _state;}
/// grab a handle on the properties of this parameter for the C api
OfxPropertySetHandle getPropHandle() {return _properties.getHandle();}
/// get prop set
const Property::Set &getProperties() const {return _properties;}
/// call the entry point in the descriptor with action and the given args
virtual OfxStatus callEntry(const char *action,
Property::Set *inArgs);
#ifdef kOfxInteractPropViewportSize // removed in OFX 1.4
/// hooks to kOfxInteractPropViewportSize in the property set
/// this is actually redundant and is to be deprecated
virtual void getViewportSize(double &width, double &height) const = 0;
#endif
// hooks to live kOfxInteractPropPixelScale in the property set
virtual void getPixelScale(double& xScale, double& yScale) const = 0;
// hooks to kOfxInteractPropBackgroundColour in the property set
virtual void getBackgroundColour(double &r, double &g, double &b) const = 0;
// hooks to kOfxInteractPropSuggestedColour and kOfxPropOverlayColour in the property set
// return false if there is no color suggestion by the host.
virtual bool getSuggestedColour(double &r, double &g, double &b) const = 0;
/// implement
virtual OfxStatus swapBuffers() = 0;
/// implement this
virtual OfxStatus redraw() = 0;
/// returns the params the interact uses
virtual void getSlaveToParam(std::vector<std::string>& params) const;
// do nothing
virtual int getDimension(const std::string &name) const;
// don't know what to do
virtual void reset(const std::string &name);
/// the gethook virutals for pixel scale, background colour
virtual double getDoubleProperty(const std::string &name, int index) const;
/// for pixel scale and background colour
virtual void getDoublePropertyN(const std::string &name, double *first, int n) const;
/// call create instance
virtual OfxStatus createInstanceAction();
// interact action - kOfxInteractActionDraw
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
virtual OfxStatus drawAction(OfxTime time, const OfxPointD &renderScale);
// interact action - kOfxInteractActionPenMotion
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
// penX - the X position
// penY - the Y position
// pressure - the pen pressue 0 to 1
virtual OfxStatus penMotionAction(OfxTime time,
const OfxPointD &renderScale,
const OfxPointD &penPos,
const OfxPointI &penPosViewport,
double pressure);
// interact action - kOfxInteractActionPenUp
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
// penX - the X position
// penY - the Y position
// pressure - the pen pressue 0 to 1
virtual OfxStatus penUpAction(OfxTime time,
const OfxPointD &renderScale,
const OfxPointD &penPos,
const OfxPointI &penPosViewport,
double pressure);
// interact action - kOfxInteractActionPenDown
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
// penX - the X position
// penY - the Y position
// pressure - the pen pressue 0 to 1
virtual OfxStatus penDownAction(OfxTime time,
const OfxPointD &renderScale,
const OfxPointD &penPos,
const OfxPointI &penPosViewport,
double pressure);
// interact action - kOfxInteractActionkeyDown
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
// key - the pressed key
// keyString - the pressed key string
virtual OfxStatus keyDownAction(OfxTime time,
const OfxPointD &renderScale,
int key,
char* keyString);
// interact action - kOfxInteractActionkeyUp
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
// key - the pressed key
// keyString - the pressed key string
virtual OfxStatus keyUpAction(OfxTime time,
const OfxPointD &renderScale,
int key,
char* keyString);
// interact action - kOfxInteractActionkeyRepeat
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
// key - the pressed key
// keyString - the pressed key string
virtual OfxStatus keyRepeatAction(OfxTime time,
const OfxPointD &renderScale,
int key,
char* keyString);
// interact action - kOfxInteractActionLoseFocus
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
virtual OfxStatus gainFocusAction(OfxTime time,
const OfxPointD &renderScale);
// interact action - kOfxInteractActionLoseFocus
//
// Params -
//
// time - the effect time at which changed occured
// renderScale - the render scale
virtual OfxStatus loseFocusAction(OfxTime time,
const OfxPointD &renderScale);
};
} // Interact
} // Host
} // OFX
#endif // OFX_INTERACT_H