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