Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_painter_based_stroke_strategy.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 __KIS_PAINTER_BASED_STROKE_STRATEGY_H
8#define __KIS_PAINTER_BASED_STROKE_STRATEGY_H
9
10#include <QVector>
11
14#include "kis_selection.h"
16
17class KisPainter;
19class KisTransaction;
24class KisUndoStore;
25
27{
28public:
29 KisPainterBasedStrokeStrategy(const QLatin1String &id,
30 const KUndo2MagicString &name,
31 KisResourcesSnapshotSP resources,
33
34 KisPainterBasedStrokeStrategy(const QLatin1String &id,
35 const KUndo2MagicString &name,
36 KisResourcesSnapshotSP resources,
37 KisFreehandStrokeInfo *strokeInfo);
38
40
41 void initStrokeCallback() override;
42 void finishStrokeCallback() override;
43 void cancelStrokeCallback() override;
44
45 void suspendStrokeCallback() override;
46 void resumeStrokeCallback() override;
47
48protected:
49 KisNodeSP targetNode() const;
50 KisPaintDeviceSP targetDevice() const;
51 KisSelectionSP activeSelection() const;
52
53 KisMaskedFreehandStrokePainter* maskedPainter(int strokeInfoId);
54 int numMaskedPainters() const;
55
57
70 bool needsMaskingUpdates() const;
71
78 QVector<KisRunnableStrokeJobData*> doMaskingBrushUpdates(const QVector<QRect> &rects);
79
80protected:
81
86 void setSupportsMaskingBrush(bool value);
87
92 bool supportsMaskingBrush() const;
93
94 void setSupportsIndirectPainting(bool value);
95 bool supportsIndirectPainting() const;
96
97 bool supportsContinuedInterstrokeData() const;
98 void setSupportsContinuedInterstrokeData(bool value);
99
100 bool supportsTimedMergeId() const;
101 void setSupportsTimedMergeId(bool value);
102
103protected:
105
106private:
107 void init();
108 void initPainters(KisPaintDeviceSP targetDevice, KisPaintDeviceSP maskingDevice,
109 KisSelectionSP selection,
110 bool hasIndirectPainting,
111 const QString &indirectPaintingCompositeOp);
112 void deletePainters();
113 inline int timedID(const QString &id){
114 return int(qHash(id));
115 }
116
117private:
122
123 QScopedPointer<KisTransaction> m_transaction;
124
125 QScopedPointer<KisMaskingBrushRenderer> m_maskingBrushRenderer;
126
129
130 QScopedPointer<KUndo2Command> m_autokeyCommand;
131
132 bool m_useMergeID {false};
133
134 bool m_supportsMaskingBrush {false};
135 bool m_supportsIndirectPainting {false};
136 bool m_supportsContinuedInterstrokeData {false};
137
139
141 FakeUndoData();
143 QScopedPointer<KisUndoStore> undoStore;
144 QScopedPointer<KisPostExecutionUndoAdapter> undoAdapter;
145 };
146 QScopedPointer<FakeUndoData> m_fakeUndoData;
147
148};
149
150#endif /* __KIS_PAINTER_BASED_STROKE_STRATEGY_H */
float value(const T *src, size_t ch)
uint qHash(const KoInputDevice &key)
KisIndirectPaintingSupport::FinalMergeSuspenderSP m_finalMergeSuspender
void setUndoEnabled(bool value)
QVector< KisFreehandStrokeInfo * > m_maskStrokeInfos
QScopedPointer< FakeUndoData > m_fakeUndoData
QVector< KisMaskedFreehandStrokePainter * > m_maskedPainters
QScopedPointer< KisMaskingBrushRenderer > m_maskingBrushRenderer
QScopedPointer< KUndo2Command > m_autokeyCommand
QVector< KisFreehandStrokeInfo * > m_strokeInfos
QScopedPointer< KisTransaction > m_transaction
QScopedPointer< KisPostExecutionUndoAdapter > undoAdapter