Krita Source Code Documentation
Loading...
Searching...
No Matches
kis_generator_stroke_strategy.cpp
Go to the documentation of this file.
1/*
2 * This file is part of Krita
3 *
4 * SPDX-FileCopyrightText: 2020 L. E. Segovia <amy@amyspark.me>
5 *
6 * SPDX-License-Identifier: GPL-2.0-or-later
7 */
10#include <kis_generator_layer.h>
13#include <kis_selection.h>
14#include <krita_utils.h>
15
17
28
30{
31 using namespace KritaUtils;
32
34
36
37 addJobBarrier(jobsData, nullptr);
38
39 for (const auto& rc: region) {
40 if (f->allowsSplittingIntoPatches()) {
41 QVector<QRect> tiles = splitRectIntoPatches(rc, optimalPatchSize());
42
43 for(const auto& tile: tiles) {
44 KisProcessingInformation dstCfg(dev, tile.topLeft(), KisSelectionSP());
45 addJobConcurrent(jobsData, [=]() {
46 f->generate(dstCfg, tile.size(), filterConfig, helper->updater());
47
48 // HACK ALERT!!!
49 // this avoids cyclic loop with KisRecalculateGeneratorLayerJob::run()
50 const_cast<KisGeneratorLayerSP &>(layer)->setDirtyWithoutUpdate({tile});
51
52 const_cast<QSharedPointer<boost::none_t> &>(cookie).clear();
53 });
54 }
55 } else {
56 KisProcessingInformation dstCfg(dev, rc.topLeft(), KisSelectionSP());
57
58 addJobSequential(jobsData, [=]() {
59 f->generate(dstCfg, rc.size(), filterConfig, helper->updater());
60
61 // HACK ALERT!!!
62 // this avoids cyclic loop with KisRecalculateGeneratorLayerJob::run()
63 const_cast<KisGeneratorLayerSP &>(layer)->setDirtyWithoutUpdate({rc});
64
65 const_cast<QSharedPointer<boost::none_t>&>(cookie).clear();
66 });
67 }
68 }
69
70 return jobsData;
71}
static QVector< KisStrokeJobData * > createJobsData(const KisGeneratorLayerSP layer, QSharedPointer< boost::none_t > cookie, const KisGeneratorSP f, const KisPaintDeviceSP dev, const QRegion &rc, const KisFilterConfigurationSP filterConfig)
void enableJob(JobType type, bool enable=true, KisStrokeJobData::Sequentiality sequentiality=KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::Exclusivity exclusivity=KisStrokeJobData::NORMAL)
void setClearsRedoOnStart(bool value)
void setRequestsOtherStrokesToEnd(bool value)
void setCanForgetAboutMe(bool value)
KUndo2MagicString kundo2_i18n(const char *text)