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 */