// frame.h

#ifndef __INCLUDE_FRAME
#define __INCLUDE_FRAME

#ifdef __cplusplus
extern "C" 
{
#endif

typedef	POINT	XY;

typedef struct tagFRAME
{
	void	   *pvData;		// Recognizer specific private data
	STROKEINFO	info;		// Physical info about ink (Penwin.h)
	UINT        csmoothxy;	// points in smoothed strokes
	XY		   *rgrawxy;	// tablet coords of all the points in the stroke
	XY		   *rgsmoothxy;	// array of points after smoothing
	RECT        rect;		// bounding box of this stroke
	int         iframe;		// pos of this frame in linked list of glyphs
} FRAME;

FRAME	   *NewFRAME(void);
void		DestroyFRAME(FRAME *self);
RECT	   *RectFRAME(FRAME *self);

BOOL IsSafeForAdd(int a, int b);
BOOL IsSafeForMult(int a, int b);

BOOL TranslateFrame (FRAME *pFrame, int dx, int dy);
FRAME	*copyFRAME(FRAME *pFrame);

#define SetIFrameFRAME(frame,i)		((frame)->iframe = (i))
#define IFrameFRAME(frame)			((frame)->iframe)
#define DeInitRectFRAME(frame)		((frame)->rect.left = -1)
#define IsVisibleSTROKE(info)		(((info)->wPdk) & PDK_TIPMASK)
#define IsVisibleFRAME(frame)		(IsVisibleSTROKE(&(frame)->info))
#define RgrawxyFRAME(frame)			((frame)->rgrawxy)
#define CrawxyFRAME(frame)			((frame)->info.cPnt)
#define RawxyAtFRAME(frame,i)		((frame)->rgrawxy[i])
#define LppointFRAME(frame)			((LPPOINT)(frame)->rgrawxy)
#define CpointFRAME(frame)			((frame)->info.cPnt)
#define CpointSmoothFRAME(frame)	((frame)->csmoothxy)
#define LpframeinfoFRAME(frame)		(&(frame)->info)


#ifdef __cplusplus
};
#endif

#endif	//__INCLUDE_FRAME