TuttleOFX  1
TuttleOFX/libraries/tuttle/src/tuttle/plugin/interact/Frame.hpp
Go to the documentation of this file.
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