File indexing completed on 2024-05-12 15:58:52
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "KisRunnableBasedStrokeStrategy.h" 0008 0009 #include <QRunnable> 0010 #include <functional> 0011 0012 #include "KisRunnableStrokeJobData.h" 0013 #include "KisRunnableStrokeJobsInterface.h" 0014 0015 struct KisRunnableBasedStrokeStrategy::JobsInterface : public KisRunnableStrokeJobsInterface 0016 { 0017 JobsInterface(KisRunnableBasedStrokeStrategy *q) 0018 : m_q(q) 0019 { 0020 } 0021 0022 void addRunnableJobs( 0023 const QVector<KisRunnableStrokeJobDataBase *> &list) override 0024 { 0025 QVector<KisStrokeJobData*> newList; 0026 0027 Q_FOREACH (KisRunnableStrokeJobDataBase *item, list) { 0028 newList.append(item); 0029 } 0030 0031 m_q->addMutatedJobs(newList); 0032 } 0033 0034 private: 0035 KisRunnableBasedStrokeStrategy *m_q; 0036 }; 0037 0038 0039 KisRunnableBasedStrokeStrategy::KisRunnableBasedStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name) 0040 : KisSimpleStrokeStrategy(id, name), 0041 m_jobsInterface(new JobsInterface(this)) 0042 { 0043 } 0044 0045 KisRunnableBasedStrokeStrategy::KisRunnableBasedStrokeStrategy(const KisRunnableBasedStrokeStrategy &rhs) 0046 : KisSimpleStrokeStrategy(rhs), 0047 m_jobsInterface(new JobsInterface(this)) 0048 { 0049 } 0050 0051 KisRunnableBasedStrokeStrategy::~KisRunnableBasedStrokeStrategy() 0052 { 0053 } 0054 0055 void KisRunnableBasedStrokeStrategy::doStrokeCallback(KisStrokeJobData *data) 0056 { 0057 if (!data) return; 0058 0059 KisRunnableStrokeJobDataBase *runnable = dynamic_cast<KisRunnableStrokeJobDataBase*>(data); 0060 if (!runnable) return; 0061 0062 runnable->run(); 0063 } 0064 0065 KisRunnableStrokeJobsInterface *KisRunnableBasedStrokeStrategy::runnableJobsInterface() const 0066 { 0067 return m_jobsInterface.data(); 0068 }