Krita Source Code Documentation
Loading...
Searching...
No Matches
freehand_stroke.h
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com>
3
*
4
* SPDX-License-Identifier: GPL-2.0-or-later
5
*/
6
7
#ifndef __FREEHAND_STROKE_H
8
#define __FREEHAND_STROKE_H
9
10
11
#include <QPen>
12
#include "kritaui_export.h"
13
#include "
kis_types.h
"
14
#include "
kis_node.h
"
15
#include "
kis_painter_based_stroke_strategy.h
"
16
#include <
kis_distance_information.h
>
17
#include <
brushengine/kis_paint_information.h
>
18
#include "
kis_lod_transform.h
"
19
#include "
KoColor.h
"
20
21
22
23
class
KRITAUI_EXPORT
FreehandStrokeStrategy
:
public
KisPainterBasedStrokeStrategy
24
{
25
public
:
26
enum
Flag
{
27
None
= 0x0,
28
SupportsContinuedInterstrokeData = 0x1,
29
SupportsTimedMergeId = 0x2
30
};
31
Q_DECLARE_FLAGS
(Flags, Flag)
32
33
public
:
34
class
Data
:
public
KisStrokeJobData
{
35
public
:
36
enum
DabType
{
37
POINT
,
38
LINE
,
39
CURVE
,
40
POLYLINE
,
41
POLYGON
,
42
RECT
,
43
ELLIPSE
,
44
PAINTER_PATH
,
45
QPAINTER_PATH
,
46
QPAINTER_PATH_FILL
47
};
48
49
Data
(
int
_strokeInfoId,
50
const
KisPaintInformation
&_pi)
51
:
KisStrokeJobData
(
KisStrokeJobData
::UNIQUELY_CONCURRENT),
52
strokeInfoId(_strokeInfoId),
53
type(POINT), pi1(_pi)
54
{}
55
56
Data
(
int
_strokeInfoId,
57
const
KisPaintInformation
&_pi1,
58
const
KisPaintInformation
&_pi2)
59
:
KisStrokeJobData
(
KisStrokeJobData
::UNIQUELY_CONCURRENT),
60
strokeInfoId(_strokeInfoId),
61
type(LINE), pi1(_pi1), pi2(_pi2)
62
{}
63
64
Data
(
int
_strokeInfoId,
65
const
KisPaintInformation
&_pi1,
66
const
QPointF &_control1,
67
const
QPointF &_control2,
68
const
KisPaintInformation
&_pi2)
69
:
KisStrokeJobData
(
KisStrokeJobData
::UNIQUELY_CONCURRENT),
70
strokeInfoId(_strokeInfoId),
71
type(CURVE), pi1(_pi1), pi2(_pi2),
72
control1(_control1), control2(_control2)
73
{}
74
75
Data
(
int
_strokeInfoId,
76
DabType
_type,
77
const
vQPointF
&_points)
78
:
KisStrokeJobData
(
KisStrokeJobData
::UNIQUELY_CONCURRENT),
79
strokeInfoId(_strokeInfoId),
80
type(_type), points(_points)
81
{}
82
83
Data
(
int
_strokeInfoId,
84
DabType
_type,
85
const
QRectF &_rect)
86
:
KisStrokeJobData
(
KisStrokeJobData
::UNIQUELY_CONCURRENT),
87
strokeInfoId(_strokeInfoId),
88
type(_type),
rect
(_rect)
89
{}
90
91
Data
(
int
_strokeInfoId,
92
DabType
_type,
93
const
QPainterPath &_path)
94
:
KisStrokeJobData
(
KisStrokeJobData
::UNIQUELY_CONCURRENT),
95
strokeInfoId(_strokeInfoId),
96
type(_type), path(_path)
97
{}
98
99
Data
(
int
_strokeInfoId,
100
DabType
_type,
101
const
QPainterPath &_path,
102
const
QPen &_pen,
const
KoColor
&_customColor)
103
:
KisStrokeJobData
(
KisStrokeJobData
::UNIQUELY_CONCURRENT),
104
strokeInfoId(_strokeInfoId),
105
type(_type), path(_path),
106
pen(_pen), customColor(_customColor)
107
{}
108
109
KisStrokeJobData
*
createLodClone
(
int
levelOfDetail)
override
{
110
return
new
Data
(*
this
, levelOfDetail);
111
}
112
113
private
:
114
Data
(
const
Data
&rhs,
int
levelOfDetail)
115
:
KisStrokeJobData
(rhs),
116
strokeInfoId(rhs.strokeInfoId),
117
type(rhs.type)
118
{
119
KisLodTransform
t(levelOfDetail);
120
121
switch
(type) {
122
case
Data::POINT:
123
pi1 = t.
map
(rhs.
pi1
);
124
break
;
125
case
Data::LINE:
126
pi1 = t.
map
(rhs.
pi1
);
127
pi2 = t.
map
(rhs.
pi2
);
128
break
;
129
case
Data::CURVE:
130
pi1 = t.
map
(rhs.
pi1
);
131
pi2 = t.
map
(rhs.
pi2
);
132
control1 = t.
map
(rhs.
control1
);
133
control2 = t.
map
(rhs.
control2
);
134
break
;
135
case
Data::POLYLINE:
136
points = t.
map
(rhs.
points
);
137
break
;
138
case
Data::POLYGON:
139
points = t.
map
(rhs.
points
);
140
break
;
141
case
Data::RECT:
142
rect
= t.
map
(rhs.
rect
);
143
break
;
144
case
Data::ELLIPSE:
145
rect
= t.
map
(rhs.
rect
);
146
break
;
147
case
Data::PAINTER_PATH:
148
path = t.
map
(rhs.
path
);
149
break
;
150
case
Data::QPAINTER_PATH:
151
path = t.
map
(rhs.
path
);
152
pen = rhs.
pen
;
153
break
;
154
case
Data::QPAINTER_PATH_FILL:
155
path = t.
map
(rhs.
path
);
156
pen = rhs.
pen
;
157
customColor = rhs.
customColor
;
158
break
;
159
};
160
}
161
public
:
162
int
strokeInfoId
;
163
164
DabType
type
;
165
KisPaintInformation
pi1
;
166
KisPaintInformation
pi2
;
167
QPointF
control1
;
168
QPointF
control2
;
169
170
vQPointF
points
;
171
QRectF
rect
;
172
QPainterPath
path
;
173
QPen
pen
;
174
KoColor
customColor
;
175
};
176
177
public
:
178
FreehandStrokeStrategy
(
KisResourcesSnapshotSP
resources,
179
KisFreehandStrokeInfo
*strokeInfo,
180
const
KUndo2MagicString
&name,
181
Flags flags =
None
);
182
183
FreehandStrokeStrategy
(
KisResourcesSnapshotSP
resources,
184
QVector<KisFreehandStrokeInfo*>
strokeInfos,
185
const
KUndo2MagicString
&name,
186
Flags flags =
None
);
187
188
~FreehandStrokeStrategy
()
override
;
189
190
void
initStrokeCallback
()
override
;
191
void
finishStrokeCallback
()
override
;
192
193
void
doStrokeCallback
(
KisStrokeJobData
*data)
override
;
194
195
KisStrokeStrategy
*
createLodClone
(
int
levelOfDetail)
override
;
196
197
void
notifyUserStartedStroke
()
override
;
198
void
notifyUserEndedStroke
()
override
;
199
200
protected
:
201
FreehandStrokeStrategy
(
const
FreehandStrokeStrategy
&rhs,
int
levelOfDetail);
202
203
private
:
204
void
init
(FreehandStrokeStrategy::Flags flags);
205
206
void
tryDoUpdate(
bool
forceEnd =
false
);
207
void
issueSetDirtySignals();
208
209
private
:
210
struct
Private
;
211
const
QScopedPointer<Private>
m_d
;
212
};
213
214
Q_DECLARE_OPERATORS_FOR_FLAGS
(FreehandStrokeStrategy::Flags)
215
216
#endif
/* __FREEHAND_STROKE_H */
Q_DECLARE_FLAGS
Q_DECLARE_FLAGS(KisUpdaterContextSnapshotEx, KisUpdaterContextSnapshotExTag)
None
@ None
Definition
KoColorConversionSystem_p.h:21
KoColor.h
FreehandStrokeStrategy::Data
Definition
freehand_stroke.h:34
FreehandStrokeStrategy::Data::control2
QPointF control2
Definition
freehand_stroke.h:168
FreehandStrokeStrategy::Data::Data
Data(int _strokeInfoId, const KisPaintInformation &_pi1, const QPointF &_control1, const QPointF &_control2, const KisPaintInformation &_pi2)
Definition
freehand_stroke.h:64
FreehandStrokeStrategy::Data::path
QPainterPath path
Definition
freehand_stroke.h:172
FreehandStrokeStrategy::Data::Data
Data(int _strokeInfoId, const KisPaintInformation &_pi)
Definition
freehand_stroke.h:49
FreehandStrokeStrategy::Data::points
vQPointF points
Definition
freehand_stroke.h:170
FreehandStrokeStrategy::Data::pen
QPen pen
Definition
freehand_stroke.h:173
FreehandStrokeStrategy::Data::type
DabType type
Definition
freehand_stroke.h:164
FreehandStrokeStrategy::Data::Data
Data(int _strokeInfoId, DabType _type, const vQPointF &_points)
Definition
freehand_stroke.h:75
FreehandStrokeStrategy::Data::Data
Data(int _strokeInfoId, DabType _type, const QRectF &_rect)
Definition
freehand_stroke.h:83
FreehandStrokeStrategy::Data::rect
QRectF rect
Definition
freehand_stroke.h:171
FreehandStrokeStrategy::Data::pi1
KisPaintInformation pi1
Definition
freehand_stroke.h:165
FreehandStrokeStrategy::Data::control1
QPointF control1
Definition
freehand_stroke.h:167
FreehandStrokeStrategy::Data::pi2
KisPaintInformation pi2
Definition
freehand_stroke.h:166
FreehandStrokeStrategy::Data::Data
Data(const Data &rhs, int levelOfDetail)
Definition
freehand_stroke.h:114
FreehandStrokeStrategy::Data::createLodClone
KisStrokeJobData * createLodClone(int levelOfDetail) override
Definition
freehand_stroke.h:109
FreehandStrokeStrategy::Data::Data
Data(int _strokeInfoId, DabType _type, const QPainterPath &_path)
Definition
freehand_stroke.h:91
FreehandStrokeStrategy::Data::Data
Data(int _strokeInfoId, const KisPaintInformation &_pi1, const KisPaintInformation &_pi2)
Definition
freehand_stroke.h:56
FreehandStrokeStrategy::Data::Data
Data(int _strokeInfoId, DabType _type, const QPainterPath &_path, const QPen &_pen, const KoColor &_customColor)
Definition
freehand_stroke.h:99
FreehandStrokeStrategy::Data::customColor
KoColor customColor
Definition
freehand_stroke.h:174
FreehandStrokeStrategy::Data::strokeInfoId
int strokeInfoId
Definition
freehand_stroke.h:162
FreehandStrokeStrategy::Data::DabType
DabType
Definition
freehand_stroke.h:36
FreehandStrokeStrategy::Data::ELLIPSE
@ ELLIPSE
Definition
freehand_stroke.h:43
FreehandStrokeStrategy::Data::PAINTER_PATH
@ PAINTER_PATH
Definition
freehand_stroke.h:44
FreehandStrokeStrategy::Data::RECT
@ RECT
Definition
freehand_stroke.h:42
FreehandStrokeStrategy::Data::CURVE
@ CURVE
Definition
freehand_stroke.h:39
FreehandStrokeStrategy::Data::POLYLINE
@ POLYLINE
Definition
freehand_stroke.h:40
FreehandStrokeStrategy::Data::QPAINTER_PATH
@ QPAINTER_PATH
Definition
freehand_stroke.h:45
FreehandStrokeStrategy::Data::POINT
@ POINT
Definition
freehand_stroke.h:37
FreehandStrokeStrategy::Data::POLYGON
@ POLYGON
Definition
freehand_stroke.h:41
FreehandStrokeStrategy::Data::LINE
@ LINE
Definition
freehand_stroke.h:38
FreehandStrokeStrategy
Definition
freehand_stroke.h:24
FreehandStrokeStrategy::Flag
Flag
Definition
freehand_stroke.h:26
FreehandStrokeStrategy::m_d
const QScopedPointer< Private > m_d
Definition
freehand_stroke.h:211
KUndo2MagicString
Definition
kundo2magicstring.h:40
KisFreehandStrokeInfo
Definition
KisFreehandStrokeInfo.h:21
KisLodTransform
Definition
kis_lod_transform.h:15
KisLodTransform::map
KisPaintInformation map(KisPaintInformation pi) const
Definition
kis_lod_transform.h:31
KisPaintInformation
Definition
kis_paint_information.h:51
KisPainterBasedStrokeStrategy
Definition
kis_painter_based_stroke_strategy.h:27
KisPainterBasedStrokeStrategy::init
void init()
Definition
kis_painter_based_stroke_strategy.cpp:75
KisPainterBasedStrokeStrategy::finishStrokeCallback
void finishStrokeCallback() override
Definition
kis_painter_based_stroke_strategy.cpp:389
KisPainterBasedStrokeStrategy::initStrokeCallback
void initStrokeCallback() override
Definition
kis_painter_based_stroke_strategy.cpp:250
KisRunnableBasedStrokeStrategy::doStrokeCallback
void doStrokeCallback(KisStrokeJobData *data) override
Definition
KisRunnableBasedStrokeStrategy.cpp:55
KisSharedPtr< KisResourcesSnapshot >
KisStrokeJobData
Definition
kis_stroke_job_strategy.h:15
KisStrokeStrategy
Definition
kis_stroke_strategy.h:21
KisStrokeStrategy::notifyUserEndedStroke
virtual void notifyUserEndedStroke()
Definition
kis_stroke_strategy.cpp:65
KisStrokeStrategy::notifyUserStartedStroke
virtual void notifyUserStartedStroke()
Definition
kis_stroke_strategy.cpp:61
KisStrokeStrategy::createLodClone
virtual KisStrokeStrategy * createLodClone(int levelOfDetail)
Definition
kis_stroke_strategy.cpp:124
KoColor
Definition
KoColor.h:31
QList
Definition
KisQStringListFwd.h:16
Q_DECLARE_OPERATORS_FOR_FLAGS
Q_DECLARE_OPERATORS_FOR_FLAGS(KisBaseRectsWalker::SubtreeVisitFlags)
kis_distance_information.h
kis_lod_transform.h
kis_node.h
kis_paint_information.h
kis_painter_based_stroke_strategy.h
kis_types.h
Private
Definition
SvgTransformParser.cpp:20
rect
Definition
xcftools.h:129
libs
ui
tool
strokes
freehand_stroke.h
Generated at
2025-11-04 02:30:02+01:00
from
Krita
branch
master
, commit
c9dde2e79561a8aea4a7e8d9ac99c98a7bac9e52