|
|
#ifndef __IMGWND_H__
#define __IMGWND_H__
#include "tracker.h"
// #define GRIDOPTIONS
class CBitmapObj;
// helper fns
BOOL IsUserEditingText(); BOOL TextToolProcessed( UINT nMessage );
// Mouse Tracking Information
typedef struct _mti { CPoint ptDown; CPoint ptPrev; CPoint pt; BOOL fLeft; BOOL fRight; BOOL fCtrlDown; } MTI;
class CImgWnd; class CThumbNailView;
// Image
struct IMG { class CImgWnd* m_pFirstImgWnd;
CBitmapObj* m_pBitmapObj;
BOOL bDirty;
HDC hDC; HDC hMaskDC; // May be NULL (for normal bitmaps)
// These are usually selected into hDC and hMaskDC respecively
HBITMAP hBitmap; HBITMAP hBitmapOld; HBITMAP hMaskBitmap; HBITMAP hMaskBitmapOld;
CPalette* m_pPalette; HPALETTE m_hPalOld;
int cxWidth; int cyHeight; int cPlanes; int cBitCount; int cXPelsPerMeter; int cYPelsPerMeter; int nResType; int m_nLastChanged;
BOOL m_bTileGrid; int m_cxTile; int m_cyTile; };
// Image Editor Window
class CImgWnd : public CWnd { protected:
static CImgWnd* c_pImgWndCur; static CDragger* c_pResizeDragger; static CTracker::STATE c_dragState;
DECLARE_DYNAMIC( CImgWnd )
public:
CImgWnd( IMG* pImg ); CImgWnd( CImgWnd *pImgWnd ); ~CImgWnd();
BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID = 0 );
BOOL OnCmdMsg( UINT nID, int nCode, void* pExtra, AFX_CMDHANDLERINFO* pHandlerInfo );
void ClientToImage(CPoint& point ); void ClientToImage(CRect& rect ); void ImageToClient(CPoint& point ); void ImageToClient(CRect& rect );
IMG* m_pImg;
inline IMG* GetImg() { return m_pImg; } void SetImg( IMG* pImg ); inline CSize GetScrollPos() { return CSize( m_xScroll, m_yScroll ); } void SetScroll( int xScroll, int yScroll ); void ShowBrush( CPoint ptHandle ); void PrepareForBrushChange( BOOL bPickup = TRUE, BOOL bErase = TRUE ); inline int GetZoom() { return m_nZoom; } inline int GetPrevZoom() const { return m_nZoomPrev; } void SetZoom( int nZoom ); BOOL MakeBrush( HDC hSourceDC, CRect rcSource ); void UpdPos(const CPoint& pt) { m_ptDispPos = pt; } inline BOOL IsGridVisible() { return theApp.m_bShowGrid && m_nZoom > 3; } void FinishUndo( const CRect& rect ); void RubberBandRect( HDC hDC, MTI* pmti, BOOL bErase ); void EraseTracker(); void CheckScrollBars(); void GetImageRect( CRect& rect ); CPalette* SetImgPalette( CDC* pdc, BOOL bForce = FALSE ); HPALETTE SetImgPalette( HDC hdc, BOOL bForce = FALSE ); CPalette* FixupDibPalette( LPSTR lpDib, CPalette* ppalDib ); BOOL IsSelectionAvailable( void ); BOOL IsPasteAvailable( void ); CRect GetDrawingRect( void );
static void SetToolCursor(); static inline CImgWnd* GetCurrent() { return c_pImgWndCur; } BOOL PtInTracker(CPoint cptLocation);
protected:
void RubberMouse (unsigned code, MTI* pmti); void OnRButtonDownInSel (CPoint *pcPointDown); void ZoomedInDP ( unsigned code, unsigned mouseKeys, CPoint newPt ); void StartSelectionDrag ( unsigned code, CPoint newPt ); void CancelSelectionDrag (); void SelectionDragHandler( unsigned code, CPoint newPt ); void ResizeMouseHandler ( unsigned code, CPoint newPt ); void EndResizeOperation (); void MoveBrush ( const CRect& newSelRect ); void OnScroll ( BOOL bVert, UINT nSBCode, UINT nPos ); BOOL OnMouseDown ( UINT nFlags ); BOOL OnMouseMessage ( UINT nFlags ); void CancelPainting ();
afx_msg int OnCreate ( LPCREATESTRUCT lpCreateStruct ); #if 0
afx_msg void OnDestroy (); #endif
afx_msg void OnSetFocus ( CWnd* pOldWnd ); afx_msg void OnKillFocus ( CWnd* pNewWnd ); afx_msg void OnSize ( UINT nType, int cx, int cy ); afx_msg void OnLButtonDown ( UINT nFlags, CPoint point ); afx_msg void OnLButtonDblClk( UINT nFlags, CPoint point ); afx_msg void OnLButtonUp ( UINT nFlags, CPoint point ); afx_msg void OnRButtonDown ( UINT nFlags, CPoint point ); afx_msg void OnRButtonDblClk( UINT nFlags, CPoint point ); afx_msg void OnRButtonUp ( UINT nFlags, CPoint point ); afx_msg void OnKeyDown ( UINT nChar, UINT nRepCnt, UINT nFlags ); afx_msg void OnKeyUp ( UINT nChar, UINT nRepCnt, UINT nFlags ); afx_msg void OnMouseMove ( UINT nFlags, CPoint point ); afx_msg void OnTimer ( UINT nIDEvent ); afx_msg void OnVScroll ( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar ); afx_msg void OnHScroll ( UINT nSBCode, UINT nPos, CScrollBar* pScrollBar ); afx_msg void OnPaint (); afx_msg void OnCancelMode (); afx_msg void OnWindowPosChanging( WINDOWPOS FAR* lpwndpos ); afx_msg void OnDestroyClipboard(); afx_msg void OnPaletteChanged(CWnd *); afx_msg BOOL OnSetCursor (CWnd *pWnd, UINT nHitTest, UINT message); afx_msg BOOL OnMouseWheel (UINT nFlags, short zDelta, CPoint pt); void CmdSmallBrush(); void CmdSmallerBrush(); void CmdLargerBrush(); void CmdClearImage(); void CmdShowGrid(); #ifdef GRIDOPTIONS
void CmdGridOptions(); void CmdShowTileGrid(); #endif // GRIDOPTIONS
void CmdInvMode(); void CmdTransMode();
void CmdCopy(); void CmdCut(); void CmdPaste(); void CmdClear();
void CmdInvertColors(); void CmdTglOpaque(); void CmdFlipBshH(); void CmdFlipBshV(); void CmdRot90(); void CmdSkewBrush( int wAngle, BOOL bHorz ); void CmdDoubleBsh(); void CmdHalfBsh(); void CmdSel2Bsh();
void CmdExport();
void CmdCancel(); void CmdOK();
void GetDrawRects(const CRect* pPaintRect, const CRect* pReqDestRect, CRect& srcRect, CRect& destRect);
void DrawGrid(CDC* pDC, const CRect& srcRect, CRect& destRect); void DrawBackground(CDC* pDC, const CRect* pPaintRect = NULL); void DrawTracker(CDC* pDC = NULL, const CRect* pPaintRect = NULL); void DrawImage(CDC* pDC, const CRect* pPaintRect, CRect* pDestRect = NULL, BOOL bDoGrid = TRUE); void SetThumbnailView( CThumbNailView* pwndNewThumbnailView ) { m_pwndThumbNailView = pwndNewThumbnailView; }
BOOL PasteImageClip(); BOOL PasteImageFile( LPSTR lpDib ); HBITMAP CopyDC( CDC* pImgDC, CRect* prcClip ); void CopyBMAndPal(HBITMAP *pBM, CPalette ** ppPal);
CImgWnd* m_pNextImgWnd; // next viewer link
int m_nZoom; int m_nZoomPrev;
int m_xScroll; int m_yScroll; int m_LineX; // this is 1/32 of the bitmap height
int m_LineY; // this is 1/32 of the bitmap width
CPoint m_ptDispPos;
WORD m_wClipboardFormat;
HGLOBAL m_hPoints;
CThumbNailView* m_pwndThumbNailView;
DECLARE_MESSAGE_MAP()
friend class CPBFrame; friend class CPBView; friend class CBitmapObj; friend class CSelectTool; friend class CTextTool; friend class CCurveTool; friend class CTedit; friend class CAttrEdit; friend class CImgToolWnd; // for key message forwarding
friend class CImgColorsWnd; friend class CCursorIconToolWnd; friend BOOL SetImgSize(IMG*, CSize, BOOL); friend void SetDrawColor(COLORREF); friend void SetEraseColor(COLORREF); friend void SetTransColor(COLORREF); friend void FreeImg(IMG* pImg); friend void AddImgWnd(IMG*, CImgWnd*); friend void InvalImgRect(IMG* pImg, CRect* prc); friend void CommitSelection(BOOL);
private: short m_WheelDelta; };
BOOL FillBitmapObj(CImgWnd* pImgWnd, CBitmapObj* pResObject, IMG* pImgStruct, int iColor = -1);
extern CImgWnd* g_pMouseImgWnd; extern CImgWnd* g_pDragBrushWnd;
extern CRect rcDragBrush;
#endif // __IMGWND_H__
|