Krita Source Code Documentation
Loading...
Searching...
No Matches
move_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 __MOVE_STROKE_STRATEGY_H
8#define __MOVE_STROKE_STRATEGY_H
9
10#include <QHash>
11#include <QObject>
12
13#include "kritaui_export.h"
15#include "kis_types.h"
16#include "kis_lod_transform.h"
17#include <QElapsedTimer>
20#include "kis_transaction.h"
21
22#include <memory>
23#include <unordered_map>
24
27
28
29class KRITAUI_EXPORT MoveStrokeStrategy : public QObject, public KisStrokeStrategyUndoCommandBased
30{
31 Q_OBJECT
32public:
33 class KRITAUI_EXPORT Data : public KisStrokeJobData {
34 public:
35 Data(QPoint _offset);
36 KisStrokeJobData* createLodClone(int levelOfDetail) override;
37
38 QPoint offset;
39
40 private:
41 Data(const Data &rhs, int levelOfDetail);
42 };
43
44 class KRITAUI_EXPORT PickLayerData : public KisStrokeJobData {
45 public:
46 PickLayerData(QPoint _pos);
47
48 KisStrokeJobData* createLodClone(int levelOfDetail) override;
49
50 QPoint pos;
51
52 private:
53 PickLayerData(const PickLayerData &rhs, int levelOfDetail);
54 };
55
56
58 {
59 BarrierUpdateData(bool forceUpdate);
60 KisStrokeJobData* createLodClone(int levelOfDetail) override;
61 protected:
62 BarrierUpdateData(const BarrierUpdateData &rhs, int levelOfDetail);
63 };
64
65public:
67 KisUpdatesFacade *updatesFacade,
68 KisStrokeUndoFacade *undoFacade);
69
71 KisUpdatesFacade *updatesFacade,
72 KisStrokeUndoFacade *undoFacade);
73
74 ~MoveStrokeStrategy() override;
75
76 void initStrokeCallback() override;
77 void finishStrokeCallback() override;
78 void cancelStrokeCallback() override;
79 void doStrokeCallback(KisStrokeJobData *data) override;
80
81 KisStrokeStrategy* createLodClone(int levelOfDetail) override;
82
83Q_SIGNALS:
84 void sigHandlesRectCalculated(const QRect &handlesRect);
86 void sigLayersPicked(const KisNodeList &nodes);
87
88private:
89 MoveStrokeStrategy(const MoveStrokeStrategy &rhs, int lod);
91 void setUpdatesEnabled(bool value);
92private:
93 void doCanvasUpdate(bool forceUpdate = false);
94 void tryPostUpdateJob(bool forceUpdate);
95
96private:
97 struct Private;
98 QScopedPointer<Private> m_d;
99
103 QSet<KisNodeSP> m_blacklistedNodes;
104 KisUpdatesFacade *m_updatesFacade {nullptr};
106 QHash<KisNodeSP, QRect> m_dirtyRects;
107 bool m_updatesEnabled {true};
108
109 QElapsedTimer m_updateTimer;
110 bool m_hasPostponedJob {false};
111 const int m_updateInterval {30};
112
113 template <typename Functor>
114 void recursiveApplyNodes(KisNodeList nodes, Functor &&func);
115};
116
117#endif /* __MOVE_STROKE_STRATEGY_H */
float value(const T *src, size_t ch)
void doStrokeCallback(KisStrokeJobData *data) override
virtual KisStrokeStrategy * createLodClone(int levelOfDetail)
KisNodeSelectionRecipe m_requestedNodeSelection
void sigStrokeStartedEmpty()
void setUndoEnabled(bool value)
QHash< KisNodeSP, QRect > m_dirtyRects
void sigLayersPicked(const KisNodeList &nodes)
QScopedPointer< Private > m_d
void sigHandlesRectCalculated(const QRect &handlesRect)
QSet< KisNodeSP > m_blacklistedNodes
QSharedPointer< std::pair< KisNodeList, QSet< KisNodeSP > > > m_sharedNodes