Krita Source Code Documentation
Loading...
Searching...
No Matches
KoPencilTool.h
Go to the documentation of this file.
1/* This file is part of the KDE project
2 * SPDX-FileCopyrightText: 2007, 2009 Jan Hambrecht <jaham@gmx.net>
3 *
4 * SPDX-License-Identifier: LGPL-2.0-or-later
5 */
6
7#ifndef _KOPENCILTOOL_H_
8#define _KOPENCILTOOL_H_
9
10#include "KoFlakeTypes.h"
11#include "KoToolBase.h"
12#include <kconfiggroup.h>
13
14class KoPathShape;
15class KoShapeStroke;
16class KoPathPoint;
18
19#include "kritabasicflakes_export.h"
20
21class KRITABASICFLAKES_EXPORT KoPencilTool : public KoToolBase
22{
23 Q_OBJECT
24public:
25 explicit KoPencilTool(KoCanvasBase *canvas);
26 ~KoPencilTool() override;
27
28 void paint(QPainter &painter, const KoViewConverter &converter) override;
29
30 void mousePressEvent(KoPointerEvent *event) override ;
31 void mouseMoveEvent(KoPointerEvent *event) override;
32 void mouseReleaseEvent(KoPointerEvent *event) override;
33 void keyPressEvent(QKeyEvent *event) override;
34
35 void activate(const QSet<KoShape*> &shapes) override;
36 void deactivate() override;
37
38protected:
40
46 virtual void addPathShape(KoPathShape* path, bool closePath);
47
48 KoShapeStrokeSP createStroke();
49 KoPathShape * path();
50 void setFittingError(qreal fittingError);
51 qreal getFittingError();
52
53private Q_SLOTS:
54 void selectMode(int mode);
55 void setOptimize(int state);
56 void setDelta(double delta);
57
58protected Q_SLOTS:
59 virtual void slotUpdatePencilCursor();
60
61private:
62
63 qreal lineAngle(const QPointF &p1, const QPointF &p2);
64 void addPoint(const QPointF & point);
65 void finish(bool closePath);
66
68 KoPathPoint* endPointAtPosition(const QPointF &position);
69
71 bool connectPaths(KoPathShape *pathShape, KoPathPoint *pointAtStart, KoPathPoint *pointAtEnd);
72
73 enum PencilMode { ModeRaw, ModeCurve, ModeStraight };
74
75 PencilMode m_mode {ModeCurve};
76 bool m_optimizeRaw {false};
77 bool m_optimizeCurve {false};
78 qreal m_combineAngle {15.0};
79 qreal m_fittingError {5.0};
80 bool m_close {false};
81
82 QList<QPointF> m_points; // the raw points
83
84 KoPathShape * m_shape {0};
85 KoPathPoint *m_existingStartPoint {0};
86 KoPathPoint *m_existingEndPoint {0};
87 KoPathPoint *m_hoveredPoint {0};
88 KoStrokeConfigWidget *m_strokeWidget {0};
89
90 KConfigGroup m_configGroup;
91};
92
93#endif // _KOPENCILTOOL_H_
QPointF p2
QPointF p1
A KoPathPoint represents a point in a path.
The position of a path point within a path shape.
Definition KoPathShape.h:63
QList< QPointF > m_points
KConfigGroup m_configGroup
A widget for configuring the stroke of a shape.
virtual QList< QPointer< QWidget > > createOptionWidgets()
virtual void mousePressEvent(KoPointerEvent *event)=0
virtual void mouseMoveEvent(KoPointerEvent *event)=0
virtual void activate(const QSet< KoShape * > &shapes)
virtual void mouseReleaseEvent(KoPointerEvent *event)=0
virtual void keyPressEvent(QKeyEvent *event)
virtual void deactivate()
virtual void paint(QPainter &painter, const KoViewConverter &converter)=0