TuttleOFX
1
|
00001 #ifndef _TUTTLE_PLUGIN_INTERACT_FRAME_HPP_ 00002 #define _TUTTLE_PLUGIN_INTERACT_FRAME_HPP_ 00003 00004 #include <tuttle/plugin/global.hpp> 00005 #include <ofxsImageEffect.h> 00006 00007 namespace tuttle { 00008 namespace plugin { 00009 namespace interact { 00010 00011 struct IFrame 00012 { 00013 virtual ~IFrame() = 0; 00014 virtual bool isEnabled() const = 0; 00015 virtual OfxRectD getFrame( const OfxTime time ) const = 0; 00016 }; 00017 00018 struct FrameClip : virtual public IFrame 00019 { 00020 const OFX::Clip& _clip; 00021 FrameClip( const OFX::Clip* clip ) 00022 : _clip( *clip ) 00023 {} 00024 00025 bool isEnabled() const 00026 { 00027 return _clip.isConnected(); 00028 } 00029 00030 OfxRectD getFrame( const OfxTime time ) const 00031 { 00032 static const OfxRectD frame = { 0, 1, 0, 1 }; 00033 00034 if( _clip.isConnected() ) 00035 return _clip.getCanonicalRod( time ); 00036 return frame; 00037 } 00038 00039 }; 00040 00041 struct FrameOptionalClip : virtual public IFrame 00042 { 00043 const OFX::Clip& _optionalClip; 00044 const OFX::Clip& _clip; 00045 FrameOptionalClip( const OFX::Clip* optionalClip, const OFX::Clip* clip ) 00046 : _optionalClip( *optionalClip ) 00047 , _clip( *clip ) 00048 {} 00049 00050 bool isEnabled() const 00051 { 00052 return _optionalClip.isConnected() || _clip.isConnected(); 00053 } 00054 00055 OfxRectD getFrame( const OfxTime time ) const 00056 { 00057 static const OfxRectD frame = { 0, 1, 0, 1 }; 00058 00059 if( _optionalClip.isConnected() ) 00060 return _optionalClip.getCanonicalRod( time ); 00061 if( _clip.isConnected() ) 00062 return _clip.getCanonicalRod( time ); 00063 return frame; 00064 } 00065 00066 }; 00067 00068 } 00069 } 00070 } 00071 00072 #endif 00073