File indexing completed on 2024-05-19 04:26:43
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 addJobUniquelyConcurrent(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 addJobUniquelyConcurrent(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 template <typename Func, typename Job> 0086 void addJobSequentialNoCancel(QVector<Job*> &jobs, Func func) { 0087 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::SEQUENTIAL); 0088 data->setCancellable(false); 0089 jobs.append(data); 0090 } 0091 0092 template <typename Func, typename Job> 0093 void addJobSequentialExclusiveNoCancel(QVector<Job*> &jobs, Func func) { 0094 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE); 0095 data->setCancellable(false); 0096 jobs.append(data); 0097 } 0098 0099 0100 template <typename Func, typename Job> 0101 void addJobConcurrentNoCancel(QVector<Job*> &jobs, Func func) { 0102 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::CONCURRENT); 0103 data->setCancellable(false); 0104 jobs.append(data); 0105 } 0106 0107 template <typename Func, typename Job> 0108 void addJobBarrierNoCancel(QVector<Job*> &jobs, Func func) { 0109 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::BARRIER); 0110 data->setCancellable(false); 0111 jobs.append(data); 0112 } 0113 0114 template <typename Func, typename Job> 0115 void addJobBarrierExclusiveNoCancel(QVector<Job*> &jobs, Func func) { 0116 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::BARRIER, KisStrokeJobData::EXCLUSIVE); 0117 data->setCancellable(false); 0118 jobs.append(data); 0119 } 0120 0121 template <typename Func, typename Job> 0122 void addJobUniquelyConcurrentNoCancel(QVector<Job*> &jobs, Func func) { 0123 Job* data = new KisRunnableStrokeJobData(func, KisStrokeJobData::UNIQUELY_CONCURRENT); 0124 data->setCancellable(false); 0125 jobs.append(data); 0126 } 0127 0128 } 0129 0130 #endif // KISRUNNABLESTROKEJOBUTILS_H