436 lines
12 KiB
C++
436 lines
12 KiB
C++
#ifndef __IMGTOOLS_H__
|
|
#define __IMGTOOLS_H__
|
|
|
|
extern BOOL g_bBrushVisible;
|
|
extern BOOL g_bPickingColor;
|
|
extern UINT g_nStrokeWidth;
|
|
|
|
typedef enum
|
|
{
|
|
eFREEHAND,
|
|
eEAST_WEST, //HORIZONTAL
|
|
eNORTH_SOUTH, //VERTICAL
|
|
eNORTH_WEST, // 45 degree up to left
|
|
eSOUTH_EAST, // 45 degree down to right
|
|
eNORTH_EAST, // 45 degree up to right
|
|
eSOUTH_WEST // 45 degree down to left
|
|
} eDRAWCONSTRAINTDIRECTION;
|
|
|
|
class CImgTool : public CObject
|
|
{
|
|
DECLARE_DYNAMIC( CImgTool )
|
|
|
|
protected:
|
|
|
|
eDRAWCONSTRAINTDIRECTION DetermineDrawDirection(MTI *pmti);
|
|
virtual void AdjustPointsForConstraint(MTI *pmti);
|
|
virtual void PreProcessPoints(MTI *pmti);
|
|
|
|
eDRAWCONSTRAINTDIRECTION m_eDrawDirection;
|
|
|
|
public:
|
|
|
|
CImgTool();
|
|
|
|
virtual void OnEnter ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnLeave ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnStartDrag ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnEndDrag ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnDrag ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnMove ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnTimer ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnCancel ( CImgWnd* pImgWnd);
|
|
virtual void OnActivate ( BOOL bActivate );
|
|
virtual void OnShowDragger ( CImgWnd* pImgWnd, BOOL bShow );
|
|
virtual void OnPaintOptions ( CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect );
|
|
virtual void OnClickOptions ( CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint );
|
|
virtual void OnUpdateColors (CImgWnd* pImgWnd);
|
|
virtual BOOL CanEndMultiptOperation(MTI* pmti );
|
|
virtual void EndMultiptOperation(BOOL bAbort = FALSE);
|
|
|
|
virtual BOOL IsToolModal(void);
|
|
virtual BOOL SetupPenBrush(HDC hDC, BOOL bLeftButton, BOOL bSetup, BOOL bCtrlDown);
|
|
|
|
void PaintStdBrushes( CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect );
|
|
|
|
|
|
void PaintStdPattern( CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect );
|
|
|
|
void ClickStdBrushes(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
void ClickStdPattern(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
static void HideDragger(CImgWnd* pImgWnd);
|
|
static void ShowDragger(CImgWnd* pImgWnd);
|
|
|
|
inline BOOL UsesBrush()const { return m_bUsesBrush; }
|
|
inline BOOL IsToggle() const { return m_bToggleWithPrev; }
|
|
inline BOOL IsFilled() const { return m_bFilled; }
|
|
inline BOOL HasBorder()const { return m_bBorder; }
|
|
inline UINT GetCmdID() const { return m_nCmdID; }
|
|
inline BOOL IsMultPtOpInProgress() const { return m_bMultPtOpInProgress; }
|
|
|
|
virtual BOOL IsUndoable();
|
|
virtual UINT GetCursorID();
|
|
|
|
void SetStrokeWidth(UINT nNewStrokeWidth);
|
|
|
|
inline UINT GetStrokeWidth() const { return m_nStrokeWidth; }
|
|
inline UINT GetStrokeShape() const { return m_nStrokeShape; }
|
|
void SetStrokeShape(UINT nNewStrokeShape);
|
|
|
|
static inline CImgTool* GetCurrent() { return c_pCurrentImgTool; }
|
|
static inline UINT GetCurrentID() { return c_pCurrentImgTool->m_nCmdID; }
|
|
static inline BOOL IsDragging() { return c_bDragging; }
|
|
|
|
void Select();
|
|
|
|
static void Select(UINT nCmdID);
|
|
static inline void SelectPrevious() {
|
|
ASSERT(c_pPreviousImgTool != NULL);
|
|
c_pPreviousImgTool->Select();
|
|
}
|
|
static CImgTool* FromID(UINT nCmdID);
|
|
|
|
protected:
|
|
|
|
BOOL m_bUsesBrush;
|
|
BOOL m_bIsUndoable;
|
|
BOOL m_bCanBePrevTool;
|
|
BOOL m_bToggleWithPrev;
|
|
BOOL m_bFilled;
|
|
BOOL m_bBorder;
|
|
BOOL m_bMultPtOpInProgress;
|
|
|
|
UINT m_nStrokeWidth;
|
|
UINT m_nStrokeShape;
|
|
|
|
UINT m_nCursorID;
|
|
UINT m_nCmdID;
|
|
CImgTool* m_pNextImgTool;
|
|
|
|
static CImgTool* c_pHeadImgTool;
|
|
static CImgTool* c_pCurrentImgTool;
|
|
static CImgTool* c_pPreviousImgTool;
|
|
static BOOL c_bDragging;
|
|
static int c_nHideCount;
|
|
};
|
|
|
|
|
|
class CRubberTool : public CImgTool
|
|
{
|
|
DECLARE_DYNAMIC(CRubberTool)
|
|
|
|
protected:
|
|
|
|
virtual void AdjustPointsForConstraint(MTI *pmti);
|
|
// virtual BOOL SetupMaskPenBrush(HDC hDC, BOOL bLeftButton, BOOL bSetup);
|
|
|
|
public:
|
|
|
|
CRubberTool();
|
|
|
|
virtual void OnPaintOptions( CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect );
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
virtual void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
|
|
virtual void Render(CDC* pDC, CRect& rect, BOOL bDraw, BOOL bCommit, BOOL bCtrlDown);
|
|
virtual void OnActivate ( BOOL bActivate );
|
|
|
|
static CRect rcPrev;
|
|
};
|
|
|
|
class CClosedFormTool : public CRubberTool
|
|
{
|
|
DECLARE_DYNAMIC(CClosedFormTool)
|
|
|
|
public:
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
};
|
|
|
|
|
|
class CRectTool : public CClosedFormTool
|
|
{
|
|
DECLARE_DYNAMIC(CRectTool)
|
|
|
|
public:
|
|
|
|
CRectTool();
|
|
};
|
|
|
|
class CRoundRectTool : public CClosedFormTool
|
|
{
|
|
DECLARE_DYNAMIC(CRoundRectTool)
|
|
|
|
public:
|
|
|
|
CRoundRectTool();
|
|
};
|
|
|
|
class CEllipseTool : public CClosedFormTool
|
|
{
|
|
DECLARE_DYNAMIC(CEllipseTool)
|
|
|
|
public:
|
|
|
|
CEllipseTool();
|
|
};
|
|
|
|
class CLineTool : public CRubberTool
|
|
{
|
|
DECLARE_DYNAMIC(CLineTool)
|
|
|
|
protected:
|
|
|
|
virtual void AdjustPointsForConstraint(MTI *pmti);
|
|
friend class CPolygonTool; // need to call AdjustPointsForContstraint from cPolygonTool
|
|
friend class CCurveTool; // need to call AdjustPointsForContstraint from cPolygonTool
|
|
|
|
public:
|
|
|
|
CLineTool();
|
|
|
|
virtual void Render(CDC* pDC, CRect& rect, BOOL bDraw, BOOL bCommit, BOOL bCtrlDown);
|
|
};
|
|
|
|
|
|
class CSelectTool : public CImgTool
|
|
{
|
|
DECLARE_DYNAMIC(CSelectTool)
|
|
|
|
protected:
|
|
|
|
friend class CFreehandSelectTool; // need to call OnClickOptions and OnPaintOptions
|
|
|
|
public:
|
|
|
|
CSelectTool();
|
|
|
|
virtual void OnActivate(BOOL bActivate);
|
|
|
|
virtual void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnCancel(CImgWnd* pImgWnd);
|
|
virtual void OnShowDragger(CImgWnd* pImgWnd, BOOL bShow);
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
virtual BOOL IsToolModal(void);
|
|
|
|
void InvertSelectRect(CImgWnd* pImgWnd);
|
|
|
|
UINT GetCursorID();
|
|
|
|
static CRect c_selectRect;
|
|
static CImageWell c_imageWell;
|
|
};
|
|
|
|
|
|
class CFreehandTool : public CImgTool
|
|
{
|
|
DECLARE_DYNAMIC(CFreehandTool)
|
|
|
|
public:
|
|
|
|
CFreehandTool();
|
|
|
|
void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
|
|
static CRect c_undoRect;
|
|
};
|
|
|
|
class CSketchTool : public CFreehandTool
|
|
{
|
|
DECLARE_DYNAMIC(CSketchTool)
|
|
|
|
public:
|
|
|
|
CSketchTool();
|
|
|
|
virtual void OnDrag ( CImgWnd* pImgWnd, MTI* pmti );
|
|
virtual void OnCancel( CImgWnd* pImgWnd );
|
|
};
|
|
|
|
|
|
class CBrushTool : public CFreehandTool
|
|
{
|
|
DECLARE_DYNAMIC(CBrushTool)
|
|
|
|
public:
|
|
|
|
CBrushTool();
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
virtual void OnDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnMove(CImgWnd* pImgWnd, MTI* pmti);
|
|
};
|
|
|
|
|
|
class CPencilTool : public CFreehandTool
|
|
{
|
|
DECLARE_DYNAMIC(CPencilTool)
|
|
protected:
|
|
virtual void AdjustPointsForConstraint(MTI *pmti);
|
|
|
|
public:
|
|
|
|
CPencilTool();
|
|
|
|
virtual void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
};
|
|
|
|
|
|
class CEraserTool : public CFreehandTool
|
|
{
|
|
DECLARE_DYNAMIC(CEraserTool)
|
|
|
|
public:
|
|
|
|
CEraserTool();
|
|
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnMove(CImgWnd* pImgWnd, MTI* pmti);
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
virtual void OnShowDragger(CImgWnd* pImgWnd, BOOL bShow);
|
|
virtual UINT GetCursorID();
|
|
};
|
|
|
|
|
|
class CAirBrushTool : public CFreehandTool
|
|
{
|
|
DECLARE_DYNAMIC(CAirBrushTool)
|
|
|
|
public:
|
|
|
|
CAirBrushTool();
|
|
|
|
virtual void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnTimer(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnCancel(CImgWnd* pImgWnd);
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
static CImageWell c_imageWell;
|
|
private:
|
|
|
|
BOOL m_bCtrlDown;
|
|
};
|
|
|
|
|
|
class CFloodTool : public CImgTool
|
|
{
|
|
DECLARE_DYNAMIC(CFloodTool)
|
|
|
|
public:
|
|
|
|
CFloodTool();
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
|
|
virtual void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
};
|
|
|
|
|
|
class CPickColorTool : public CImgTool
|
|
{
|
|
DECLARE_DYNAMIC(CPickColorTool)
|
|
|
|
public:
|
|
|
|
COLORREF m_Color;
|
|
|
|
CPickColorTool();
|
|
|
|
virtual void OnActivate(BOOL bActivate);
|
|
virtual void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnCancel(CImgWnd* pImgWnd);
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
};
|
|
|
|
|
|
class CZoomTool : public CImgTool
|
|
{
|
|
DECLARE_DYNAMIC(CZoomTool)
|
|
|
|
protected:
|
|
|
|
void InvertZoomRect();
|
|
|
|
static CRect c_zoomRect;
|
|
static CImgWnd* c_pImgWnd;
|
|
static CImageWell c_imageWell;
|
|
|
|
public:
|
|
|
|
CZoomTool();
|
|
|
|
virtual void OnLeave(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnMove(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnStartDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnEndDrag(CImgWnd* pImgWnd, MTI* pmti);
|
|
virtual void OnCancel(CImgWnd* pImgWnd);
|
|
virtual void OnShowDragger(CImgWnd* pImgWnd, BOOL bShow);
|
|
|
|
virtual void OnPaintOptions(CDC* pDC, const CRect& paintRect,
|
|
const CRect& optionsRect);
|
|
|
|
virtual void OnClickOptions(CImgToolWnd* pWnd, const CRect& optionsRect,
|
|
const CPoint& clickPoint);
|
|
};
|
|
|
|
#endif // __IMGTOOLS_H__
|
|
|