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 #ifndef KISRUNNABLESTROKEJOBUTILS_H 0008 #define KISRUNNABLESTROKEJOBUTILS_H 0009 0010 #include <QVector> 0011 0012 #include "kis_stroke_job_strategy.h" 0013 #include "KisRunnableStrokeJobData.h" 0014 0015 namespace KritaUtils 0016 { 0017 0018 template <typename Func, typename Job> 0019 void addJobSequential(QVector<Job*> &jobs, Func func) { 0020 jobs.append(new KisRunnableStrokeJobData(func, KisStrokeJobData::SEQUENTIAL)); 0021 } 0022 0023 template <typename Func, typename Job> 0024 void addJobSequentialExclusive(QVector<Job*> &jobs, Func func) { 0025 jobs.append(new KisRunnableStrokeJobData(func, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE)); 0026 } 0027 0028 0029 template <typename Func, typename Job> 0030 void addJobConcurrent(QVector<Job*> &jobs, Func func) { 0031 jobs.append(new KisRunnableStrokeJobData(func, KisStrokeJobData::CONCURRENT)); 0032 } 0033 0034 template <typename Func, typename Job> 0035 void addJobBarrier(QVector<Job*> &jobs, Func func) { 0036 jobs.append(new KisRunnableStrokeJobData(func, KisStrokeJobData::BARRIER)); 0037 } 0038 0039 template <typename Func, typename Job> 0040 void addJobBarrierExclusive(QVector<Job*> &jobs, Func func) { 0041 jobs.append(new KisRunnableStrokeJobData(func, KisStrokeJobData::BARRIER, KisStrokeJobData::EXCLUSIVE)); 0042 } 0043 0044 template <typename Func, typename Job> 0045 void addJobUniquelyCuncurrent(QVector<Job*> &jobs, Func func) { 0046 jobs.append(new KisRunnableStrokeJobData(func, KisStrokeJobData::UNIQUELY_CONCURRENT)); 0047 } 0048 0049 template <typename Func, typename Job> 0050 void addJobSequential(QVector<Job*> &jobs, int lod, Func func) { 0051 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::SEQUENTIAL); 0052 data->setLevelOfDetailOverride(lod); 0053 jobs.append(data); 0054 } 0055 0056 template <typename Func, typename Job> 0057 void addJobSequentialExclusive(QVector<Job*> &jobs, int lod, Func func) { 0058 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE); 0059 data->setLevelOfDetailOverride(lod); 0060 jobs.append(data); 0061 } 0062 0063 template <typename Func, typename Job> 0064 void addJobConcurrent(QVector<Job*> &jobs, int lod, Func func) { 0065 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::CONCURRENT); 0066 data->setLevelOfDetailOverride(lod); 0067 jobs.append(data); 0068 } 0069 0070 template <typename Func, typename Job> 0071 void addJobBarrier(QVector<Job*> &jobs, int lod, Func func) { 0072 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::BARRIER); 0073 data->setLevelOfDetailOverride(lod); 0074 jobs.append(data); 0075 } 0076 0077 template <typename Func, typename Job> 0078 void addJobUniquelyCuncurrent(QVector<Job*> &jobs, int lod, Func func) { 0079 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::UNIQUELY_CONCURRENT); 0080 data->setLevelOfDetailOverride(lod); 0081 jobs.append(data); 0082 } 0083 0084 } 0085 0086 #endif // KISRUNNABLESTROKEJOBUTILS_H