213 lines
5.3 KiB
C++
213 lines
5.3 KiB
C++
#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
|