windows-nt/Source/XPSP1/NT/public/internal/windows/inc/duser/duserctrl.h

213 lines
5.3 KiB
C
Raw Normal View History

2020-09-26 03:20:57 -05:00
#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