Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_stroke.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_STROKE_H
8#define __KIS_STROKE_H
9
10#include <QQueue>
11#include <QScopedPointer>
12
13#include <kis_types.h>
14#include "kritaimage_export.h"
15#include "kis_stroke_job.h"
16
19
20
21class KRITAIMAGE_EXPORT KisStroke
22{
23public:
24 enum Type {
29 RESUME
30 };
31
32public:
33 KisStroke(KisStrokeStrategy *strokeStrategy, Type type = LEGACY, int levelOfDetail = 0);
34 ~KisStroke();
35
36 void addJob(KisStrokeJobData *data);
37 void addMutatedJobs(const QVector<KisStrokeJobData *> list);
38
39 KUndo2MagicString name() const;
40 QString id() const;
41
42 bool hasJobs() const;
43 qint32 numJobs() const;
44 KisStrokeJob* popOneJob();
45
46 void endStroke();
47 void cancelStroke();
48
49 bool canCancel() const;
50
51 bool supportsSuspension();
52 void suspendStroke(KisStrokeSP recipient);
53
54 bool isInitialized() const;
55 bool isEnded() const;
56 bool isCancelled() const;
57
58 bool isExclusive() const;
59 bool supportsWrapAroundMode() const;
60 int worksOnLevelOfDetail() const;
61 bool canForgetAboutMe() const;
62 bool isAsynchronouslyCancellable() const;
63 bool clearsRedoOnStart() const;
64 qreal balancingRatioOverride() const;
65
66 KisStrokeJobData::Sequentiality nextJobSequentiality() const;
67
68 int nextJobLevelOfDetail() const;
69
70 void setLodBuddy(KisStrokeSP buddy);
71 KisStrokeSP lodBuddy() const;
72
73 Type type() const;
74
75private:
76 void enqueue(KisStrokeJobStrategy *strategy,
77 KisStrokeJobData *data);
78
79 // for suspend/resume jobs
80 void prepend(KisStrokeJobStrategy *strategy,
81 KisStrokeJobData *data,
82 int levelOfDetail,
83 bool isOwnJob);
84
85 KisStrokeJob* dequeue();
86
87 void clearQueueOnCancel();
88 bool sanityCheckAllJobsAreCancellable() const;
89
90private:
91 // for testing use only, do not use in real code
92 friend class KisStrokeTest;
93 friend class KisStrokeStrategyUndoCommandBasedTest;
94 QQueue<KisStrokeJob*>& testingGetQueue() {
95 return m_jobsQueue;
96 }
97
98private:
99 // the strategies are owned by the stroke
100 QScopedPointer<KisStrokeStrategy> m_strokeStrategy;
101 QScopedPointer<KisStrokeJobStrategy> m_initStrategy;
102 QScopedPointer<KisStrokeJobStrategy> m_dabStrategy;
103 QScopedPointer<KisStrokeJobStrategy> m_cancelStrategy;
104 QScopedPointer<KisStrokeJobStrategy> m_finishStrategy;
105 QScopedPointer<KisStrokeJobStrategy> m_suspendStrategy;
106 QScopedPointer<KisStrokeJobStrategy> m_resumeStrategy;
107
108 QQueue<KisStrokeJob*> m_jobsQueue;
112 bool m_isCancelled; // cancelled strokes are always 'ended' as well
113
117};
118
119#endif /* __KIS_STROKE_H */
QScopedPointer< KisStrokeJobStrategy > m_initStrategy
Definition kis_stroke.h:101
QScopedPointer< KisStrokeStrategy > m_strokeStrategy
Definition kis_stroke.h:100
QScopedPointer< KisStrokeJobStrategy > m_resumeStrategy
Definition kis_stroke.h:106
Type m_type
Definition kis_stroke.h:115
bool m_isCancelled
Definition kis_stroke.h:112
QScopedPointer< KisStrokeJobStrategy > m_finishStrategy
Definition kis_stroke.h:104
KisStrokeSP m_lodBuddy
Definition kis_stroke.h:116
QScopedPointer< KisStrokeJobStrategy > m_cancelStrategy
Definition kis_stroke.h:103
QScopedPointer< KisStrokeJobStrategy > m_dabStrategy
Definition kis_stroke.h:102
QQueue< KisStrokeJob * > m_jobsQueue
Definition kis_stroke.h:108
QScopedPointer< KisStrokeJobStrategy > m_suspendStrategy
Definition kis_stroke.h:105
bool m_strokeInitialized
Definition kis_stroke.h:109
QQueue< KisStrokeJob * > & testingGetQueue()
Definition kis_stroke.h:94
bool m_strokeSuspended
Definition kis_stroke.h:111
int m_worksOnLevelOfDetail
Definition kis_stroke.h:114
bool m_strokeEnded
Definition kis_stroke.h:110