Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_tool_freehand.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2003-2008 Boudewijn Rempt <boud@valdyas.org>
3 * SPDX-FileCopyrightText: 2026 Ayanami Kaine <personal@ayanamikaine.com>
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 */
7
8#ifndef KIS_TOOL_FREEHAND_H_
9#define KIS_TOOL_FREEHAND_H_
10
14
15#include <Qt>
16
17#include "kis_types.h"
18#include "kis_tool_paint.h"
21#include "KoPointerEvent.h"
22
23#include "kritaui_export.h"
24
25class KoPointerEvent;
26class KoCanvasBase;
27
30
31
32class KRITAUI_EXPORT KisToolFreehand : public KisToolPaint
33{
34
35 Q_OBJECT
36
37public:
38 KisToolFreehand(KoCanvasBase * canvas, const QCursor & cursor, const KUndo2MagicString &transactionText,
39 bool useSavedSmoothing = true);
40 ~KisToolFreehand() override;
41 int flags() const override;
42 void mouseMoveEvent(KoPointerEvent *event) override;
43
44
45public Q_SLOTS:
46 void activate(const QSet<KoShape*> &shapes) override;
47 void deactivate() override;
48
49protected:
50 bool trySampleByPaintOp(KoPointerEvent *event, AlternateAction action);
51
52 bool primaryActionSupportsHiResEvents() const override;
53 void beginPrimaryAction(KoPointerEvent *event) override;
54 void continuePrimaryAction(KoPointerEvent *event) override;
55 void endPrimaryAction(KoPointerEvent *event) override;
56
57 void activateAlternateAction(AlternateAction action) override;
58 void deactivateAlternateAction(AlternateAction action) override;
59
60 void beginAlternateAction(KoPointerEvent *event, AlternateAction action) override;
61 void continueAlternateAction(KoPointerEvent *event, AlternateAction action) override;
62 void endAlternateAction(KoPointerEvent *event, AlternateAction action) override;
63
64 bool wantsAutoScroll() const override;
65
66
67 virtual void initStroke(KoPointerEvent *event);
68 virtual void doStroke(KoPointerEvent *event);
69 virtual void endStroke();
70
71
72
73 KisOptimizedBrushOutline getOutlinePath(const QPointF &documentPos,
74 const KoPointerEvent *event,
75 KisPaintOpSettings::OutlineMode outlineMode) override;
76
77
78 KisPaintingInformationBuilder* paintingInformationBuilder() const;
79 void resetHelper(KisToolFreehandHelper *helper);
80
81 bool supportsPaintingAssistants() const override;
82
83protected Q_SLOTS:
84
85 void explicitUpdateOutline();
86 void resetCursorStyle() override;
87 void setAssistant(bool assistant);
88 void setOnlyOneAssistantSnap(bool assistant);
89 void setSnapEraser(bool assistant);
90 void slotDoResizeBrush(qreal newSize);
91
92private:
94
99 QPointF adjustPosition(const QPointF& point, const QPointF& strokeBegin);
100 void updateTemporaryStraightRulerPreview(const QPointF &documentPoint, Qt::KeyboardModifiers modifiers);
101 void lockTemporaryStraightRuler(const QPointF &documentPoint, Qt::KeyboardModifiers modifiers);
102 bool temporaryStraightRulerActive() const;
103 QPointF temporaryStraightRulerOutlinePosition(const QPointF &documentPoint);
104
109 qreal calculatePerspective(const QPointF &documentPoint);
110
111private Q_SLOTS:
112 void updateMaskSyntheticEventsFromTouch();
113
114protected:
115 friend class KisViewManager;
116 friend class KisView;
117 KisSmoothingOptionsSP smoothingOptions() const;
118 bool m_assistant {false};
119 double m_magnetism {1.0};
120 bool m_only_one_assistant {true};
121 bool m_eraser_snapping {false};
122
123private:
124 KisPaintingInformationBuilder *m_infoBuilder {nullptr};
125 KisToolFreehandHelper *m_helper {nullptr};
126
129 qreal m_lastPaintOpSize {0.0};
131
132 bool m_paintopBasedSamplingInAction {false};
134
135 std::optional<KoPointerEventWrapper> m_beginAlternateActionEvent;
136};
137
138
139
140#endif // KIS_TOOL_FREEHAND_H_
QPoint m_initialGestureGlobalPoint
QPointF m_initialGestureDocPoint
std::optional< KoPointerEventWrapper > m_beginAlternateActionEvent
KisSignalCompressorWithParam< qreal > m_brushResizeCompressor
virtual KisOptimizedBrushOutline getOutlinePath(const QPointF &documentPos, const KoPointerEvent *event, KisPaintOpSettings::OutlineMode outlineMode)
void deactivate() override
int flags() const override
void activate(const QSet< KoShape * > &shapes) override
void deactivateAlternateAction(AlternateAction action) override
void endAlternateAction(KoPointerEvent *event, AlternateAction action) override
void continueAlternateAction(KoPointerEvent *event, AlternateAction action) override
void activateAlternateAction(AlternateAction action) override
void mouseMoveEvent(KoPointerEvent *event) override
void beginAlternateAction(KoPointerEvent *event, AlternateAction action) override
virtual bool wantsAutoScroll() const
virtual void resetCursorStyle()
Definition kis_tool.cc:613
virtual void beginPrimaryAction(KoPointerEvent *event)
Definition kis_tool.cc:431
virtual void endPrimaryAction(KoPointerEvent *event)
Definition kis_tool.cc:446
virtual void continuePrimaryAction(KoPointerEvent *event)
Definition kis_tool.cc:441
AlternateAction
Definition kis_tool.h:134
virtual bool primaryActionSupportsHiResEvents() const
Definition kis_tool.cc:451
virtual bool supportsPaintingAssistants() const
Definition kis_tool.cc:495