/************************ moth\inc\mothp.h *********************************\ * * * Private Include File for Moth Project * * * \***************************************************************************/ #ifndef __INCLUDE_MOTHP_H #define __INCLUDE_MOTHP_H #include "common.h" #include "twisterdefs.h" #ifdef __cplusplus extern "C" { #endif #define XRECO_ALT_MAX 1 #define PPI_CONVERSION 254 // Count of 0.1mm in 1 inch #define THREE_HALF(X) ( (X) + ((X)/2) ) #define abs(x) ((x) < 0 ? -(x) : (x)) typedef struct _STROKE { int cPoints; POINT *pPoints; struct _STROKE *pStrokeNext; } STROKE; typedef struct tagMOTH_DB { DWORD adwMothGestures[MAX_GESTURE_DWORD_COUNT]; // Gestures supported by Moth UINT uDoubleDist; // Max distance between starting poins of a DOUBLE_TAP UINT uMaxTapLength; // Max length of a tap stroke UINT uMaxTapDist; // Max distance from the start of a tap } MOTH_DB; extern MOTH_DB gMothDb; // Moth lib external variable! /***************************************************************************\ * ReadRegistryValues: * * Read values from the registry and assign them to the database. * \***************************************************************************/ void ReadRegistryValues(void); /***************************************************************************\ * TapGestureReco: * * Recognize a single-tap gesture (and output a list of alternates). * * Return the number of alternates computed (either 0 or 1). * \***************************************************************************/ int TapGestureReco(GLYPH *pGlyph, // I: Input ink GEST_ALTERNATE *pGestAlt, // I/O: List of alternates int cAlts, // I: Length of the list DWORD *pdwEnabledGestures, // I: Bit array of enabled gestures LONG lPPI); // I: Points per inch /***************************************************************************\ * DoubleTapGestureReco: * * Recognize a double-tap gesture (and output a list of alternates). * * Return the number of alternates computed (either 0 or 1). * \***************************************************************************/ int DoubleTapGestureReco(GLYPH *pGlyph, // I: Input ink GEST_ALTERNATE *pGestAlt, // I/O: List of alternates int cAlts, // I: Length of the list DWORD *pdwEnabledGestures, // I: Bit array of enabled gestures LONG lPPI); // I: Points per inch /***************************************************************************\ * ScratchoutGestureReco: * * Recognize scratchout gesture (and output a list of alternates). * * Return the number of alternates computed (either 0 or 1). * \***************************************************************************/ int ScratchoutGestureReco(POINT *pPts, // I: Array of points (single stroke) int cPts, // I: Number of points in stroke GEST_ALTERNATE *pGestAlt, // O: Array to contain alternates int cMaxAlts, // I: Max alternates to return DWORD *pdwEnabledGestures); // I: Currently enabled gestures /***************************************************************************\ * CalligrapherGestureReco: * * Recognize all "straight" gestures (and output a list of alternates).* * Return the number of alternates computed (either 0 or 1). * \***************************************************************************/ int CalligrapherGestureReco(POINT *pPts, // I: Array of points (single stroke) int cPts, // I: Number of points in stroke GEST_ALTERNATE *pGestAlt, // O: Array to contain alternates int cMaxAlts, // I: Max alternates to return DWORD *pdwEnabledGestures); // I: Currently enabled gestures /***************************************************************************\ * GestureATan2: * * Compute the arctangent (in degrees) of y/x. * \***************************************************************************/ int GestureATan2(int x, int y); /***************************************************************************\ * GestureInteriorAngle: * * Compute the interior angle (in degrees) between three points. * * 0 <= theta <= 180 * \***************************************************************************/ int GestureInteriorAngle(POINT *p1, // I: End-point POINT *p2, // I: Vertex POINT *p3); // I: End-point /***************************************************************************\ * GestureIsStraight: * * Given a sequence of points, determine if it's straight. * \***************************************************************************/ BOOL GestureIsStraight(POINT *pt, // I: Array of points int iFirst, // I: Index of the first point int iLast, // I: Index of the last point UINT tolerance); // I: Fraction of total length points are /***************************************************************************\ * GestureDistance: * * Compute the distance between two points. * \***************************************************************************/ UINT GestureDistance(POINT *p1, // I: Point 1 POINT *p2); // I: Point 2 #if 0 /* Given an input star, polygon, or circle, identify and return */ HRESULT WINAPI PolygonGestureReco( POINT *ppt, // Array of points (single stroke) int cpt, // Number of points in stroke GEST_ALTERNATE *pGestAlts, // Array to contain alternates int *pcAlts, // max alternates to return/alternates left DWORD *pdwEnabledGestures // Currently enabled gestures ); #endif // 0 #ifdef __cplusplus } #endif #endif // __INCLUDE_MOTHP_H