Reactos
1/*
2 * PROJECT: PAINT for ReactOS
3 * LICENSE: LGPL-2.0-or-later (https://spdx.org/licenses/LGPL-2.0-or-later)
4 * PURPOSE: Keep track of selection parameters, notify listeners
5 * COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
6 * Copyright 2019-2023 Katayama Hirofumi MZ <katayama.hirofumi.mz@gmail.com>
7 */
8
9#pragma once
10
11class SelectionModel
12{
13private:
14 HBITMAP m_hbmColor;
15 HBITMAP m_hbmMask;
16
17public:
18 COLORREF m_rgbBack;
19 BOOL m_bShow;
20 BOOL m_bContentChanged;
21 CRect m_rc; // in image pixel coordinates
22 POINT m_ptHit; // in image pixel coordinates
23 CRect m_rcOld; // in image pixel coordinates
24
25 SelectionModel();
26 ~SelectionModel();
27
28 void SetRectFromPoints(const POINT& ptFrom, const POINT& ptTo);
29 void setMask(const CRect& rc, HBITMAP hbmMask);
30
31 BOOL TakeOff();
32 void Landing();
33 BOOL IsLanded() const;
34 void HideSelection();
35 void DeleteSelection();
36 HITTEST hitTest(POINT ptCanvas);
37 void drawFrameOnCanvas(HDC hCanvasDC);
38 void moveSelection(INT xDelta, INT yDelta);
39
40 HBITMAP GetSelectionContents();
41 void DrawBackground(HDC hDCImage, COLORREF crBg);
42 void DrawBackgroundPoly(HDC hDCImage, COLORREF crBg);
43 void DrawBackgroundRect(HDC hDCImage, COLORREF crBg);
44
45 void DrawSelection(HDC hDCImage, COLORREF crBg, BOOL bBgTransparent, const CRect& rc, HBITMAP hbm);
46
47 void DrawSelection(HDC hDCImage, COLORREF crBg, BOOL bBgTransparent)
48 {
49 return DrawSelection(hDCImage, crBg, bBgTransparent, m_rc);
50 }
51
52 void DrawSelection(HDC hDCImage, COLORREF crBg, BOOL bBgTransparent, const CRect& rc)
53 {
54 return DrawSelection(hDCImage, crBg, bBgTransparent, rc, m_hbmColor);
55 }
56
57 void InsertFromHBITMAP(HBITMAP hbmColor, INT x = 0, INT y = 0, HBITMAP hbmMask = NULL);
58
59 // operation
60 void FlipHorizontally();
61 void FlipVertically();
62 void RotateNTimes90Degrees(int iN);
63 void StretchSkew(int nStretchPercentX, int nStretchPercentY, int nSkewDegX, int nSkewDegY);
64 void InvertSelection();
65
66 void Dragging(HITTEST hit, POINT pt);
67 void ClearMaskImage();
68 void ClearColorImage();
69 void NotifyContentChanged();
70
71 void StretchSelection(BOOL bShrink);
72
73private:
74 SelectionModel(const SelectionModel&);
75 SelectionModel& operator=(const SelectionModel&);
76
77 void ShiftPtStack(INT dx, INT dy);
78 void SwapWidthAndHeight();
79};