265 lines
8 KiB
C++
265 lines
8 KiB
C++
#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__
|