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 }