xref: /reactos/base/applications/mspaint/canvas.h (revision a8755711)
1 /*
2  * PROJECT:    PAINT for ReactOS
3  * LICENSE:    LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4  * PURPOSE:    Providing the canvas window class
5  * COPYRIGHT:  Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
6  */
7 
8 #pragma once
9 
10 class CCanvasWindow : public CWindowImpl<CCanvasWindow>
11 {
12 public:
13     DECLARE_WND_CLASS_EX(_T("ReactOSPaintCanvas"), CS_DBLCLKS | CS_HREDRAW | CS_VREDRAW,
14                          COLOR_APPWORKSPACE)
15 
16     BEGIN_MSG_MAP(CCanvasWindow)
17         MESSAGE_HANDLER(WM_SIZE, OnSize)
18         MESSAGE_HANDLER(WM_PAINT, OnPaint)
19         MESSAGE_HANDLER(WM_MOUSEMOVE, OnMouseMove)
20         MESSAGE_HANDLER(WM_HSCROLL, OnHScroll)
21         MESSAGE_HANDLER(WM_VSCROLL, OnVScroll)
22         MESSAGE_HANDLER(WM_ERASEBKGND, OnEraseBkgnd)
23         MESSAGE_HANDLER(WM_LBUTTONDOWN, OnLButtonDown)
24         MESSAGE_HANDLER(WM_RBUTTONDOWN, OnRButtonDown)
25         MESSAGE_HANDLER(WM_LBUTTONDBLCLK, OnLButtonDblClk)
26         MESSAGE_HANDLER(WM_RBUTTONDBLCLK, OnRButtonDblClk)
27         MESSAGE_HANDLER(WM_KEYDOWN, OnKeyDown)
28         MESSAGE_HANDLER(WM_LBUTTONUP, OnLButtonUp)
29         MESSAGE_HANDLER(WM_RBUTTONUP, OnRButtonUp)
30         MESSAGE_HANDLER(WM_SETCURSOR, OnSetCursor)
31         MESSAGE_HANDLER(WM_MOUSEWHEEL, OnMouseWheel)
32         MESSAGE_HANDLER(WM_CANCELMODE, OnCancelMode)
33         MESSAGE_HANDLER(WM_CAPTURECHANGED, OnCaptureChanged)
34         MESSAGE_HANDLER(WM_CTLCOLOREDIT, OnCtlColorEdit)
35         MESSAGE_HANDLER(WM_PALETTEMODELCOLORCHANGED, OnPaletteModelColorChanged)
36     END_MSG_MAP()
37 
38     CCanvasWindow();
39     virtual ~CCanvasWindow();
40 
41     BOOL m_drawing;
42 
43     VOID cancelDrawing();
44     VOID finishDrawing();
45     VOID updateScrollInfo();
46 
47     VOID ImageToCanvas(POINT& pt);
48     VOID ImageToCanvas(RECT& rc);
49     VOID CanvasToImage(POINT& pt, BOOL bZoomed = FALSE);
50     VOID CanvasToImage(RECT& rc, BOOL bZoomed = FALSE);
51     VOID GetImageRect(RECT& rc);
52     VOID MoveSelection(INT xDelta, INT yDelta);
53 
54 protected:
55     HITTEST m_hitSelection;
56     HITTEST m_hitCanvasSizeBox;
57     POINT m_ptOrig; // The origin of drag start
58     HBITMAP m_ahbmCached[2]; // The cached buffer bitmaps
59     CRect m_rcResizing; // Resizing rectagle
60 
61     HITTEST CanvasHitTest(POINT pt);
62     RECT GetBaseRect();
63     VOID DoDraw(HDC hDC, RECT& rcClient, RECT& rcPaint);
64     VOID OnHVScroll(WPARAM wParam, INT fnBar);
65     VOID drawZoomFrame(INT mouseX, INT mouseY);
66 
67     HITTEST SelectionHitTest(POINT ptImage);
68     VOID StartSelectionDrag(HITTEST hit, POINT ptImage);
69     VOID SelectionDragging(POINT ptImage);
70     VOID EndSelectionDrag(POINT ptImage);
71 
72     LRESULT OnSize(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
73     LRESULT OnHScroll(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
74     LRESULT OnVScroll(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
75     LRESULT OnEraseBkgnd(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
76     LRESULT OnPaint(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
77     LRESULT OnLButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
78     LRESULT OnRButtonDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
79     LRESULT OnLButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
80     LRESULT OnRButtonDblClk(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
81     LRESULT OnMouseMove(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
82     LRESULT OnKeyDown(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
83     LRESULT OnLButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
84     LRESULT OnRButtonUp(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
85     LRESULT OnSetCursor(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
86     LRESULT OnMouseWheel(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
87     LRESULT OnCancelMode(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
88     LRESULT OnCaptureChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
89     LRESULT OnCtlColorEdit(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
90     LRESULT OnPaletteModelColorChanged(UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
91 
92     LRESULT OnLRButtonDown(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
93     LRESULT OnLRButtonDblClk(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
94     LRESULT OnLRButtonUp(BOOL bLeftButton, UINT nMsg, WPARAM wParam, LPARAM lParam, BOOL& bHandled);
95 };
96