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