#if !defined(INC__DUserCtrl_h__INCLUDED) #define INC__DUserCtrl_h__INCLUDED #ifdef __cplusplus extern "C" { #endif #ifdef __cplusplus #define BEGIN_INTERPOLATION_INTERFACE(i, guid) \ struct __declspec(uuid(guid)) i; \ struct i : public IInterpolation \ { #define END_INTERPOLATION_INTERFACE() \ }; #define BEGIN_ANIMATION_INTERFACE(i, guid) \ struct __declspec(uuid(guid)) i; \ struct i : public IAnimation \ { #define END_ANIMATION_INTERFACE() \ }; #else // TODO: Create C definition #endif /***************************************************************************\ * * ButtonGadget * \***************************************************************************/ DEFINE_EVENT(evButtonClicked, "DCADCE53-062B-4d1f-B36F-3F2EB27B88CF"); #ifdef GADGET_ENABLE_COM /***************************************************************************\ * * Interpolation * \***************************************************************************/ struct __declspec(uuid("E188CC9E-4805-487d-9313-3B22AC8FE336")) IInterpolation; interface IInterpolation : public IUnknown { public: STDMETHOD_(float, Compute)(float flProgress, float flStart, float flEnd) PURE; }; BEGIN_INTERPOLATION_INTERFACE(ILinearInterpolation, "3FD65045-7BF5-4a65-B137-F441529BD8F4") END_INTERPOLATION_INTERFACE() BEGIN_INTERPOLATION_INTERFACE(ILogInterpolation, "98C0FB9A-534D-4b9f-A439-A8E13F0C2D9E") STDMETHOD_(void, SetScale)(float flScale) PURE; END_INTERPOLATION_INTERFACE() BEGIN_INTERPOLATION_INTERFACE(IExpInterpolation, "280DC2CC-7703-4147-8356-3FAACE662CD1") STDMETHOD_(void, SetScale)(float flScale) PURE; END_INTERPOLATION_INTERFACE() BEGIN_INTERPOLATION_INTERFACE(ISInterpolation, "D07C8B2F-1896-438f-9EC2-6938ABD0D20C") STDMETHOD_(void, SetScale)(float flScale) PURE; END_INTERPOLATION_INTERFACE() #define INTERPOLATION_LINEAR (1) #define INTERPOLATION_LOG (2) #define INTERPOLATION_EXP (3) #define INTERPOLATION_S (4) DUSER_API BOOL WINAPI BuildInterpolation(UINT nIPolID, int nVersion, REFIID riid, void ** ppvUnk); /***************************************************************************\ * * Animations * \***************************************************************************/ #ifdef GADGET_ENABLE_TRANSITIONS interface IAnimationCallback; struct __declspec(uuid("7AACE668-81EB-48d7-8734-267C83FF6DFF")) IAnimation; interface IAnimation : public IUnknown { public: STDMETHOD_(void, SetFunction)(IInterpolation * pipol) PURE; enum ETime { tComplete, // Completed normally tEnd, // Jumped to end tAbort, // Aborted in place tReset, // Reset to beginning tDestroy // The Gadget being animationed has been destroyed }; STDMETHOD_(void, SetTime)(ETime time) PURE; STDMETHOD_(UINT, GetID)() const PURE; STDMETHOD_(void, SetCallback)(IAnimationCallback * pcb) PURE; }; interface IAnimationCallback : public IUnknown { public: STDMETHOD_(void, OnComplete)(IAnimation * pAni, IAnimation::ETime time) PURE; STDMETHOD_(void, OnSetTime)(IAnimation * pAni, IAnimation::ETime time) PURE; }; #define ANIF_USESTART 0x00000001 // Use the specified start values // instead of querying the current struct GANI_DESC { DWORD cbSize; HGADGET hgadChange; GMA_ACTION act; UINT nAniFlags; IInterpolation * pipol; IAnimationCallback * pcb; }; #define GANI_ALPHACOMPLETE_OPTIMIZE 0x00000001 // Turn off alpha-blending if not needed struct GANI_ALPHADESC : public GANI_DESC { float flStart; float flEnd; BOOL fPushToChildren; UINT nOnComplete; }; struct GANI_SCALEDESC : public GANI_DESC { enum EAlignment { aTopLeft, aTopCenter, aTopRight, aMiddleLeft, aMiddleCenter, aMiddleRight, aBottomLeft, aBottomCenter, aBottomRight }; EAlignment al; float flStart; float flEnd; }; struct GANI_RECTDESC : public GANI_DESC { POINT ptStart; POINT ptEnd; SIZE sizeStart; SIZE sizeEnd; UINT nChangeFlags; }; #define GANI_ROTATEDIRECTION_SHORT 0 // Shortest arc #define GANI_ROTATEDIRECTION_LONG 1 // Longer arc #define GANI_ROTATEDIRECTION_CW 2 // Clock-wise #define GANI_ROTATEDIRECTION_CCW 3 // Counter clock-wise struct GANI_ROTATEDESC : public GANI_DESC { float flStart; float flEnd; UINT nDir; }; #define ANIMATION_ALPHA (1) #define ANIMATION_SCALE (2) #define ANIMATION_RECT (3) #define ANIMATION_ROTATE (4) DUSER_API BOOL WINAPI BuildAnimation(UINT nAniID, int nVersion, GANI_DESC * pDesc, REFIID riid, void ** ppvUnk); DUSER_API BOOL WINAPI GetGadgetAnimation(HGADGET hgad, UINT nAniID, REFIID riid, void ** ppvUnk); #endif // GADGET_ENABLE_TRANSITIONS #endif // GADGET_ENABLE_COM DUSER_API BOOL WINAPI BuildDropTarget(HGADGET hgadRoot, HWND hwnd); #ifdef __cplusplus }; #endif #endif // INC__DUserCtrl_h__INCLUDED