/*****************************************************************************
* dxtmsft.idl *
*-------------*
*
*   Description:
*       This is the IDL file for DirectX installable transform coclass,
*   interface, and type definitions.
*
*-----------------------------------------------------------------------------
*   Date: 07/07/97
*   Copyright Microsoft Corporation 1997
*   All rights reserved.
*
*****************************************************************************/

//--- Import base idl
import "oaidl.idl";
import "ocidl.idl";
import "dxtrans.idl";

//--- Additional includes

//--- Export

//=== Forward References ====================================================
interface IDXTResampler;
interface IDXTComposite;
interface IDXMapper;
interface IDXLUTBuilder;
interface IDXDLUTBuilder;
interface IDXTConvolution;

//--- Chrome Wrapper interfaces
interface ICrBlur;

//=== Constants =============================================================

//=== Struct & Enum definitions =============================================

//=== Interface definitions =================================================

//--- IDXLUTBuilder -----------------------------------
typedef enum OPIDDXLUTBUILDER
{
    OPID_DXLUTBUILDER_Gamma,
    OPID_DXLUTBUILDER_Opacity,
    OPID_DXLUTBUILDER_Brightness,
    OPID_DXLUTBUILDER_Contrast,
    OPID_DXLUTBUILDER_ColorBalance,
    OPID_DXLUTBUILDER_Posterize,
    OPID_DXLUTBUILDER_Invert,
    OPID_DXLUTBUILDER_Threshold,
    OPID_DXLUTBUILDER_NUM_OPS
} OPIDDXLUTBUILDER;

typedef enum DXLUTCOLOR
{
    DXLUTCOLOR_RED,
    DXLUTCOLOR_GREEN,
    DXLUTCOLOR_BLUE
} DXLUTCOLOR;

[
    uuid(F4370FC1-CADB-11D0-B52C-00A0C9054373),
    helpstring("IDXLUTBuilder Interface"),
    pointer_default(unique)
]
interface IDXLUTBuilder : IUnknown
{
    HRESULT GetNumBuildSteps([out]ULONG *pulNumSteps );
    HRESULT GetBuildOrder([out, size_is(ulSize)]OPIDDXLUTBUILDER OpOrder[],
                          [in]ULONG ulSize );
    HRESULT SetBuildOrder( [in, size_is(ulNumSteps)] const OPIDDXLUTBUILDER OpOrder[],
                           [in]ULONG ulNumSteps );
    HRESULT SetGamma([in] float newVal);
    HRESULT GetGamma([out] float *pVal);
    HRESULT GetOpacity([out] float *pVal);
    HRESULT SetOpacity([in] float newVal);
    HRESULT GetBrightness([in, out]ULONG *pulCount, [out, size_is(*pulCount)]float Weights[]);
    HRESULT SetBrightness([in]ULONG ulCount, [in, size_is(ulCount)]const float Weights[]);
    HRESULT GetContrast([in, out]ULONG *pulCount, [out, size_is(*pulCount)]float Weights[]);
    HRESULT SetContrast([in]ULONG ulCount, [in, size_is(ulCount)]const float Weights[]);
    HRESULT GetColorBalance( [in]DXLUTCOLOR Color, [in, out]ULONG *pulCount, [out, size_is(*pulCount)]float Weights[] );
    HRESULT SetColorBalance( [in]DXLUTCOLOR Color, [in]ULONG ulCount, [in, size_is(ulCount)]const float Weights[] );
    HRESULT GetLevelsPerChannel([out] ULONG *pVal);
    HRESULT SetLevelsPerChannel([in] ULONG newVal);
    HRESULT GetInvert([out]float *pThreshold);
    HRESULT SetInvert([in]float Threshold);
    HRESULT GetThreshold([out] float *pVal);
    HRESULT SetThreshold([in] float newVal);
};

[
    object,
    uuid(73068231-35EE-11d1-81A1-0000F87557DB),
    dual,
    helpstring("IDXDLUTBuilder Interface"),
    pointer_default(unique)
]
interface IDXDLUTBuilder : IDispatch
{
    [propget, id(1)]
        HRESULT NumBuildSteps( [out, retval]long *pNumSteps );
    [propget, id(2)]
        HRESULT BuildOrder( [out, retval]VARIANT *pOpOrder );
    [propput, id(2)]
        HRESULT BuildOrder( [in]VARIANT *pOpOrder );
    [propget, id(3)]
        HRESULT Gamma([out, retval] float *pVal);
    [propput, id(3)]
        HRESULT Gamma([in] float newVal);
    [propget, id(4)]
        HRESULT Opacity([out, retval] float *pVal);
    [propput, id(4)]
        HRESULT Opacity([in] float newVal);
    [propget, id(5)]
        HRESULT Brightness( [out, retval]VARIANT *pWeights );
    [propput, id(5)]
        HRESULT Brightness([in]VARIANT *pWeights );
    [propget, id(6)]
        HRESULT Contrast( [out, retval]VARIANT *pWeights);
    [propput, id(6)]
        HRESULT Contrast( [in]VARIANT *pWeights);
    [propget, id(7)]
        HRESULT ColorBalance( [in]DXLUTCOLOR Color, [out, retval]VARIANT *pWeights );
    [propput, id(7)]
        HRESULT ColorBalance( [in]DXLUTCOLOR Color, [in]VARIANT *pWeights );
    [propget, id(8)]
        HRESULT LevelsPerChannel([out, retval]long *pVal);
    [propput, id(8)]
        HRESULT LevelsPerChannel([in]long newVal);
    [propget, id(9)]
        HRESULT Invert( [out, retval]float *pThreshold );
    [propput, id(9)]
        HRESULT Invert( [in]float Threshold );
    [propget, id(10)]
        HRESULT Threshold([out, retval]float *pVal);
    [propput, id(10)]
        HRESULT Threshold([in]float newVal);
};


//--- IDXTResampler --------------------------------------------------------
typedef enum DXFILTERTYPE
{
    DXFILTER_NEAREST,
    DXFILTER_BILINEAR,
    DXFILTER_CUBIC,
    DXFILTER_BSPLINE,
    DXFILTER_NUM_FILTERS
} DXFILTERTYPE;

//--- Do not change these values. The bit position corresponds to the dimension index.
typedef enum DXRESAMPFLAGS
{
    DXRESAMP_X        = ( 1L << 0 ),
    DXRESAMP_Y        = ( 1L << 1 ),
    DXRESAMP_Z        = ( 1L << 2 ),
    DXRESAMP_T        = ( 1L << 3 ),
    DXRESAMP_ABSOLUTE = ( 1L << 4 ),
    DXRESAMP_ALL      = ( DXRESAMP_X | DXRESAMP_Y | DXRESAMP_Z | DXRESAMP_T )
} DXRESAMPFLAGS;

[
    uuid(015E2938-C341-11d1-81D1-0000F87557DB),
    helpstring("IDXTResampler Interface"),
    pointer_default(unique)
]
interface IDXTResampler : IUnknown
{
    HRESULT SetFilterType( [in]DXFILTERTYPE eType );
    HRESULT GetFilterType( [out]DXFILTERTYPE* peType );
    HRESULT SetMapping( [in]const DX2DXFORM* pXForm );
    HRESULT GetMapping( [out]DX2DXFORM* pXForm );
    HRESULT SetMappingObject( [in]IUnknown *pMapper );
    HRESULT GetMappingObject( [out]IUnknown **ppMapper );
    HRESULT Rotate( [in]float Rotation, [in]DWORD dwFlags );
    HRESULT Scale( [in]float Scales[2], [in]DWORD dwFlags );
    HRESULT ScaleFitToSize( [in]DXBNDS* pClipBounds,
                            [in]SIZE FitToSize, [in]BOOL bMaintainAspect );
};

//--- IDXTResamplerD --------------------------------------------------------
// This is the dispatch control interface for the resampler transform
//
typedef enum DXRESAMPDISPID
{
    DISPID_MappingMatrix = 1,
    DISPID_MappingObject,
    DISPID_FilterType,
    DISPID_Rotation,
    DISPID_ScaleX,
    DISPID_ScaleY,
    DISPID_ScaleFitToSize
} DXRESAMPDISPID;

[
    object,
    uuid(015E2937-C341-11d1-81D1-0000F87557DB),
    dual,
    helpstring("IDXTResamplerD Interface"),
    pointer_default(unique)
]
interface IDXTResamplerD : IDispatch
{
    [propput, id(DISPID_MappingMatrix)]
        HRESULT MappingMatrix( [in]SAFEARRAY(float) *pFilter );
    [propget, id(DISPID_MappingMatrix)]
        HRESULT MappingMatrix( [out, retval]SAFEARRAY(float) *pFilter );
    [propput, id(DISPID_MappingObject)]
        HRESULT MappingObject( [in]IUnknown *pMapper );
    [propget, id(DISPID_MappingObject)]
        HRESULT MappingObject( [out, retval]IUnknown **ppMapper );
    [propput, id(DISPID_FilterType)]
        HRESULT FilterType( [in]DXFILTERTYPE eType );
    [propget, id(DISPID_FilterType)]
        HRESULT FilterType( [out, retval]DXFILTERTYPE* peType );
    [propput, id(DISPID_Rotation)]
        HRESULT Rotation( [in]float Rotation );
    [propget, id(DISPID_Rotation)]
        HRESULT Rotation( [out, retval]float* Rotation );
    [propput, id(DISPID_ScaleX)]
        HRESULT ScaleX( [in]float X );
    [propget, id(DISPID_ScaleX)]
        HRESULT ScaleX( [out, retval]float* pX );
    [propput, id(DISPID_ScaleY)]
        HRESULT ScaleY( [in]float Y );
    [propget, id(DISPID_ScaleY)]
        HRESULT ScaleY( [out, retval]float* pY );
    [id(DISPID_ScaleFitToSize)]
        HRESULT ScaleFitToSize( [in]long FitWid, [in]long FitHgt, [in]BOOL bMaintainAspect );
};

//--- IDXTGradientD --------------------------------------------------------
// This is the dispatch control interface for the gradient transform
//
typedef enum DXGRADIENTTYPE
{
    DXGRADIENT_VERTICAL,
    DXGRADIENT_HORIZONTAL,
    DXGRADIENT_NUM_GRADIENTS
} DXGRADIENTTYPE;

typedef enum DXGRADDISPID
{
    DISPID_GradientType = 1,
    DISPID_StartColor,
    DISPID_EndColor,
    DISPID_GradientWidth,
    DISPID_GradientHeight,
    DISPID_GradientAspect,
    DISPID_StartColorStr,
    DISPID_EndColorStr,
} DXGRADDISPID;

[
    object,
    uuid(623E2881-FC0E-11d1-9A77-0000F8756A10),
    dual,
    helpstring("IDXTGradientD Interface"),
    pointer_default(unique)
]
interface IDXTGradientD : IDispatch
{
    [propput, id(DISPID_GradientType)]
        HRESULT GradientType( [in]DXGRADIENTTYPE eType );
    [propget, id(DISPID_GradientType)]
        HRESULT GradientType( [out, retval]DXGRADIENTTYPE* peType );
    [propput, id(DISPID_StartColor), helpstring("property StartColor")]
        HRESULT StartColor([in] OLE_COLOR newVal);
    [propget, id(DISPID_StartColor), helpstring("property StartColor")]
        HRESULT StartColor([out, retval] OLE_COLOR *pVal);
    [propput, id(DISPID_EndColor), helpstring("property EndColor")] 
        HRESULT EndColor([in] OLE_COLOR newVal);
    [propget, id(DISPID_EndColor), helpstring("property EndColor")]
        HRESULT EndColor([out, retval] OLE_COLOR *pVal);
    [propput, id(DISPID_GradientWidth), helpstring("property GradientWidth")] 
        HRESULT GradientWidth([in] long newVal);
    [propget, id(DISPID_GradientWidth), helpstring("property GradientWidth")]
        HRESULT GradientWidth([out, retval] long *pVal);
    [propput, id(DISPID_GradientHeight), helpstring("property GradientHeight")] 
        HRESULT GradientHeight([in] long newVal);
    [propget, id(DISPID_GradientHeight), helpstring("property GradientHeight")]
        HRESULT GradientHeight([out, retval] long *pVal);
    [propput, id(DISPID_GradientAspect), helpstring("property KeepAspectRatio")] 
        HRESULT KeepAspectRatio([in] VARIANT_BOOL newVal);
    [propget, id(DISPID_GradientAspect), helpstring("property KeepAspectRatio")]
        HRESULT KeepAspectRatio([out, retval] VARIANT_BOOL *pVal);
    [propput, id(DISPID_StartColorStr), helpstring("property StartColorStr")]
        HRESULT StartColorStr([in] BSTR newVal);
    [propput, id(DISPID_EndColorStr), helpstring("property EndColorStr")] 
        HRESULT EndColorStr([in] BSTR newVal);
};

//--- IDXTConvolution --------------------------------------------------------
typedef enum DXCONVFILTERTYPE
{
    DXCFILTER_SRCCOPY,      // No filtering
    DXCFILTER_BOX7X7,
    DXCFILTER_BLUR3X3,      
    DXCFILTER_SHARPEN,
    DXCFILTER_EMBOSS,
    DXCFILTER_ENGRAVE,
    DXCFILTER_NUM_FILTERS,  // This must be the at the end of the predefine filter list
    DXCFILTER_CUSTOM      
} DXCONVFILTERTYPE;

[
    uuid(7BA7F8AF-E5EA-11d1-81DD-0000F87557DB),
    helpstring("IDXTConvolution Interface"),
    pointer_default(unique)
]
interface IDXTConvolution : IUnknown
{
    HRESULT SetFilterType( [in]DXCONVFILTERTYPE eType );
    HRESULT GetFilterType( [out]DXCONVFILTERTYPE* peType );
    HRESULT SetCustomFilter( [in]float *pFilter, [in]SIZE Size );
    HRESULT SetConvertToGray( [in]BOOL bConvertToGray );
    HRESULT GetConvertToGray( [out]BOOL* pbConvertToGray );
    HRESULT SetBias( [in]float Bias );
    HRESULT GetBias( [out]float* pBias );
    HRESULT SetExcludeAlpha( [in]BOOL bExcludeAlpha );
    HRESULT GetExcludeAlpha( [out]BOOL* pbExcludeAlpha );
};

//--- IDXMapper -------------------------------------------------
// This is the coordinate mapping interface for a mapper object
//
[
    uuid(555278E5-05DB-11D1-883A-3C8B00C10000),
    helpstring("IDXMapper Interface"),
    pointer_default(unique)
]
interface IDXMapper : IUnknown
{
    HRESULT MapIn2Out( [in]DXVEC* pInPt, [out]DXVEC* pOutPt );
    HRESULT MapOut2In( [in]DXVEC* pOutPt, [out]DXVEC* pInPt );
};

//--- IDXDMapper -------------------------------------------------
// This is the coordinate mapping interface for a mapper object
//
[
    object,
    uuid(7FD9088B-35ED-11d1-81A1-0000F87557DB),
    dual,
    helpstring("IDXDMapper Interface"),
    pointer_default(unique)
]
interface IDXDMapper : IDispatch
{
    HRESULT MapIn2Out( [in]SAFEARRAY(VARIANT) *pInPt, [out]SAFEARRAY(VARIANT) *pOutPt );
    HRESULT MapOut2In( [in]SAFEARRAY(VARIANT) *pOutPt, [out]SAFEARRAY(VARIANT) *pInPt );
};

//--- IDXTComposite -------------------------------------------------
// This is the compositor transform control interface
typedef enum DXCOMPFUNC
{
    DXCOMPFUNC_SWAP_AB  = 0x10,
    DXCOMPFUNC_FUNCMASK = 0xF,
    //--- Compositing functions
    DXCOMPFUNC_CLEAR = 0,
    DXCOMPFUNC_MIN,
    DXCOMPFUNC_MAX,
    DXCOMPFUNC_A,
    DXCOMPFUNC_A_OVER_B,
    DXCOMPFUNC_A_IN_B,
    DXCOMPFUNC_A_OUT_B,
    DXCOMPFUNC_A_ATOP_B,
    DXCOMPFUNC_A_SUBTRACT_B,
    DXCOMPFUNC_A_ADD_B,
    DXCOMPFUNC_A_XOR_B,
    DXCOMPFUNC_B            = ( DXCOMPFUNC_A            | DXCOMPFUNC_SWAP_AB ),
    DXCOMPFUNC_B_OVER_A     = ( DXCOMPFUNC_A_OVER_B     | DXCOMPFUNC_SWAP_AB ),
    DXCOMPFUNC_B_IN_A       = ( DXCOMPFUNC_A_IN_B       | DXCOMPFUNC_SWAP_AB ),
    DXCOMPFUNC_B_OUT_A      = ( DXCOMPFUNC_A_OUT_B      | DXCOMPFUNC_SWAP_AB ),
    DXCOMPFUNC_B_ATOP_A     = ( DXCOMPFUNC_A_ATOP_B     | DXCOMPFUNC_SWAP_AB ),
    DXCOMPFUNC_B_SUBTRACT_A = ( DXCOMPFUNC_A_SUBTRACT_B | DXCOMPFUNC_SWAP_AB ),
    DXCOMPFUNC_B_ADD_A      = ( DXCOMPFUNC_A_ADD_B      | DXCOMPFUNC_SWAP_AB ), 
    DXCOMPFUNC_NUMFUNCS             // This is used for range checking only
} DXCOMPFUNC;

typedef enum DXCOMPOSITEDISPID
{
    DISPID_DXCOMPOSITE_Function = 1,
} DXCOMPOSITEDISPID;

[
    object,
    uuid(9A43A843-0831-11D1-817F-0000F87557DB),
    dual,
    helpstring("IDXTComposite Interface"),
    pointer_default(unique)
]
interface IDXTComposite : IDispatch
{
    [propput, id(DISPID_DXCOMPOSITE_Function)]
        HRESULT Function([in] DXCOMPFUNC eFunc );
    [propget, id(DISPID_DXCOMPOSITE_Function)]
        HRESULT Function([out, retval]DXCOMPFUNC *peFunc );
};

//--- IExplode -------------------------------------------------
typedef enum EXPLODEDISPID
{
    DISPID_Explode_Tumble = DISPID_DXE_NEXT_ID,
    DISPID_Explode_MaxRotations,
    DISPID_Explode_FinalVelocity,
    DISPID_Explode_PositionJump,
    DISPID_Explode_DecayTime    
} EXPLODEDISPID;

[
    object,
    uuid(141DBAF0-55FB-11D1-B83E-00A0C933BE86),
    dual,
    helpstring("IExplode Interface"),
    pointer_default(unique)
]
interface IExplode : IDXEffect
{
    [propput, id(DISPID_Explode_Tumble)]
    HRESULT Tumble([in] BOOL newVal );
    [propget, id(DISPID_Explode_Tumble)]
    HRESULT Tumble([out, retval] BOOL *pVal);   
    [propput, id(DISPID_Explode_MaxRotations)]
    HRESULT MaxRotations([in] LONG newVal);
    [propget, id(DISPID_Explode_MaxRotations)]
    HRESULT MaxRotations([out, retval] LONG *pVal); 
    [propput, id(DISPID_Explode_FinalVelocity)]
    HRESULT FinalVelocity([in] float  newVal); 
    [propget, id(DISPID_Explode_FinalVelocity)]
    HRESULT FinalVelocity([out, retval] float *pVal);   
    [propput, id(DISPID_Explode_PositionJump)]
    HRESULT PositionJump([in] float newVal);
    [propget, id(DISPID_Explode_PositionJump)]
    HRESULT PositionJump([out, retval] float *pVal);    
    [propput, id(DISPID_Explode_DecayTime)]
    HRESULT DecayTime([in] float newVal);
    [propget, id(DISPID_Explode_DecayTime)]
    HRESULT DecayTime([out, retval] float *pVal);   
};

//--- IRuffle -------------------------------------------------
typedef enum RUFFLEDISPID
{
    DISPID_Ruffle_MaxRotations = DISPID_DXE_NEXT_ID
} RUFFLEDISPID;

[
    object,
    uuid(69EE49C4-6268-11D1-B83E-00A0C933BE86),
    dual,
    helpstring("IRuffle Interface"),
    pointer_default(unique)
]
interface IRuffle : IDXEffect
{
    [propget, id(DISPID_Ruffle_MaxRotations)]
        HRESULT MaxRotations([out, retval] long *pVal);
    [propput, id(DISPID_Ruffle_MaxRotations)]
        HRESULT MaxRotations([in] long newVal);
};

//--- IRipple -------------------------------------------------
[
    object,
    uuid(6DA4A05E-8E9E-11D1-904E-00C04FD9189D),
    dual,
    helpstring("IRipple Interface"),
    pointer_default(unique)
]
interface IRipple : IDXEffect
{
    [propget, id(11), helpstring("property XOrigin")] HRESULT XOrigin([out, retval] float *pVal);
    [propput, id(11), helpstring("property XOrigin")] HRESULT XOrigin([in] float newVal);
    [propget, id(12), helpstring("property YOrigin")] HRESULT YOrigin([out, retval] float *pVal);
    [propput, id(12), helpstring("property YOrigin")] HRESULT YOrigin([in] float newVal);
    [propget, id(13), helpstring("property Wavelength")] HRESULT Wavelength([out, retval] float *pVal);
    [propput, id(13), helpstring("property Wavelength")] HRESULT Wavelength([in] float newVal);
    [propget, id(14), helpstring("property Amplitude")] HRESULT Amplitude([out, retval] float *pVal);
    [propput, id(14), helpstring("property Amplitude")] HRESULT Amplitude([in] float newVal);
    [propget, id(15), helpstring("property NumberOfWaves")] HRESULT NumberOfWaves([out, retval] long *pVal);
    [propput, id(15), helpstring("property NumberOfWaves")] HRESULT NumberOfWaves([in] long newVal);
    [propget, id(16), helpstring("property MinSteps")] HRESULT MinSteps([out, retval] long *pVal);
    [propput, id(16), helpstring("property MinSteps")] HRESULT MinSteps([in] long newVal);
    [propget, id(17), helpstring("property MaxSteps")] HRESULT MaxSteps([out, retval] long *pVal);
    [propput, id(17), helpstring("property MaxSteps")] HRESULT MaxSteps([in] long newVal);
};

//--- IDissolve -------------------------------------------------
[
    object,
    uuid(90b5e2e0-5050-11d1-b83e-00a0c933be86),
    dual,
    helpstring("IDissolve Interface"),
    pointer_default(unique)
]
interface IDissolve : IDXEffect
{
//      [propget, id(11), helpstring("property Direction")] HRESULT Direction([out, retval] long *pVal);
//      [propput, id(11), helpstring("property Direction")] HRESULT Direction([in] long newVal);
        [propget, id(1), helpstring("property SpeedPt0")] HRESULT SpeedPt0([out, retval] float *pVal);
        [propput, id(1), helpstring("property SpeedPt0")] HRESULT SpeedPt0([in] float newVal);
        [propget, id(2), helpstring("property SpeedPt1")] HRESULT SpeedPt1([out, retval] float *pVal);
        [propput, id(2), helpstring("property SpeedPt1")] HRESULT SpeedPt1([in] float newVal);
        [propget, id(3), helpstring("property SpeedPt2")] HRESULT SpeedPt2([out, retval] float *pVal);
        [propput, id(3), helpstring("property SpeedPt2")] HRESULT SpeedPt2([in] float newVal);
        [propget, id(4), helpstring("property SpeedPt3")] HRESULT SpeedPt3([out, retval] float *pVal);
        [propput, id(4), helpstring("property SpeedPt3")] HRESULT SpeedPt3([in] float newVal);
        [propget, id(5), helpstring("property SpeedPt4")] HRESULT SpeedPt4([out, retval] float *pVal);
        [propput, id(5), helpstring("property SpeedPt4")] HRESULT SpeedPt4([in] float newVal);
        [propget, id(6), helpstring("property SpeedPt5")] HRESULT SpeedPt5([out, retval] float *pVal);
        [propput, id(6), helpstring("property SpeedPt5")] HRESULT SpeedPt5([in] float newVal);
        [propget, id(7), helpstring("property SpeedPt6")] HRESULT SpeedPt6([out, retval] float *pVal);
        [propput, id(7), helpstring("property SpeedPt6")] HRESULT SpeedPt6([in] float newVal);
        [propget, id(8), helpstring("property SpeedPt7")] HRESULT SpeedPt7([out, retval] float *pVal);
        [propput, id(8), helpstring("property SpeedPt7")] HRESULT SpeedPt7([in] float newVal);
        [propget, id(9), helpstring("property SpeedPt8")] HRESULT SpeedPt8([out, retval] float *pVal);
        [propput, id(9), helpstring("property SpeedPt8")] HRESULT SpeedPt8([in] float newVal);
        [propget, id(10), helpstring("property SpeedPt9")] HRESULT SpeedPt9([out, retval] float *pVal);
        [propput, id(10), helpstring("property SpeedPt9")] HRESULT SpeedPt9([in] float newVal);
};

//--- IFlip -------------------------------------------------
typedef enum FLIPDISPID
{
    DISPID_Flip_Width = DISPID_DXE_NEXT_ID,
    DISPID_Flip_Height,
    DISPID_Flip_Depth
} FLIPDISPID;
[
    object,
    uuid(945F5841-3A8D-11D1-9037-00C04FD9189D),
    dual,
    helpstring("IFlip Interface"),
    pointer_default(unique)
]
interface IFlip : IDXEffect
{
    [propget, id(DISPID_Flip_Width), helpstring("property Width")] 
    HRESULT Width([out, retval] float *pVal);
    [propput, id(DISPID_Flip_Width), helpstring("property Width")] 
    HRESULT Width([in] float newVal);
    [propget, id(DISPID_Flip_Height), helpstring("property Height")] 
    HRESULT Height([out, retval] float *pVal);
    [propput, id(DISPID_Flip_Height), helpstring("property Height")]
    HRESULT Height([in] float newVal);

    [propput, id(DISPID_Flip_Depth), helpstring("property Depth")] 
    HRESULT Depth([in] float  newVal); 
    [propget, id(DISPID_Flip_Depth), helpstring("property Depth")]
    HRESULT Depth([out, retval] float *pVal);   
};

//--- IHeightField -------------------------------------------------
typedef enum HeightFieldDISPID
{
    DISPID_HeightField_Width = DISPID_DXE_NEXT_ID,
    DISPID_HeightField_Height,
    DISPID_HeightField_Depth,
    DISPID_HeightField_Samples
} HeightFieldDISPID;
[
    object,
    uuid(0492170A-B159-11d1-9207-0000F8758E66),
    dual,
    helpstring("IHeightField Interface"),
    pointer_default(unique)
]
interface IHeightField : IDXEffect
{
    [propget, id(DISPID_HeightField_Width ), helpstring("property Width")] HRESULT Width([out, retval] float *pVal);
    [propput, id(DISPID_HeightField_Width ), helpstring("property Width")] HRESULT Width([in] float newVal);
    [propget, id(DISPID_HeightField_Height), helpstring("property Height")] HRESULT Height([out, retval] float *pVal);
    [propput, id(DISPID_HeightField_Height), helpstring("property Height")] HRESULT Height([in] float newVal);
    [propget, id(DISPID_HeightField_Depth), helpstring("property Depth")] HRESULT Depth([out, retval] float *pVal);
    [propput, id(DISPID_HeightField_Depth), helpstring("property Depth")] HRESULT Depth([in] float newVal);
    [propget, id(DISPID_HeightField_Samples), helpstring("property Samples")] HRESULT Samples([out, retval] long *pVal);
    [propput, id(DISPID_HeightField_Samples), helpstring("property Samples")] HRESULT Samples([in] long newVal);
};

    
//--- IDXTWipe -------------------------------------------------
typedef enum DXWIPEDIRECTION
{
    DXWD_HORIZONTAL,
    DXWD_VERTICAL
} DXWIPEDIRECTION;

typedef enum DXWIPEDISPID
{
    DISPID_DXW_GradientSize = DISPID_DXE_NEXT_ID,
    DISPID_DXW_WipeStyle
} DXWIPEDISPID;

[
    object,
    uuid(AF279B2F-86EB-11D1-81BF-0000F87557DB),
    dual,
    helpstring("IDXTWipe Interface"),
    pointer_default(unique)
]
interface IDXTWipe : IDXEffect
{
    [propget, id(DISPID_DXW_GradientSize)]
        HRESULT GradientSize( [out, retval]float *pPercentSize );
    [propput, id(DISPID_DXW_GradientSize)]
        HRESULT GradientSize( [in]float PercentSize );
    [propget, id(DISPID_DXW_WipeStyle)]
        HRESULT WipeStyle( [out, retval]DXWIPEDIRECTION *pVal );
    [propput, id(DISPID_DXW_WipeStyle)]
        HRESULT WipeStyle( [in]DXWIPEDIRECTION newVal );
};

//--- ICrBlur -------------------------------------------------
typedef enum CRBLURDISPID
{
    DISPID_CRB_MakeShadow = 1,
    DISPID_CRB_ShadowOpacity,
    DISPID_CRB_PixelRadius
} CRBLURDISPID;

[
    object,
    uuid(9F7C7827-E87A-11d1-81E0-0000F87557DB),
    dual,
    helpstring("ICrBlur Interface"),
    pointer_default(unique)
]
interface ICrBlur : IDispatch
{
    [propget, id(DISPID_CRB_MakeShadow)]
        HRESULT MakeShadow( [out, retval]VARIANT_BOOL *pVal );
    [propput, id(DISPID_CRB_MakeShadow)]
        HRESULT MakeShadow( [in]VARIANT_BOOL newVal );
    [propget, id(DISPID_CRB_ShadowOpacity)]
        HRESULT ShadowOpacity( [out, retval]float *pVal );
    [propput, id(DISPID_CRB_ShadowOpacity)]
        HRESULT ShadowOpacity( [in]float newVal );
    [propget, id(DISPID_CRB_PixelRadius)]
        HRESULT PixelRadius( [out, retval]float *pPixelRadius );
    [propput, id(DISPID_CRB_PixelRadius)]
        HRESULT PixelRadius( [in]float PixelRadius );
};

//--- ICrEngrave -------------------------------------------------
typedef enum CRENGRAVEDISPID
{
    DISPID_CREN_Bias = 1,
} CRENGRAVEDISPID;

[
    object,
    uuid(E4ACFB7F-053E-11d2-81EA-0000F87557DB),
    dual,
    helpstring("ICrEngrave Interface"),
    pointer_default(unique)
]
interface ICrEngrave : IDispatch
{
    [propget, id(DISPID_CREN_Bias)]
        HRESULT Bias( [out, retval]float *pVal );
    [propput, id(DISPID_CREN_Bias)]
        HRESULT Bias( [in]float newVal );
};

//--- ICrEmboss -------------------------------------------------
typedef enum CREMBOSSDISPID
{
    DISPID_CREM_Bias = 1,
} CREMBOSSDISPID;

[
    object,
    uuid(E4ACFB80-053E-11d2-81EA-0000F87557DB),
    dual,
    helpstring("ICrEmboss Interface"),
    pointer_default(unique)
]
interface ICrEmboss : IDispatch
{
    [propget, id(DISPID_CREM_Bias)]
        HRESULT Bias( [out, retval]float *pVal );
    [propput, id(DISPID_CREM_Bias)]
        HRESULT Bias( [in]float newVal );
};

//--- IDXTFade -------------------------------------------------
[
    object,
    uuid(16B280C4-EE70-11D1-9066-00C04FD9189D),
    dual,
    helpstring("IDXTFade Interface"),
    pointer_default(unique)
]
interface IDXTFade : IDXEffect
{
    [propget, id(1), helpstring("property Overlap")] HRESULT Overlap([out, retval] float *pVal);
    [propput, id(1), helpstring("property Overlap")] HRESULT Overlap([in] float newVal);
    [propget, id(2), helpstring("property Center")] HRESULT Center([out, retval] BOOL *pVal);
    [propput, id(2), helpstring("property Center")] HRESULT Center([in] BOOL newVal);
};

//--- IDXBasicImage -------------------------------------------------
[
    object,
    uuid(16B280C7-EE70-11D1-9066-00C04FD9189D),
    dual,
    helpstring("IDXBasicImage Interface"),
    pointer_default(unique)
]
interface IDXBasicImage : IDispatch
{
    [propget, id(1), helpstring("property Rotation")] HRESULT Rotation([out, retval] int *pVal);
    [propput, id(1), helpstring("property Rotation")] HRESULT Rotation([in] int newVal);
    [propget, id(2), helpstring("property Mirror")] HRESULT Mirror([out, retval] BOOL *pVal);
    [propput, id(2), helpstring("property Mirror")] HRESULT Mirror([in] BOOL newVal);
    [propget, id(3), helpstring("property GrayScale")] HRESULT GrayScale([out, retval] BOOL *pVal);
    [propput, id(3), helpstring("property GrayScale")] HRESULT GrayScale([in] BOOL newVal);
    [propget, id(4), helpstring("property Opacity")] HRESULT Opacity([out, retval] float *pVal);
    [propput, id(4), helpstring("property Opacity")] HRESULT Opacity([in] float newVal);
    [propget, id(5), helpstring("property Invert")] HRESULT Invert([out, retval] BOOL *pVal);
    [propput, id(5), helpstring("property Invert")] HRESULT Invert([in] BOOL newVal);
    [propget, id(6), helpstring("property XRay")] HRESULT XRay([out, retval] BOOL *pVal);
    [propput, id(6), helpstring("property XRay")] HRESULT XRay([in] BOOL newVal);
    [propget, id(7), helpstring("property Mask")] HRESULT Mask([out, retval] BOOL *pVal);
    [propput, id(7), helpstring("property Mask")] HRESULT Mask([in] BOOL newVal);
    [propget, id(8), helpstring("property MaskColor")] HRESULT MaskColor([out, retval] int *pVal);
    [propput, id(8), helpstring("property MaskColor")] HRESULT MaskColor([in] int newVal);
};


[
    object,
    uuid(D33E180F-FBE9-11d1-906A-00C04FD9189D),
    dual,
    helpstring("IDXPixelate Interface"),
    pointer_default(unique)
]
interface IDXPixelate : IDXEffect
{
    [propget, id(1), helpstring("property MaxSquare")] HRESULT MaxSquare([out, retval] int *pVal);
    [propput, id(1), helpstring("property MaxSquare")] HRESULT MaxSquare([in] int newVal);
}

//=== CoClass definitions =================================================
[
    uuid(5E77EB03-937C-11D1-B047-00AA003B6061),
    version(1.0),
    helpstring("DXTMsft 1.0 Type Library")
]
library DXTMSFTLib
{
    importlib("stdole32.tlb");
    importlib("stdole2.tlb");

    [
    uuid(141DBAF1-55FB-11D1-B83E-00A0C933BE86),
    helpstring("Explode Class")
    ]
    coclass Explode
    {
    [default] interface IExplode;
    };
    [
    uuid(C53059E1-E6E3-11d1-BA12-00C04FB6BD36),
    helpstring("ExplodeProp Class")
    ]
    coclass ExplodeProp
    {
    interface IUnknown;
    };
    [
    uuid(69EE49C5-6268-11D1-B83E-00A0C933BE86),
    helpstring("Ruffle Class")
    ]
    coclass Ruffle
    {
    [default] interface IRuffle;
    };
    [
    uuid(A21CA3E1-E6DA-11d1-BA12-00C04FB6BD36),
    helpstring("RuffleProp Class")
    ]
    coclass RuffleProp
    {
    interface IUnknown;
    };
    [
    uuid(945F5842-3A8D-11D1-9037-00C04FD9189D),
    helpstring("Ripple Class")
    ]
    coclass Ripple
    {
    [default] interface IRipple;
    };
    [
    uuid(945F5843-3A8D-11D1-9037-00C04FD9189D),
    helpstring("RipProp Class")
    ]
    coclass RipProp
    {
    interface IUnknown;
    };
    [
    uuid(90b5e2e1-5050-11d1-b83e-00a0c933be86),
    helpstring("Dissolve Class")
    ]
    coclass Dissolve
    {
    [default] interface IDissolve;
    };
    [
        uuid(3A5EA1BA-3C28-11D1-9039-00C04FD9189D),
        helpstring("Flip Class")
    ]
    coclass Flip
    {
    [default] interface IFlip;
    };
    [
    uuid(04921709-B159-11d1-9207-0000F8758E66),
    helpstring("HeightField Class")
    ]
    coclass HeightField
    {
    [default] interface IHeightField;
    };
    [
        uuid(9A43A844-0831-11D1-817F-0000F87557DB),
        helpstring("DXTComposite Class")
    ]
    coclass DXTComposite
    {
        [default] interface IDXTComposite;
    };
    [
        uuid(015E2939-C341-11d1-81D1-0000F87557DB),
        helpstring("DXTResampler Class")
    ]
    coclass DXTResampler
    {
        [default] interface IDXTResampler;
    };
    [
        uuid(3E669F1A-9C23-11d1-9053-00C04FD9189D),
        helpstring("DXBufferCache Class")
    ]
    coclass DXBufferCache
    {
        [default] interface IDXBufferCache;
    };
    [
        uuid(1E54333B-2A00-11d1-8198-0000F87557DB),
        helpstring("DXLUTBuilder Class")
    ]
    coclass DXLUTBuilder
    {
        [default] interface IDXDLUTBuilder;
        interface IDXLUTBuilder;
        interface IDXLookupTable;
    };
    [
        uuid(623E2882-FC0E-11d1-9A77-0000F8756A10),
        helpstring("DXTGradientD Class")
    ]
    coclass DXTGradientD
    {
        [default] interface IDXTGradientD;
    };
    [
        uuid(AF279B30-86EB-11D1-81BF-0000F87557DB),
        helpstring("DXTWipe Class")
    ]
    coclass DXTWipe
    {
    [default] interface IDXTWipe;
    };
    [
        uuid(2BC0EF29-E6BA-11d1-81DD-0000F87557DB),
        helpstring("DXTConvolution Class")
    ]
    coclass DXTConvolution
    {
        [default] interface IDXTConvolution;
    };
    [
        uuid(7312498D-E87A-11d1-81E0-0000F87557DB),
        helpstring("CrBlur Class")
    ]
    coclass CrBlur
    {
        [default] interface ICrBlur;
    };
    [
        uuid(F515306D-0156-11d2-81EA-0000F87557DB),
        helpstring("CrEmboss Class")
    ]
    coclass CrEmboss
    {
        [default] interface ICrEmboss;
    };

    [
        uuid(F515306E-0156-11d2-81EA-0000F87557DB),
        helpstring("CrEngrave Class")
    ]
    coclass CrEngrave
    {
        [default] interface ICrEngrave;
    };
    [
        uuid(16B280C5-EE70-11D1-9066-00C04FD9189D),
        helpstring("DXFade Class")
    ]
    coclass DXFade
    {
        [default] interface IDXTFade;
    };
    [
        uuid(16B280C6-EE70-11D1-9066-00C04FD9189D),
        helpstring("FadePP Class")
    ]
    coclass FadePP
    {
        interface IUnknown;
    };

    [
        uuid(16B280C8-EE70-11D1-9066-00C04FD9189D),
        helpstring("BasicImageEffects Class")
    ]
    coclass BasicImageEffects
    {
        [default] interface IDXBasicImage;
    };
    [
        uuid(16B280C9-EE70-11D1-9066-00C04FD9189D),
        helpstring("BasicImageEffectsPP Class")
    ]
    coclass BasicImageEffectsPP
    {
        interface IUnknown;
    };

    [
        uuid(4CCEA634-FBE0-11d1-906A-00C04FD9189D),
        helpstring("Pixelate Effect Class")
    ]
    coclass Pixelate
    {
        [default] interface IDXPixelate;
    }

    [
        uuid(4CCEA635-FBE0-11d1-906A-00C04FD9189D),
        helpstring("Pixelate Property Page Class")
    ]
    coclass PixelatePP
    {
        interface IUnknown;
    };

    [
        uuid(7FFE4D08-FBFD-11d1-9A77-0000F8756A10),
        helpstring("DXTWipePP Class")
    ]
    coclass DXTWipePP
    {
        interface IUnknown;
    };
    [
        uuid(623E287C-FC0E-11d1-9A77-0000F8756A10),
        helpstring("ResamplePP Class")
    ]
    coclass ResamplePP
    {
        interface IUnknown;
    };
    [
        uuid(623E287E-FC0E-11d1-9A77-0000F8756A10),
        helpstring("CrBlurPP Class")
    ]
    coclass CrBlurPP
    {
        interface IUnknown;
    };
    [
        uuid(623E2880-FC0E-11d1-9A77-0000F8756A10),
        helpstring("GradientPP Class")
    ]
    coclass GradientPP
    {
        interface IUnknown;
    };
    [
        uuid(25B33660-FD83-11d1-8ADE-444553540001),
        helpstring("CompositePP Class")
    ]
    coclass CompositePP
    {
        interface IUnknown;
    };
    [
        uuid(25B33661-FD83-11d1-8ADE-444553540001),
        helpstring("ConvolvePP Class")
    ]
    coclass ConvolvePP
    {
        interface IUnknown;
    };
    [
        uuid(25B33662-FD83-11d1-8ADE-444553540001),
        helpstring("LUTBuilderPP Class")
    ]
    coclass LUTBuilderPP
    {
        interface IUnknown;
    };
    [
        uuid(7A8402E0-FBD6-11D1-B5E0-00AA003B6061),
        helpstring("FlipProp Class")
    ]
    coclass FlipProp
    {
        interface IUnknown;
    };
    

    [
        uuid(7A8402E3-FBD6-11D1-B5E0-00AA003B6061),
        helpstring("HtFieldProp Class")
    ]
    coclass HtFieldProp
    {
        interface IUnknown;
    };

    [
        uuid(9A8A1CC2-FEEA-11D1-B5E0-00AA003B6061),
        helpstring("Disslvpp Class")
    ]
    coclass Disslvpp
    {
        interface IUnknown;
    };
};
