File indexing completed on 2024-05-12 15:58:42
0001 /* 0002 * SPDX-FileCopyrightText: 2011 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "kis_simple_stroke_strategy.h" 0008 0009 0010 /***************************************************************/ 0011 /* private class: SimpleStrokeJobStrategy */ 0012 /***************************************************************/ 0013 0014 class SimpleStrokeJobStrategy : public KisStrokeJobStrategy 0015 { 0016 public: 0017 SimpleStrokeJobStrategy(KisSimpleStrokeStrategy::JobType type, 0018 KisSimpleStrokeStrategy *parentStroke) 0019 : m_type(type), 0020 m_parentStroke(parentStroke) 0021 { 0022 } 0023 0024 void run(KisStrokeJobData *data) override { 0025 switch(m_type) { 0026 case KisSimpleStrokeStrategy::JOB_INIT: 0027 Q_UNUSED(data); 0028 m_parentStroke->initStrokeCallback(); 0029 break; 0030 case KisSimpleStrokeStrategy::JOB_FINISH: 0031 Q_UNUSED(data); 0032 m_parentStroke->finishStrokeCallback(); 0033 break; 0034 case KisSimpleStrokeStrategy::JOB_CANCEL: 0035 Q_UNUSED(data); 0036 m_parentStroke->cancelStrokeCallback(); 0037 break; 0038 case KisSimpleStrokeStrategy::JOB_DOSTROKE: 0039 m_parentStroke->doStrokeCallback(data); 0040 break; 0041 case KisSimpleStrokeStrategy::JOB_SUSPEND: 0042 m_parentStroke->suspendStrokeCallback(); 0043 break; 0044 case KisSimpleStrokeStrategy::JOB_RESUME: 0045 m_parentStroke->resumeStrokeCallback(); 0046 break; 0047 default: 0048 break; 0049 } 0050 } 0051 0052 QString debugId() const override { 0053 return QString("%1/%2") 0054 .arg(m_parentStroke->id()) 0055 .arg(KisSimpleStrokeStrategy::jobTypeToString(m_type)); 0056 } 0057 0058 private: 0059 KisSimpleStrokeStrategy::JobType m_type; 0060 KisSimpleStrokeStrategy *m_parentStroke; 0061 }; 0062 0063 0064 /***************************************************************/ 0065 /* KisSimpleStrokeStrategy */ 0066 /***************************************************************/ 0067 0068 KisSimpleStrokeStrategy::KisSimpleStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name) 0069 : KisStrokeStrategy(id, name), 0070 m_jobEnabled(NJOBS, false), 0071 m_jobSequentiality(NJOBS, KisStrokeJobData::SEQUENTIAL), 0072 m_jobExclusivity(NJOBS, KisStrokeJobData::NORMAL) 0073 { 0074 } 0075 0076 KisSimpleStrokeStrategy::KisSimpleStrokeStrategy(const KisSimpleStrokeStrategy &rhs) 0077 : KisStrokeStrategy(rhs), 0078 m_jobEnabled(rhs.m_jobEnabled), 0079 m_jobSequentiality(rhs.m_jobSequentiality), 0080 m_jobExclusivity(rhs.m_jobExclusivity) 0081 { 0082 } 0083 0084 void KisSimpleStrokeStrategy::enableJob(JobType type, bool enable, 0085 KisStrokeJobData::Sequentiality sequentiality, 0086 KisStrokeJobData::Exclusivity exclusivity) 0087 { 0088 m_jobEnabled[(int)type] = enable; 0089 m_jobSequentiality[(int)type] = sequentiality; 0090 m_jobExclusivity[(int)type] = exclusivity; 0091 } 0092 0093 KisStrokeJobStrategy* 0094 KisSimpleStrokeStrategy::createStrategy(JobType type) 0095 { 0096 KisStrokeJobStrategy *strategy = 0; 0097 0098 if(m_jobEnabled[(int)type]) { 0099 strategy = new SimpleStrokeJobStrategy(type, this); 0100 } 0101 0102 return strategy; 0103 } 0104 0105 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createInitStrategy() 0106 { 0107 return createStrategy(JOB_INIT); 0108 } 0109 0110 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createFinishStrategy() 0111 { 0112 return createStrategy(JOB_FINISH); 0113 } 0114 0115 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createCancelStrategy() 0116 { 0117 return createStrategy(JOB_CANCEL); 0118 } 0119 0120 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createDabStrategy() 0121 { 0122 return createStrategy(JOB_DOSTROKE); 0123 } 0124 0125 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createSuspendStrategy() 0126 { 0127 return createStrategy(JOB_SUSPEND); 0128 } 0129 0130 KisStrokeJobStrategy* KisSimpleStrokeStrategy::createResumeStrategy() 0131 { 0132 return createStrategy(JOB_RESUME); 0133 } 0134 0135 KisStrokeJobData* KisSimpleStrokeStrategy::createData(JobType type) 0136 { 0137 KisStrokeJobData::Sequentiality sequentiality = m_jobSequentiality[(int)type]; 0138 KisStrokeJobData::Exclusivity exclusivity = m_jobExclusivity[(int)type]; 0139 0140 return new KisStrokeJobData(sequentiality, exclusivity); 0141 } 0142 0143 KisStrokeJobData* KisSimpleStrokeStrategy::createInitData() 0144 { 0145 return createData(JOB_INIT); 0146 } 0147 0148 KisStrokeJobData* KisSimpleStrokeStrategy::createFinishData() 0149 { 0150 return createData(JOB_FINISH); 0151 } 0152 0153 KisStrokeJobData* KisSimpleStrokeStrategy::createCancelData() 0154 { 0155 return createData(JOB_CANCEL); 0156 } 0157 0158 KisStrokeJobData* KisSimpleStrokeStrategy::createSuspendData() 0159 { 0160 return createData(JOB_SUSPEND); 0161 } 0162 0163 KisStrokeJobData* KisSimpleStrokeStrategy::createResumeData() 0164 { 0165 return createData(JOB_RESUME); 0166 } 0167 0168 void KisSimpleStrokeStrategy::initStrokeCallback() 0169 { 0170 } 0171 0172 void KisSimpleStrokeStrategy::finishStrokeCallback() 0173 { 0174 } 0175 0176 void KisSimpleStrokeStrategy::cancelStrokeCallback() 0177 { 0178 } 0179 0180 void KisSimpleStrokeStrategy::doStrokeCallback(KisStrokeJobData *data) 0181 { 0182 Q_UNUSED(data); 0183 } 0184 0185 void KisSimpleStrokeStrategy::suspendStrokeCallback() 0186 { 0187 } 0188 0189 void KisSimpleStrokeStrategy::resumeStrokeCallback() 0190 { 0191 } 0192 0193 QLatin1String KisSimpleStrokeStrategy::jobTypeToString(KisSimpleStrokeStrategy::JobType type) 0194 { 0195 QLatin1String result; 0196 0197 switch (type) { 0198 case JOB_INIT: 0199 result = QLatin1String("init"); 0200 break; 0201 case JOB_DOSTROKE: 0202 result = QLatin1String("dostroke"); 0203 break; 0204 case JOB_FINISH: 0205 result = QLatin1String("finish"); 0206 break; 0207 case JOB_CANCEL: 0208 result = QLatin1String("cancel"); 0209 break; 0210 case JOB_SUSPEND: 0211 result = QLatin1String("suspend"); 0212 break; 0213 case JOB_RESUME: 0214 result = QLatin1String("resume"); 0215 break; 0216 case NJOBS: 0217 qFatal("Undefined stroke job type: %d", type); 0218 } 0219 0220 return result; 0221 }