#ifndef __TRACKER_H__
#define __TRACKER_H__

#include "sprite.h"

extern HCURSOR HCursorFromTrackerState( int m );

class CTracker : public CSprite
    {
    public:

    enum STATE
        {                               // WARNING - mapTrackerStateToPHCursor
        nil,                            //           (in tracker.cpp) is
        predrag,                        //           dependant on the
        moving,                         //           ordering of this enum!
        resizingTop,
        resizingLeft,
        resizingRight,
        resizingBottom,
        resizingTopLeft,
        resizingTopRight,
        resizingBottomLeft,
        resizingBottomRight,
        };

    enum { HANDLE_SIZE = 3 };           // size of tracker resize handles

    enum EDGES
        {
        none   = 0,
        left   = 1,
        top    = 2,
        right  = 4,
        bottom = 8,
        all    = 15
        };

    static  void    DrawBorder ( CDC* pDC, const CRect& rect, EDGES edges = all );
    static  void    DrawHandles( CDC* pDC, const CRect& rect, EDGES edges );

    static  STATE   HitTest(const CRect& rect, CPoint pt, STATE defaultState );

    static  void    DrawBorderRgn ( CDC* pdc, const CRect& trackerRect,              CRgn *pcRgnPoly );
    static  void    DrawHandlesRgn( CDC* pDC, const CRect&        rect, EDGES edges, CRgn *pcRgnPoly );

    static  STATE   HitTestRgn(const CRect& rect, CPoint pt, STATE defaultState, CRgn *pcRgnPoly );

    static  void    CleanUpTracker();
    };

#endif // __TRACKER_H__