1 /*
2 * Copyright (c) 2017 Dmitry Kazakov <dimula73@gmail.com>
3 *
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU General Public License as published by
6 * the Free Software Foundation; either version 2 of the License, or
7 * (at your option) any later version.
8 *
9 * This program is distributed in the hope that it will be useful,
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of
11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12 * GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License
15 * along with this program; if not, write to the Free Software
16 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
17 */
18
19 #include "KisRunnableBasedStrokeStrategy.h"
20
21 #include <QRunnable>
22 #include <functional>
23
24 #include "KisRunnableStrokeJobData.h"
25 #include "KisRunnableStrokeJobsInterface.h"
26
27 struct KisRunnableBasedStrokeStrategy::JobsInterface : public KisRunnableStrokeJobsInterface
28 {
JobsInterfaceKisRunnableBasedStrokeStrategy::JobsInterface29 JobsInterface(KisRunnableBasedStrokeStrategy *q)
30 : m_q(q)
31 {
32 }
33
34
addRunnableJobsKisRunnableBasedStrokeStrategy::JobsInterface35 void addRunnableJobs(const QVector<KisRunnableStrokeJobDataBase*> &list) {
36 QVector<KisStrokeJobData*> newList;
37
38 Q_FOREACH (KisRunnableStrokeJobDataBase *item, list) {
39 newList.append(item);
40 }
41
42 m_q->addMutatedJobs(newList);
43 }
44
45 private:
46 KisRunnableBasedStrokeStrategy *m_q;
47 };
48
49
KisRunnableBasedStrokeStrategy(const QLatin1String & id,const KUndo2MagicString & name)50 KisRunnableBasedStrokeStrategy::KisRunnableBasedStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name)
51 : KisSimpleStrokeStrategy(id, name),
52 m_jobsInterface(new JobsInterface(this))
53 {
54 }
55
KisRunnableBasedStrokeStrategy(const KisRunnableBasedStrokeStrategy & rhs)56 KisRunnableBasedStrokeStrategy::KisRunnableBasedStrokeStrategy(const KisRunnableBasedStrokeStrategy &rhs)
57 : KisSimpleStrokeStrategy(rhs),
58 m_jobsInterface(new JobsInterface(this))
59 {
60 }
61
~KisRunnableBasedStrokeStrategy()62 KisRunnableBasedStrokeStrategy::~KisRunnableBasedStrokeStrategy()
63 {
64 }
65
doStrokeCallback(KisStrokeJobData * data)66 void KisRunnableBasedStrokeStrategy::doStrokeCallback(KisStrokeJobData *data)
67 {
68 if (!data) return;
69
70 KisRunnableStrokeJobDataBase *runnable = dynamic_cast<KisRunnableStrokeJobDataBase*>(data);
71 if (!runnable) return;
72
73 runnable->run();
74 }
75
runnableJobsInterface() const76 KisRunnableStrokeJobsInterface *KisRunnableBasedStrokeStrategy::runnableJobsInterface() const
77 {
78 return m_jobsInterface.data();
79 }
80