Krita Source Code Documentation
Loading...
Searching...
No Matches
KisToolLineHelper Class Reference

#include <kis_tool_line_helper.h>

+ Inheritance diagram for KisToolLineHelper:

Classes

struct  Private
 

Public Member Functions

void addPoint (KisPaintInformation pi, const QPointF &overridePos=QPointF())
 
void addPoint (KoPointerEvent *event, const QPointF &overridePos=QPointF())
 
void cancel ()
 
void clearPaint ()
 
void clearPoints ()
 
void end ()
 
bool isRunning () const
 
 KisToolLineHelper (KisPaintingInformationBuilder *infoBuilder, KoCanvasResourceProvider *resourceManager, const KUndo2MagicString &transactionText)
 
void movePointsTo (const QPointF &startPoint, const QPointF &endPoint)
 
void repaintLine (KisImageWSP image, KisNodeSP node, KisStrokesFacade *strokesFacade)
 
void setEnabled (bool value)
 
void setUseSensors (bool value)
 
void start (KoPointerEvent *event, KoCanvasResourceProvider *resourceManager)
 
void translatePoints (const QPointF &offset)
 
 ~KisToolLineHelper () override
 

Private Member Functions

void adjustPointsToDDA (QVector< KisPaintInformation > &points)
 
- Private Member Functions inherited from KisToolFreehandHelper
void cursorMoved (const QPointF &cursorPos)
 
void endPaint ()
 
void initPaint (KoPointerEvent *event, const QPointF &pixelCoords, KisImageWSP image, KisNodeSP currentNode, KisStrokesFacade *strokesFacade, KisNodeSP overrideNode=0, KisDefaultBoundsBaseSP bounds=0)
 
bool isRunning () const
 
 KisToolFreehandHelper (KisPaintingInformationBuilder *infoBuilder, KoCanvasResourceProvider *resourceManager, const KUndo2MagicString &transactionText=KUndo2MagicString(), KisSmoothingOptions *smoothingOptions=0)
 
void paintEvent (KoPointerEvent *event)
 
KisOptimizedBrushOutline paintOpOutline (const QPointF &savedCursorPos, const KoPointerEvent *event, const KisPaintOpSettingsSP globalSettings, KisPaintOpSettings::OutlineMode mode) const
 
void setSmoothness (KisSmoothingOptionsSP smoothingOptions)
 
KisSmoothingOptionsSP smoothingOptions () const
 
 ~KisToolFreehandHelper () override
 
void cancelPaint ()
 
virtual void createPainters (QVector< KisFreehandStrokeInfo * > &strokeInfos, const KisDistanceInformation &startDist)
 
int elapsedStrokeTime () const
 
void initPaintImpl (qreal startAngle, const KisPaintInformation &pi, KoCanvasResourceProvider *resourceManager, KisImageWSP image, KisNodeSP node, KisStrokesFacade *strokesFacade, KisNodeSP overrideNode=0, KisDefaultBoundsBaseSP bounds=0)
 
virtual void paintAt (const KisPaintInformation &pi)
 
void paintAt (int strokeInfoId, const KisPaintInformation &pi)
 
virtual void paintBezierCurve (const KisPaintInformation &pi1, const QPointF &control1, const QPointF &control2, const KisPaintInformation &pi2)
 
void paintBezierCurve (int strokeInfoId, const KisPaintInformation &pi1, const QPointF &control1, const QPointF &control2, const KisPaintInformation &pi2)
 
virtual void paintLine (const KisPaintInformation &pi1, const KisPaintInformation &pi2)
 
void paintLine (int strokeInfoId, const KisPaintInformation &pi1, const KisPaintInformation &pi2)
 
KoCanvasResourceProviderresourceManager () const
 

Private Attributes

Private *const m_d
 

Additional Inherited Members

- Signals inherited from KisToolFreehandHelper
void requestExplicitUpdateOutline ()
 

Detailed Description

Definition at line 13 of file kis_tool_line_helper.h.

Constructor & Destructor Documentation

◆ KisToolLineHelper()

KisToolLineHelper::KisToolLineHelper ( KisPaintingInformationBuilder * infoBuilder,
KoCanvasResourceProvider * resourceManager,
const KUndo2MagicString & transactionText )

Definition at line 33 of file kis_tool_line_helper.cpp.

36 : KisToolFreehandHelper(infoBuilder,
38 transactionText,
39 new KisSmoothingOptions(false)),
40 m_d(new Private(infoBuilder))
41{
42}
KisToolFreehandHelper(KisPaintingInformationBuilder *infoBuilder, KoCanvasResourceProvider *resourceManager, const KUndo2MagicString &transactionText=KUndo2MagicString(), KisSmoothingOptions *smoothingOptions=0)
KoCanvasResourceProvider * resourceManager() const

◆ ~KisToolLineHelper()

KisToolLineHelper::~KisToolLineHelper ( )
override

Definition at line 44 of file kis_tool_line_helper.cpp.

45{
46 delete m_d;
47}

References m_d.

Member Function Documentation

◆ addPoint() [1/2]

void KisToolLineHelper::addPoint ( KisPaintInformation pi,
const QPointF & overridePos = QPointF() )

Definition at line 126 of file kis_tool_line_helper.cpp.

127{
128 if (!m_d->enabled) return;
129 if (!m_d->useSensors) {
130 pi = KisPaintInformation(pi.pos());
131 }
132
133 if (!overridePos.isNull()) {
134 pi.setPos(overridePos);
135 }
136
137 if (m_d->linePoints.size() > 1) {
138 const QPointF startPos = m_d->linePoints.first().pos();
139 const QPointF endPos = pi.pos();
140
141 if (!KisAlgebra2D::fuzzyPointCompare(startPos, endPos)) {
142 const qreal maxDistance = kisDistance(startPos, endPos);
143 const QPointF unit = (endPos - startPos) / maxDistance;
144
146 ++it;
147 while (it != m_d->linePoints.end()) {
148 qreal dist = kisDistance(startPos, it->pos());
149 if (dist < maxDistance) {
150 QPointF pos = startPos + unit * dist;
151 it->setPos(pos);
152 ++it;
153 } else {
154 it = m_d->linePoints.erase(it);
155 }
156 }
157 } else {
158 m_d->linePoints.clear();
159 }
160 }
161
162 m_d->linePoints.append(pi);
163
164}
void setPos(const QPointF &p)
const QPointF & pos() const
qreal kisDistance(const QPointF &pt1, const QPointF &pt2)
Definition kis_global.h:190
bool fuzzyPointCompare(const QPointF &p1, const QPointF &p2)
QVector< KisPaintInformation > linePoints

References KisToolLineHelper::Private::enabled, KisAlgebra2D::fuzzyPointCompare(), kisDistance(), KisToolLineHelper::Private::linePoints, m_d, KisPaintInformation::pos(), KisPaintInformation::setPos(), and KisToolLineHelper::Private::useSensors.

◆ addPoint() [2/2]

void KisToolLineHelper::addPoint ( KoPointerEvent * event,
const QPointF & overridePos = QPointF() )

Definition at line 114 of file kis_tool_line_helper.cpp.

115{
116 if (!m_d->enabled) return;
117
118 // Ignore the elapsed stroke time, so that the line tool will behave as if the whole stroke is
119 // drawn at once. This should prevent any possible spurious dabs caused by airbrushing features.
121 m_d->infoBuilder->continueStroke(event, 0);
122
123 addPoint(pi, overridePos);
124}
KisPaintInformation continueStroke(KoPointerEvent *event, int timeElapsed)
void addPoint(KoPointerEvent *event, const QPointF &overridePos=QPointF())
KisPaintingInformationBuilder * infoBuilder

References addPoint(), KisPaintingInformationBuilder::continueStroke(), KisToolLineHelper::Private::enabled, KisToolLineHelper::Private::infoBuilder, and m_d.

◆ adjustPointsToDDA()

void KisToolLineHelper::adjustPointsToDDA ( QVector< KisPaintInformation > & points)
private

Definition at line 235 of file kis_tool_line_helper.cpp.

236{
237 int x = qFloor(points.first().pos().x());
238 int y = qFloor(points.first().pos().y());
239
240 int x2 = qFloor(points.last().pos().x());
241 int y2 = qFloor(points.last().pos().y());
242
243 // Width and height of the line
244 int xd = x2 - x;
245 int yd = y2 - y;
246
247 float m = 0;
248 bool lockAxis = true;
249
250 if (xd == 0) {
251 m = 2.0;
252 } else if ( yd != 0) {
253 lockAxis = false;
254 m = (float)yd / (float)xd;
255 }
256
257 float fx = x;
258 float fy = y;
259
260 int inc;
261 int dist;
262
263 if (fabs(m) > 1.0f) {
264 inc = (yd > 0) ? 1 : -1;
265 m = (lockAxis)? 0 : 1.0f / m;
266 m *= inc;
267
268 for (int i = 0; i < points.size(); i++){
269 dist = abs(qFloor(points.at(i).pos().y()) - y);
270 fy = y + (dist * inc);
271 fx = qRound(x + (dist * m));
272 points[i].setPos(QPointF(fx,fy));
273 }
274
275 } else {
276 inc = (xd > 0) ? 1 : -1;
277 m *= inc;
278
279 for (int i = 0; i < points.size(); i++){
280 dist = abs(qFloor(points.at(i).pos().x()) - x);
281 fx = x + (dist * inc);
282 fy = qRound(y + (dist * m));
283 points[i].setPos(QPointF(fx,fy));
284 }
285 }
286}
Point abs(const Point &pt)

◆ cancel()

◆ clearPaint()

void KisToolLineHelper::clearPaint ( )

Definition at line 228 of file kis_tool_line_helper.cpp.

229{
230 if (!m_d->enabled) return;
231
232 cancelPaint();
233}

References KisToolFreehandHelper::cancelPaint(), KisToolLineHelper::Private::enabled, and m_d.

◆ clearPoints()

void KisToolLineHelper::clearPoints ( )

Definition at line 222 of file kis_tool_line_helper.cpp.

223{
224 m_d->linePoints.clear();
225}

References KisToolLineHelper::Private::linePoints, and m_d.

◆ end()

◆ isRunning()

bool KisToolFreehandHelper::isRunning ( ) const

Definition at line 46 of file kis_tool_freehand_helper.cpp.

273{
274 return bool(m_d->strokeId);
275}

◆ movePointsTo()

void KisToolLineHelper::movePointsTo ( const QPointF & startPoint,
const QPointF & endPoint )

Definition at line 177 of file kis_tool_line_helper.cpp.

178{
179 if (m_d->linePoints.size() <= 1 ) {
180 return;
181 }
182
183 if (KisAlgebra2D::fuzzyPointCompare(startPoint, endPoint)) {
184 return;
185 }
186
187 if (m_d->linePoints.size() > 1) {
188 const qreal maxDistance = kisDistance(startPoint, endPoint);
189 const QPointF unit = (endPoint - startPoint) / maxDistance;
190
192 ++it;
193 while (it != m_d->linePoints.end()) {
194 qreal dist = kisDistance(startPoint, it->pos());
195 QPointF pos = startPoint + unit * dist;
196 it->setPos(pos);
197 ++it;
198 }
199 }
200}

References KisAlgebra2D::fuzzyPointCompare(), kisDistance(), KisToolLineHelper::Private::linePoints, and m_d.

◆ repaintLine()

void KisToolLineHelper::repaintLine ( KisImageWSP image,
KisNodeSP node,
KisStrokesFacade * strokesFacade )

Definition at line 59 of file kis_tool_line_helper.cpp.

61{
62 if (!m_d->enabled) return;
63
65 if (m_d->linePoints.isEmpty()) return;
66
67 qreal startAngle = 0.0;
68 if (m_d->linePoints.length() > 1) {
70 m_d->linePoints[1].pos(),
71 0.0);
72 }
73
75 .value<KisPaintOpPresetSP>();
76
77 if (preset->settings()->paintOpSize() <= 1) {
78 KisPaintInformation begin = m_d->linePoints.first();
80 m_d->linePoints.clear();
81 m_d->linePoints.append(begin);
82 m_d->linePoints.append(end);
84 }
85
88
89 initPaintImpl(startAngle, *it, resourceManager(), image, node, strokesFacade);
90 ++it;
91
92 while (it != end) {
93 paintLine(*(it - 1), *it);
94 ++it;
95 }
96}
void initPaintImpl(qreal startAngle, const KisPaintInformation &pi, KoCanvasResourceProvider *resourceManager, KisImageWSP image, KisNodeSP node, KisStrokesFacade *strokesFacade, KisNodeSP overrideNode=0, KisDefaultBoundsBaseSP bounds=0)
void paintLine(int strokeInfoId, const KisPaintInformation &pi1, const KisPaintInformation &pi2)
void adjustPointsToDDA(QVector< KisPaintInformation > &points)
qreal directionBetweenPoints(const QPointF &p1, const QPointF &p2, qreal defaultAngle)

References adjustPointsToDDA(), KisToolFreehandHelper::cancelPaint(), KoCanvasResource::CurrentPaintOpPreset, KisAlgebra2D::directionBetweenPoints(), KisToolLineHelper::Private::enabled, KisToolFreehandHelper::initPaintImpl(), KisToolLineHelper::Private::linePoints, m_d, KisToolFreehandHelper::paintLine(), KoCanvasResourceProvider::resource(), and KisToolFreehandHelper::resourceManager().

◆ setEnabled()

void KisToolLineHelper::setEnabled ( bool value)

Definition at line 49 of file kis_tool_line_helper.cpp.

50{
51 m_d->enabled = value;
52}
float value(const T *src, size_t ch)

References KisToolLineHelper::Private::enabled, m_d, and value().

◆ setUseSensors()

void KisToolLineHelper::setUseSensors ( bool value)

Definition at line 54 of file kis_tool_line_helper.cpp.

55{
57}

References m_d, KisToolLineHelper::Private::useSensors, and value().

◆ start()

void KisToolLineHelper::start ( KoPointerEvent * event,
KoCanvasResourceProvider * resourceManager )

Definition at line 98 of file kis_tool_line_helper.cpp.

99{
100 if (!m_d->enabled) return;
101
102 // Ignore the elapsed stroke time, so that the line tool will behave as if the whole stroke is
103 // drawn at once. This should prevent any possible spurious dabs caused by airbrushing features.
106
107 if (!m_d->useSensors) {
108 pi = KisPaintInformation(pi.pos());
109 }
110
111 m_d->linePoints.append(pi);
112}
KisPaintInformation startStroke(KoPointerEvent *event, int timeElapsed, const KoCanvasResourceProvider *manager)

References KisToolLineHelper::Private::enabled, KisToolLineHelper::Private::infoBuilder, KisToolLineHelper::Private::linePoints, m_d, KisPaintInformation::pos(), KisToolFreehandHelper::resourceManager(), KisPaintingInformationBuilder::startStroke(), and KisToolLineHelper::Private::useSensors.

◆ translatePoints()

void KisToolLineHelper::translatePoints ( const QPointF & offset)

Definition at line 166 of file kis_tool_line_helper.cpp.

167{
168 if (!m_d->enabled) return;
169
171 while (it != m_d->linePoints.end()) {
172 it->setPos(it->pos() + offset);
173 ++it;
174 }
175}

References KisToolLineHelper::Private::enabled, KisToolLineHelper::Private::linePoints, and m_d.

Member Data Documentation

◆ m_d

Private* const KisToolLineHelper::m_d
private

Definition at line 47 of file kis_tool_line_helper.h.


The documentation for this class was generated from the following files: