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