ReactOS
0.4.17-dev-470-gf9e3448
toolsmodel.h
Go to the documentation of this file.
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 tool parameters, notify listeners
5
* COPYRIGHT: Copyright 2015 Benedikt Freisen <b.freisen@gmx.net>
6
*/
7
8
#pragma once
9
10
enum
TOOLTYPE
11
{
12
TOOL_FREESEL
= 1,
13
TOOL_RECTSEL
= 2,
14
TOOL_RUBBER
= 3,
15
TOOL_FILL
= 4,
16
TOOL_COLOR
= 5,
17
TOOL_ZOOM
= 6,
18
TOOL_PEN
= 7,
19
TOOL_BRUSH
= 8,
20
TOOL_AIRBRUSH
= 9,
21
TOOL_TEXT
= 10,
22
TOOL_LINE
= 11,
23
TOOL_BEZIER
= 12,
24
TOOL_RECT
= 13,
25
TOOL_SHAPE
= 14,
26
TOOL_ELLIPSE
= 15,
27
TOOL_RRECT
= 16,
28
TOOL_MAX
=
TOOL_RRECT
,
29
};
30
31
enum
BrushStyle
:
int
32
{
33
BrushStyleRound
,
34
BrushStyleSquare
,
35
BrushStyleForeSlash
,
36
BrushStyleBackSlash
,
37
};
38
39
/* CLASSES **********************************************************/
40
41
struct
ToolBase
42
{
43
HDC
m_hdc
;
44
COLORREF
m_fg
,
m_bg
;
45
46
ToolBase
() :
m_hdc
(
NULL
) { }
47
virtual
~ToolBase
() { }
48
49
virtual
void
OnButtonDown
(
BOOL
bLeftButton,
LONG
x
,
LONG
y
,
BOOL
bDoubleClick) { }
50
virtual
BOOL
OnMouseMove
(
BOOL
bLeftButton,
LONG
&
x
,
LONG
&
y
) {
return
TRUE
; }
51
virtual
BOOL
OnButtonUp
(
BOOL
bLeftButton,
LONG
&
x
,
LONG
&
y
) {
return
TRUE
; }
52
53
virtual
void
OnDrawOverlayOnImage
(
HDC
hdc
) { }
54
virtual
void
OnDrawOverlayOnCanvas
(
HDC
hdc
) { }
55
56
virtual
void
OnSpecialTweak
(
BOOL
bMinus) { }
57
58
virtual
void
OnEndDraw
(
BOOL
bCancel);
59
60
void
beginEvent
();
61
void
endEvent
();
62
void
reset
();
63
64
static
ToolBase
*
createToolObject
(
TOOLTYPE
type
);
65
};
66
67
class
ToolsModel
68
{
69
private
:
70
class
VirtualBrush
71
{
72
protected
:
73
COLORREF
m_rgbColor
=
RGB
(0, 0, 0);
74
PAL_TYPE
m_palette
=
PAL_MODERN
;
75
HBRUSH
m_hBrush
=
NULL
;
76
77
public
:
78
~VirtualBrush
();
79
80
HBRUSH
GetBrush
(
PAL_TYPE
palette
,
COLORREF
rgbColor);
81
};
82
83
int
m_lineWidth
;
84
INT
m_penWidth
;
85
INT
m_brushWidth
;
86
int
m_shapeStyle
;
87
BrushStyle
m_brushStyle
;
88
TOOLTYPE
m_activeTool
;
89
TOOLTYPE
m_oldActiveTool
;
90
INT
m_airBrushRadius
;
91
int
m_rubberRadius
;
92
BOOL
m_transpBg
;
93
int
m_zoom
;
94
ToolBase
*
m_pToolObject
;
95
VirtualBrush
m_fgBrush
;
96
VirtualBrush
m_bgBrush
;
97
98
ToolBase
*
GetOrCreateTool
(
TOOLTYPE
nTool);
99
void
SendSetCursor
();
100
101
public
:
102
ToolsModel
();
103
~ToolsModel
();
104
105
BOOL
IsSelection
()
const
;
106
107
int
GetLineWidth
()
const
;
108
void
SetLineWidth
(
int
nLineWidth);
109
void
MakeLineThickerOrThinner
(
BOOL
bThinner);
110
111
INT
GetPenWidth
()
const
;
112
void
SetPenWidth
(
INT
nPenWidth);
113
void
MakePenThickerOrThinner
(
BOOL
bThinner);
114
115
int
GetShapeStyle
()
const
;
116
void
SetShapeStyle
(
int
nShapeStyle);
117
118
INT
GetBrushWidth
()
const
;
119
void
SetBrushWidth
(
INT
nBrushWidth);
120
void
MakeBrushThickerOrThinner
(
BOOL
bThinner);
121
122
BrushStyle
GetBrushStyle
()
const
;
123
void
SetBrushStyle
(
BrushStyle
nBrushStyle);
124
125
TOOLTYPE
GetActiveTool
()
const
;
126
TOOLTYPE
GetOldActiveTool
()
const
;
127
void
SetActiveTool
(
TOOLTYPE
nActiveTool);
128
129
INT
GetAirBrushRadius
()
const
;
130
void
SetAirBrushRadius
(
INT
nAirBrushRadius);
131
void
MakeAirBrushThickerOrThinner
(
BOOL
bThinner);
132
133
int
GetRubberRadius
()
const
;
134
void
SetRubberRadius
(
int
nRubberRadius);
135
void
MakeRubberThickerOrThinner
(
BOOL
bThinner);
136
137
SIZE
GetToolSize
()
const
;
138
139
BOOL
IsBackgroundTransparent
()
const
;
140
void
SetBackgroundTransparent
(
BOOL
bTransparent);
141
142
int
GetZoom
()
const
;
143
void
SetZoom
(
int
nZoom);
144
145
void
OnButtonDown
(
BOOL
bLeftButton,
LONG
x
,
LONG
y
,
BOOL
bDoubleClick);
146
void
OnMouseMove
(
BOOL
bLeftButton,
LONG
x
,
LONG
y
);
147
void
OnButtonUp
(
BOOL
bLeftButton,
LONG
x
,
LONG
y
);
148
void
OnEndDraw
(
BOOL
bCancel);
149
void
OnDrawOverlayOnImage
(
HDC
hdc
);
150
void
OnDrawOverlayOnCanvas
(
HDC
hdc
);
151
152
void
resetTool
();
153
void
selectAll
();
154
155
void
NotifyToolChanged
();
156
void
NotifyToolSettingsChanged
();
157
void
NotifyZoomChanged
();
158
159
void
SpecialTweak
(
BOOL
bMinus);
160
161
void
DrawWithMouseTool
(
POINT
pt
,
WPARAM
wParam
);
162
163
HBRUSH
GetFgBrush
();
164
HBRUSH
GetBgBrush
();
165
static
HBRUSH
CreateBrush
(
PAL_TYPE
palette
,
COLORREF
color
);
166
};
167
168
extern
ToolsModel
toolsModel
;
169
170
static
inline
int
Zoomed
(
int
xy)
171
{
172
return
MulDiv
(xy,
toolsModel
.
GetZoom
(),
DEFAULT_ZOOM
);
173
}
174
175
static
inline
int
UnZoomed
(
int
xy,
BOOL
bRound =
FALSE
)
176
{
177
if
(bRound)
178
return
MulDiv
(xy,
DEFAULT_ZOOM
,
toolsModel
.
GetZoom
());
179
return
xy *
DEFAULT_ZOOM
/
toolsModel
.
GetZoom
();
180
}
181
182
static
inline
void
Zoomed
(
POINT
&
pt
)
183
{
184
pt
= {
Zoomed
(
pt
.x),
Zoomed
(
pt
.y) };
185
}
186
187
static
inline
void
Zoomed
(
RECT
& rc)
188
{
189
rc = {
Zoomed
(rc.
left
),
Zoomed
(rc.
top
),
Zoomed
(rc.
right
),
Zoomed
(rc.
bottom
) };
190
}
191
192
static
inline
void
UnZoomed
(
POINT
&
pt
,
BOOL
bRound =
FALSE
)
193
{
194
pt
= {
UnZoomed
(
pt
.x, bRound),
UnZoomed
(
pt
.y, bRound) };
195
}
196
197
static
inline
void
UnZoomed
(
RECT
& rc,
BOOL
bRound =
FALSE
)
198
{
199
rc = {
UnZoomed
(rc.
left
, bRound),
UnZoomed
(rc.
top
, bRound),
200
UnZoomed
(rc.
right
, bRound),
UnZoomed
(rc.
bottom
, bRound) };
201
}
DEFAULT_ZOOM
#define DEFAULT_ZOOM
Definition:
precomp.h:46
ToolsModel::VirtualBrush
Definition:
toolsmodel.h:71
ToolsModel::VirtualBrush::m_rgbColor
COLORREF m_rgbColor
Definition:
toolsmodel.h:73
ToolsModel::VirtualBrush::GetBrush
HBRUSH GetBrush(PAL_TYPE palette, COLORREF rgbColor)
Definition:
toolsmodel.cpp:20
ToolsModel::VirtualBrush::m_palette
PAL_TYPE m_palette
Definition:
toolsmodel.h:74
ToolsModel::VirtualBrush::~VirtualBrush
~VirtualBrush()
Definition:
toolsmodel.cpp:14
ToolsModel::VirtualBrush::m_hBrush
HBRUSH m_hBrush
Definition:
toolsmodel.h:75
ToolsModel
Definition:
toolsmodel.h:68
ToolsModel::MakeAirBrushThickerOrThinner
void MakeAirBrushThickerOrThinner(BOOL bThinner)
Definition:
toolsmodel.cpp:131
ToolsModel::OnDrawOverlayOnCanvas
void OnDrawOverlayOnCanvas(HDC hdc)
Definition:
mouse.cpp:1195
ToolsModel::OnDrawOverlayOnImage
void OnDrawOverlayOnImage(HDC hdc)
Definition:
mouse.cpp:1190
ToolsModel::OnEndDraw
void OnEndDraw(BOOL bCancel)
Definition:
mouse.cpp:1182
ToolsModel::SetBrushStyle
void SetBrushStyle(BrushStyle nBrushStyle)
Definition:
toolsmodel.cpp:159
ToolsModel::GetFgBrush
HBRUSH GetFgBrush()
Definition:
toolsmodel.cpp:357
ToolsModel::MakeBrushThickerOrThinner
void MakeBrushThickerOrThinner(BOOL bThinner)
Definition:
toolsmodel.cpp:125
ToolsModel::GetZoom
int GetZoom() const
Definition:
toolsmodel.cpp:294
ToolsModel::m_oldActiveTool
TOOLTYPE m_oldActiveTool
Definition:
toolsmodel.h:89
ToolsModel::GetLineWidth
int GetLineWidth() const
Definition:
toolsmodel.cpp:70
ToolsModel::GetBgBrush
HBRUSH GetBgBrush()
Definition:
toolsmodel.cpp:362
ToolsModel::m_airBrushRadius
INT m_airBrushRadius
Definition:
toolsmodel.h:90
ToolsModel::m_brushWidth
INT m_brushWidth
Definition:
toolsmodel.h:85
ToolsModel::IsSelection
BOOL IsSelection() const
Definition:
toolsmodel.cpp:65
ToolsModel::GetShapeStyle
int GetShapeStyle() const
Definition:
toolsmodel.cpp:143
ToolsModel::SendSetCursor
void SendSetCursor()
Definition:
toolsmodel.cpp:99
ToolsModel::m_rubberRadius
int m_rubberRadius
Definition:
toolsmodel.h:91
ToolsModel::m_lineWidth
int m_lineWidth
Definition:
toolsmodel.h:83
ToolsModel::SetAirBrushRadius
void SetAirBrushRadius(INT nAirBrushRadius)
Definition:
toolsmodel.cpp:220
ToolsModel::resetTool
void resetTool()
Definition:
toolsmodel.cpp:336
ToolsModel::m_transpBg
BOOL m_transpBg
Definition:
toolsmodel.h:92
ToolsModel::m_shapeStyle
int m_shapeStyle
Definition:
toolsmodel.h:86
ToolsModel::GetOldActiveTool
TOOLTYPE GetOldActiveTool() const
Definition:
toolsmodel.cpp:171
ToolsModel::SetShapeStyle
void SetShapeStyle(int nShapeStyle)
Definition:
toolsmodel.cpp:148
ToolsModel::SetActiveTool
void SetActiveTool(TOOLTYPE nActiveTool)
Definition:
toolsmodel.cpp:176
ToolsModel::DrawWithMouseTool
void DrawWithMouseTool(POINT pt, WPARAM wParam)
Definition:
mouse.cpp:1205
ToolsModel::SetRubberRadius
void SetRubberRadius(int nRubberRadius)
Definition:
toolsmodel.cpp:231
ToolsModel::NotifyToolChanged
void NotifyToolChanged()
Definition:
toolsmodel.cpp:306
ToolsModel::OnMouseMove
void OnMouseMove(BOOL bLeftButton, LONG x, LONG y)
Definition:
mouse.cpp:1164
ToolsModel::m_brushStyle
BrushStyle m_brushStyle
Definition:
toolsmodel.h:87
ToolsModel::GetPenWidth
INT GetPenWidth() const
Definition:
toolsmodel.cpp:82
ToolsModel::m_zoom
int m_zoom
Definition:
toolsmodel.h:93
ToolsModel::GetBrushStyle
BrushStyle GetBrushStyle() const
Definition:
toolsmodel.cpp:154
ToolsModel::OnButtonDown
void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick)
Definition:
mouse.cpp:1156
ToolsModel::MakeRubberThickerOrThinner
void MakeRubberThickerOrThinner(BOOL bThinner)
Definition:
toolsmodel.cpp:137
ToolsModel::IsBackgroundTransparent
BOOL IsBackgroundTransparent() const
Definition:
toolsmodel.cpp:282
ToolsModel::SetZoom
void SetZoom(int nZoom)
Definition:
toolsmodel.cpp:299
ToolsModel::SetBackgroundTransparent
void SetBackgroundTransparent(BOOL bTransparent)
Definition:
toolsmodel.cpp:287
ToolsModel::m_activeTool
TOOLTYPE m_activeTool
Definition:
toolsmodel.h:88
ToolsModel::m_bgBrush
VirtualBrush m_bgBrush
Definition:
toolsmodel.h:96
ToolsModel::GetRubberRadius
int GetRubberRadius() const
Definition:
toolsmodel.cpp:226
ToolsModel::m_pToolObject
ToolBase * m_pToolObject
Definition:
toolsmodel.h:94
ToolsModel::NotifyToolSettingsChanged
void NotifyToolSettingsChanged()
Definition:
toolsmodel.cpp:318
ToolsModel::m_fgBrush
VirtualBrush m_fgBrush
Definition:
toolsmodel.h:95
ToolsModel::GetOrCreateTool
ToolBase * GetOrCreateTool(TOOLTYPE nTool)
Definition:
toolsmodel.cpp:58
ToolsModel::ToolsModel
ToolsModel()
Definition:
toolsmodel.cpp:38
ToolsModel::MakeLineThickerOrThinner
void MakeLineThickerOrThinner(BOOL bThinner)
Definition:
toolsmodel.cpp:113
ToolsModel::GetActiveTool
TOOLTYPE GetActiveTool() const
Definition:
toolsmodel.cpp:166
ToolsModel::MakePenThickerOrThinner
void MakePenThickerOrThinner(BOOL bThinner)
Definition:
toolsmodel.cpp:119
ToolsModel::CreateBrush
static HBRUSH CreateBrush(PAL_TYPE palette, COLORREF color)
Definition:
toolsmodel.cpp:349
ToolsModel::~ToolsModel
~ToolsModel()
Definition:
toolsmodel.cpp:52
ToolsModel::SpecialTweak
void SpecialTweak(BOOL bMinus)
Definition:
mouse.cpp:1200
ToolsModel::selectAll
void selectAll()
Definition:
toolsmodel.cpp:341
ToolsModel::NotifyZoomChanged
void NotifyZoomChanged()
Definition:
toolsmodel.cpp:326
ToolsModel::SetPenWidth
void SetPenWidth(INT nPenWidth)
Definition:
toolsmodel.cpp:87
ToolsModel::SetBrushWidth
void SetBrushWidth(INT nBrushWidth)
Definition:
toolsmodel.cpp:105
ToolsModel::GetAirBrushRadius
INT GetAirBrushRadius() const
Definition:
toolsmodel.cpp:215
ToolsModel::OnButtonUp
void OnButtonUp(BOOL bLeftButton, LONG x, LONG y)
Definition:
mouse.cpp:1173
ToolsModel::SetLineWidth
void SetLineWidth(int nLineWidth)
Definition:
toolsmodel.cpp:75
ToolsModel::GetBrushWidth
INT GetBrushWidth() const
Definition:
toolsmodel.cpp:94
ToolsModel::GetToolSize
SIZE GetToolSize() const
Definition:
toolsmodel.cpp:238
ToolsModel::m_penWidth
INT m_penWidth
Definition:
toolsmodel.h:84
wParam
WPARAM wParam
Definition:
combotst.c:138
NULL
#define NULL
Definition:
types.h:112
TRUE
#define TRUE
Definition:
types.h:120
FALSE
#define FALSE
Definition:
types.h:117
pt
#define pt(x, y)
Definition:
drawing.c:79
RGB
#define RGB(r, g, b)
Definition:
precomp.h:67
BOOL
unsigned int BOOL
Definition:
ntddk_ex.h:94
x
GLint GLint GLint GLint GLint x
Definition:
gl.h:1548
type
GLuint GLuint GLsizei GLenum type
Definition:
gl.h:1545
y
GLint GLint GLint GLint GLint GLint y
Definition:
gl.h:1548
color
GLuint color
Definition:
glext.h:6243
WPARAM
UINT_PTR WPARAM
Definition:
minwindef.h:174
hdc
HDC hdc
Definition:
main.c:9
HDC
static HDC
Definition:
imagelist.c:88
palette
static HPALETTE palette
Definition:
clipboard.c:1457
MulDiv
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition:
muldiv.c:25
PAL_TYPE
PAL_TYPE
Definition:
palettemodel.h:13
PAL_MODERN
@ PAL_MODERN
Definition:
palettemodel.h:14
LONG
long LONG
Definition:
pedump.c:60
ToolBase
Definition:
toolsmodel.h:42
ToolBase::endEvent
void endEvent()
Definition:
mouse.cpp:138
ToolBase::OnMouseMove
virtual BOOL OnMouseMove(BOOL bLeftButton, LONG &x, LONG &y)
Definition:
toolsmodel.h:50
ToolBase::OnButtonDown
virtual void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick)
Definition:
toolsmodel.h:49
ToolBase::m_hdc
HDC m_hdc
Definition:
toolsmodel.h:43
ToolBase::OnEndDraw
virtual void OnEndDraw(BOOL bCancel)
Definition:
mouse.cpp:125
ToolBase::OnSpecialTweak
virtual void OnSpecialTweak(BOOL bMinus)
Definition:
toolsmodel.h:56
ToolBase::reset
void reset()
Definition:
mouse.cpp:106
ToolBase::createToolObject
static ToolBase * createToolObject(TOOLTYPE type)
Definition:
mouse.cpp:1131
ToolBase::m_fg
COLORREF m_fg
Definition:
toolsmodel.h:44
ToolBase::OnDrawOverlayOnImage
virtual void OnDrawOverlayOnImage(HDC hdc)
Definition:
toolsmodel.h:53
ToolBase::beginEvent
void beginEvent()
Definition:
mouse.cpp:131
ToolBase::ToolBase
ToolBase()
Definition:
toolsmodel.h:46
ToolBase::OnDrawOverlayOnCanvas
virtual void OnDrawOverlayOnCanvas(HDC hdc)
Definition:
toolsmodel.h:54
ToolBase::OnButtonUp
virtual BOOL OnButtonUp(BOOL bLeftButton, LONG &x, LONG &y)
Definition:
toolsmodel.h:51
ToolBase::~ToolBase
virtual ~ToolBase()
Definition:
toolsmodel.h:47
ToolBase::m_bg
COLORREF m_bg
Definition:
toolsmodel.h:44
_SIZE
Definition:
kdterminal.h:26
tagPOINT
Definition:
polytest.cpp:47
tagRECT
Definition:
windef.h:105
tagRECT::right
LONG right
Definition:
windef.h:108
tagRECT::bottom
LONG bottom
Definition:
windef.h:109
tagRECT::top
LONG top
Definition:
windef.h:107
tagRECT::left
LONG left
Definition:
windef.h:106
toolsModel
ToolsModel toolsModel
Definition:
toolsmodel.cpp:10
UnZoomed
static int UnZoomed(int xy, BOOL bRound=FALSE)
Definition:
toolsmodel.h:175
TOOLTYPE
TOOLTYPE
Definition:
toolsmodel.h:11
TOOL_AIRBRUSH
@ TOOL_AIRBRUSH
Definition:
toolsmodel.h:20
TOOL_COLOR
@ TOOL_COLOR
Definition:
toolsmodel.h:16
TOOL_SHAPE
@ TOOL_SHAPE
Definition:
toolsmodel.h:25
TOOL_RUBBER
@ TOOL_RUBBER
Definition:
toolsmodel.h:14
TOOL_MAX
@ TOOL_MAX
Definition:
toolsmodel.h:28
TOOL_BRUSH
@ TOOL_BRUSH
Definition:
toolsmodel.h:19
TOOL_RECT
@ TOOL_RECT
Definition:
toolsmodel.h:24
TOOL_BEZIER
@ TOOL_BEZIER
Definition:
toolsmodel.h:23
TOOL_FILL
@ TOOL_FILL
Definition:
toolsmodel.h:15
TOOL_TEXT
@ TOOL_TEXT
Definition:
toolsmodel.h:21
TOOL_PEN
@ TOOL_PEN
Definition:
toolsmodel.h:18
TOOL_LINE
@ TOOL_LINE
Definition:
toolsmodel.h:22
TOOL_FREESEL
@ TOOL_FREESEL
Definition:
toolsmodel.h:12
TOOL_ZOOM
@ TOOL_ZOOM
Definition:
toolsmodel.h:17
TOOL_ELLIPSE
@ TOOL_ELLIPSE
Definition:
toolsmodel.h:26
TOOL_RRECT
@ TOOL_RRECT
Definition:
toolsmodel.h:27
TOOL_RECTSEL
@ TOOL_RECTSEL
Definition:
toolsmodel.h:13
Zoomed
static int Zoomed(int xy)
Definition:
toolsmodel.h:170
BrushStyle
BrushStyle
Definition:
toolsmodel.h:32
BrushStyleForeSlash
@ BrushStyleForeSlash
Definition:
toolsmodel.h:35
BrushStyleRound
@ BrushStyleRound
Definition:
toolsmodel.h:33
BrushStyleBackSlash
@ BrushStyleBackSlash
Definition:
toolsmodel.h:36
BrushStyleSquare
@ BrushStyleSquare
Definition:
toolsmodel.h:34
INT
int32_t INT
Definition:
typedefs.h:58
COLORREF
DWORD COLORREF
Definition:
windef.h:100
base
applications
mspaint
toolsmodel.h
Generated on Sun Jul 12 2026 06:02:45 for ReactOS by
1.9.6