1 /*
2  * PROJECT:     PAINT for ReactOS
3  * LICENSE:     LGPL
4  * FILE:        base/applications/mspaint/selectionmodel.h
5  * PURPOSE:     Keep track of selection parameters, notify listeners
6  * PROGRAMMERS: Benedikt Freisen
7  *              Katayama Hirofumi MZ
8  */
9 
10 #pragma once
11 
12 class SelectionModel
13 {
14 private:
15     HBITMAP m_hbmColor;
16     HBITMAP m_hbmMask;
17     POINT *m_ptStack;
18     int m_iPtSP;
19 
20 public:
21     BOOL m_bShow;
22     CRect m_rc;    // in image pixel coordinates
23     POINT m_ptHit; // in image pixel coordinates
24 
25     SelectionModel();
26     ~SelectionModel();
27 
28     void ResetPtStack();
29     void PushToPtStack(POINT pt);
30     int PtStackSize() const;
31     void SetRectFromPoints(const POINT& ptFrom, const POINT& ptTo);
32     void BuildMaskFromPtStack();
33 
34     BOOL TakeOff();
35     void Landing();
36 
37     HBITMAP GetBitmap();
38     void GetSelectionContents(HDC hDCImage);
39     void DrawFramePoly(HDC hDCImage);
40     void DrawBackgroundPoly(HDC hDCImage, COLORREF crBg);
41     void DrawBackgroundRect(HDC hDCImage, COLORREF crBg);
42     void DrawSelection(HDC hDCImage, LPCRECT prc, COLORREF crBg = 0, BOOL bBgTransparent = FALSE);
43     void InsertFromHBITMAP(HBITMAP hBm, INT x = 0, INT y = 0);
44 
45     // operation
46     void FlipHorizontally();
47     void FlipVertically();
48     void RotateNTimes90Degrees(int iN);
49     void StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY);
50 
51     void CancelSelection();
52     void NotifyRefreshNeeded();
53     void Dragging(CANVAS_HITTEST hit, POINT pt);
54     void ClearMask();
55     void ClearColor();
56 
57 private:
58     SelectionModel(const SelectionModel&);
59     SelectionModel& operator=(const SelectionModel&);
60 
61     void ShiftPtStack(BOOL bPlus);
62 };
63