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
11{
29};
30
31enum BrushStyle : int
32{
37};
38
39/* CLASSES **********************************************************/
40
42{
45
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
65};
66
68{
69private:
71 {
72 protected:
75 HBRUSH m_hBrush = NULL;
76
77 public:
79
80 HBRUSH GetBrush(PAL_TYPE palette, COLORREF rgbColor);
81 };
82
93 int m_zoom;
97
99 void SendSetCursor();
100
101public:
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
123 void SetBrushStyle(BrushStyle nBrushStyle);
124
125 TOOLTYPE GetActiveTool() 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
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);
151
152 void resetTool();
153 void selectAll();
154
155 void NotifyToolChanged();
157 void NotifyZoomChanged();
158
159 void SpecialTweak(BOOL bMinus);
160
162
163 HBRUSH GetFgBrush();
164 HBRUSH GetBgBrush();
165 static HBRUSH CreateBrush(PAL_TYPE palette, COLORREF color);
166};
167
169
170static inline int Zoomed(int xy)
171{
172 return MulDiv(xy, toolsModel.GetZoom(), DEFAULT_ZOOM);
173}
174
175static 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
182static inline void Zoomed(POINT& pt)
183{
184 pt = { Zoomed(pt.x), Zoomed(pt.y) };
185}
186
187static inline void Zoomed(RECT& rc)
188{
189 rc = { Zoomed(rc.left), Zoomed(rc.top), Zoomed(rc.right), Zoomed(rc.bottom) };
190}
191
192static inline void UnZoomed(POINT& pt, BOOL bRound = FALSE)
193{
194 pt = { UnZoomed(pt.x, bRound), UnZoomed(pt.y, bRound) };
195}
196
197static 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}
#define DEFAULT_ZOOM
Definition: precomp.h:46
HBRUSH GetBrush(PAL_TYPE palette, COLORREF rgbColor)
Definition: toolsmodel.cpp:20
void MakeAirBrushThickerOrThinner(BOOL bThinner)
Definition: toolsmodel.cpp:131
void OnDrawOverlayOnCanvas(HDC hdc)
Definition: mouse.cpp:1195
void OnDrawOverlayOnImage(HDC hdc)
Definition: mouse.cpp:1190
void OnEndDraw(BOOL bCancel)
Definition: mouse.cpp:1182
void SetBrushStyle(BrushStyle nBrushStyle)
Definition: toolsmodel.cpp:159
HBRUSH GetFgBrush()
Definition: toolsmodel.cpp:357
void MakeBrushThickerOrThinner(BOOL bThinner)
Definition: toolsmodel.cpp:125
int GetZoom() const
Definition: toolsmodel.cpp:294
TOOLTYPE m_oldActiveTool
Definition: toolsmodel.h:89
int GetLineWidth() const
Definition: toolsmodel.cpp:70
HBRUSH GetBgBrush()
Definition: toolsmodel.cpp:362
INT m_airBrushRadius
Definition: toolsmodel.h:90
INT m_brushWidth
Definition: toolsmodel.h:85
BOOL IsSelection() const
Definition: toolsmodel.cpp:65
int GetShapeStyle() const
Definition: toolsmodel.cpp:143
void SendSetCursor()
Definition: toolsmodel.cpp:99
int m_rubberRadius
Definition: toolsmodel.h:91
int m_lineWidth
Definition: toolsmodel.h:83
void SetAirBrushRadius(INT nAirBrushRadius)
Definition: toolsmodel.cpp:220
void resetTool()
Definition: toolsmodel.cpp:336
BOOL m_transpBg
Definition: toolsmodel.h:92
int m_shapeStyle
Definition: toolsmodel.h:86
TOOLTYPE GetOldActiveTool() const
Definition: toolsmodel.cpp:171
void SetShapeStyle(int nShapeStyle)
Definition: toolsmodel.cpp:148
void SetActiveTool(TOOLTYPE nActiveTool)
Definition: toolsmodel.cpp:176
void DrawWithMouseTool(POINT pt, WPARAM wParam)
Definition: mouse.cpp:1205
void SetRubberRadius(int nRubberRadius)
Definition: toolsmodel.cpp:231
void NotifyToolChanged()
Definition: toolsmodel.cpp:306
void OnMouseMove(BOOL bLeftButton, LONG x, LONG y)
Definition: mouse.cpp:1164
BrushStyle m_brushStyle
Definition: toolsmodel.h:87
INT GetPenWidth() const
Definition: toolsmodel.cpp:82
int m_zoom
Definition: toolsmodel.h:93
BrushStyle GetBrushStyle() const
Definition: toolsmodel.cpp:154
void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick)
Definition: mouse.cpp:1156
void MakeRubberThickerOrThinner(BOOL bThinner)
Definition: toolsmodel.cpp:137
BOOL IsBackgroundTransparent() const
Definition: toolsmodel.cpp:282
void SetZoom(int nZoom)
Definition: toolsmodel.cpp:299
void SetBackgroundTransparent(BOOL bTransparent)
Definition: toolsmodel.cpp:287
TOOLTYPE m_activeTool
Definition: toolsmodel.h:88
VirtualBrush m_bgBrush
Definition: toolsmodel.h:96
int GetRubberRadius() const
Definition: toolsmodel.cpp:226
ToolBase * m_pToolObject
Definition: toolsmodel.h:94
void NotifyToolSettingsChanged()
Definition: toolsmodel.cpp:318
VirtualBrush m_fgBrush
Definition: toolsmodel.h:95
ToolBase * GetOrCreateTool(TOOLTYPE nTool)
Definition: toolsmodel.cpp:58
void MakeLineThickerOrThinner(BOOL bThinner)
Definition: toolsmodel.cpp:113
TOOLTYPE GetActiveTool() const
Definition: toolsmodel.cpp:166
void MakePenThickerOrThinner(BOOL bThinner)
Definition: toolsmodel.cpp:119
static HBRUSH CreateBrush(PAL_TYPE palette, COLORREF color)
Definition: toolsmodel.cpp:349
void SpecialTweak(BOOL bMinus)
Definition: mouse.cpp:1200
void selectAll()
Definition: toolsmodel.cpp:341
void NotifyZoomChanged()
Definition: toolsmodel.cpp:326
void SetPenWidth(INT nPenWidth)
Definition: toolsmodel.cpp:87
void SetBrushWidth(INT nBrushWidth)
Definition: toolsmodel.cpp:105
INT GetAirBrushRadius() const
Definition: toolsmodel.cpp:215
void OnButtonUp(BOOL bLeftButton, LONG x, LONG y)
Definition: mouse.cpp:1173
void SetLineWidth(int nLineWidth)
Definition: toolsmodel.cpp:75
INT GetBrushWidth() const
Definition: toolsmodel.cpp:94
SIZE GetToolSize() const
Definition: toolsmodel.cpp:238
INT m_penWidth
Definition: toolsmodel.h:84
WPARAM wParam
Definition: combotst.c:138
#define NULL
Definition: types.h:112
#define TRUE
Definition: types.h:120
#define FALSE
Definition: types.h:117
#define pt(x, y)
Definition: drawing.c:79
#define RGB(r, g, b)
Definition: precomp.h:67
unsigned int BOOL
Definition: ntddk_ex.h:94
GLint GLint GLint GLint GLint x
Definition: gl.h:1548
GLuint GLuint GLsizei GLenum type
Definition: gl.h:1545
GLint GLint GLint GLint GLint GLint y
Definition: gl.h:1548
GLuint color
Definition: glext.h:6243
UINT_PTR WPARAM
Definition: minwindef.h:174
HDC hdc
Definition: main.c:9
static HDC
Definition: imagelist.c:88
static HPALETTE palette
Definition: clipboard.c:1457
INT WINAPI MulDiv(INT nNumber, INT nNumerator, INT nDenominator)
Definition: muldiv.c:25
PAL_TYPE
Definition: palettemodel.h:13
@ PAL_MODERN
Definition: palettemodel.h:14
long LONG
Definition: pedump.c:60
void endEvent()
Definition: mouse.cpp:138
virtual BOOL OnMouseMove(BOOL bLeftButton, LONG &x, LONG &y)
Definition: toolsmodel.h:50
virtual void OnButtonDown(BOOL bLeftButton, LONG x, LONG y, BOOL bDoubleClick)
Definition: toolsmodel.h:49
HDC m_hdc
Definition: toolsmodel.h:43
virtual void OnEndDraw(BOOL bCancel)
Definition: mouse.cpp:125
virtual void OnSpecialTweak(BOOL bMinus)
Definition: toolsmodel.h:56
void reset()
Definition: mouse.cpp:106
static ToolBase * createToolObject(TOOLTYPE type)
Definition: mouse.cpp:1131
COLORREF m_fg
Definition: toolsmodel.h:44
virtual void OnDrawOverlayOnImage(HDC hdc)
Definition: toolsmodel.h:53
void beginEvent()
Definition: mouse.cpp:131
ToolBase()
Definition: toolsmodel.h:46
virtual void OnDrawOverlayOnCanvas(HDC hdc)
Definition: toolsmodel.h:54
virtual BOOL OnButtonUp(BOOL bLeftButton, LONG &x, LONG &y)
Definition: toolsmodel.h:51
virtual ~ToolBase()
Definition: toolsmodel.h:47
COLORREF m_bg
Definition: toolsmodel.h:44
LONG right
Definition: windef.h:108
LONG bottom
Definition: windef.h:109
LONG top
Definition: windef.h:107
LONG left
Definition: windef.h:106
ToolsModel toolsModel
Definition: toolsmodel.cpp:10
static int UnZoomed(int xy, BOOL bRound=FALSE)
Definition: toolsmodel.h:175
TOOLTYPE
Definition: toolsmodel.h:11
@ TOOL_AIRBRUSH
Definition: toolsmodel.h:20
@ TOOL_COLOR
Definition: toolsmodel.h:16
@ TOOL_SHAPE
Definition: toolsmodel.h:25
@ TOOL_RUBBER
Definition: toolsmodel.h:14
@ TOOL_MAX
Definition: toolsmodel.h:28
@ TOOL_BRUSH
Definition: toolsmodel.h:19
@ TOOL_RECT
Definition: toolsmodel.h:24
@ TOOL_BEZIER
Definition: toolsmodel.h:23
@ TOOL_FILL
Definition: toolsmodel.h:15
@ TOOL_TEXT
Definition: toolsmodel.h:21
@ TOOL_PEN
Definition: toolsmodel.h:18
@ TOOL_LINE
Definition: toolsmodel.h:22
@ TOOL_FREESEL
Definition: toolsmodel.h:12
@ TOOL_ZOOM
Definition: toolsmodel.h:17
@ TOOL_ELLIPSE
Definition: toolsmodel.h:26
@ TOOL_RRECT
Definition: toolsmodel.h:27
@ TOOL_RECTSEL
Definition: toolsmodel.h:13
static int Zoomed(int xy)
Definition: toolsmodel.h:170
BrushStyle
Definition: toolsmodel.h:32
@ BrushStyleForeSlash
Definition: toolsmodel.h:35
@ BrushStyleRound
Definition: toolsmodel.h:33
@ BrushStyleBackSlash
Definition: toolsmodel.h:36
@ BrushStyleSquare
Definition: toolsmodel.h:34
int32_t INT
Definition: typedefs.h:58
DWORD COLORREF
Definition: windef.h:100