File indexing completed on 2024-05-12 15:58:43
0001 /* 0002 * SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #ifndef __KIS_STROKE_JOB_H 0008 #define __KIS_STROKE_JOB_H 0009 0010 #include "kis_runnable_with_debug_name.h" 0011 #include "kis_stroke_job_strategy.h" 0012 0013 class KisStrokeJob : public KisRunnableWithDebugName 0014 { 0015 public: 0016 KisStrokeJob(KisStrokeJobStrategy *strategy, 0017 KisStrokeJobData *data, 0018 int levelOfDetail, 0019 bool isOwnJob) 0020 : m_dabStrategy(strategy), 0021 m_dabData(data), 0022 m_levelOfDetail(levelOfDetail), 0023 m_isOwnJob(isOwnJob) 0024 { 0025 } 0026 0027 ~KisStrokeJob() override { 0028 delete m_dabData; 0029 } 0030 0031 void run() override { 0032 m_dabStrategy->run(m_dabData); 0033 } 0034 0035 KisStrokeJobData::Sequentiality sequentiality() const { 0036 return m_dabData ? m_dabData->sequentiality() : KisStrokeJobData::SEQUENTIAL; 0037 } 0038 0039 bool isSequential() const { 0040 // Default value is 'SEQUENTIAL' 0041 return m_dabData ? m_dabData->isSequential() : true; 0042 } 0043 0044 bool isBarrier() const { 0045 // Default value is simply 'SEQUENTIAL', *not* 'BARRIER' 0046 return m_dabData ? m_dabData->isBarrier() : false; 0047 } 0048 0049 bool isExclusive() const { 0050 // Default value is 'NORMAL' 0051 return m_dabData ? m_dabData->isExclusive() : false; 0052 } 0053 0054 int levelOfDetail() const { 0055 return m_dabData && m_dabData->levelOfDetailOverride() >= 0 ? 0056 m_dabData->levelOfDetailOverride() : m_levelOfDetail; 0057 } 0058 0059 bool isCancellable() const { 0060 return m_isOwnJob && 0061 (!m_dabData || m_dabData->isCancellable()); 0062 } 0063 0064 bool isOwnJob() const { 0065 return m_isOwnJob; 0066 } 0067 0068 QString debugName() const override { 0069 return m_dabStrategy->debugId(); 0070 } 0071 0072 private: 0073 // for testing use only, do not use in real code 0074 friend QString getJobName(KisStrokeJob *job); 0075 friend QString getCommandName(KisStrokeJob *job); 0076 friend int cancelSeqNo(KisStrokeJob *job); 0077 0078 KisStrokeJobStrategy* testingGetDabStrategy() { 0079 return m_dabStrategy; 0080 } 0081 0082 KisStrokeJobData* testingGetDabData() { 0083 return m_dabData; 0084 } 0085 0086 private: 0087 // Shared between different jobs 0088 KisStrokeJobStrategy *m_dabStrategy; 0089 0090 // Owned by the job 0091 KisStrokeJobData *m_dabData; 0092 0093 int m_levelOfDetail; 0094 bool m_isOwnJob; 0095 }; 0096 0097 #endif /* __KIS_STROKE_JOB_H */