File indexing completed on 2025-03-09 04:09:58
0001 /* 0002 * SPDX-FileCopyrightText: 2017 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 0007 #include "KisDabRenderingExecutor.h" 0008 0009 #include "KisDabRenderingQueue.h" 0010 #include "KisDabRenderingQueueCache.h" 0011 #include "KisDabRenderingJob.h" 0012 #include "KisRenderedDab.h" 0013 #include "KisRunnableStrokeJobsInterface.h" 0014 #include "KisRunnableStrokeJobData.h" 0015 #include <tool/strokes/FreehandStrokeRunnableJobDataWithUpdate.h> 0016 0017 struct KisDabRenderingExecutor::Private 0018 { 0019 QScopedPointer<KisDabRenderingQueue> renderingQueue; 0020 KisRunnableStrokeJobsInterface *runnableJobsInterface; 0021 }; 0022 0023 KisDabRenderingExecutor::KisDabRenderingExecutor(const KoColorSpace *cs, 0024 KisDabCacheUtils::ResourcesFactory resourcesFactory, 0025 KisRunnableStrokeJobsInterface *runnableJobsInterface, 0026 KisMirrorOption *mirrorOption, 0027 KisPrecisionOption *precisionOption) 0028 : m_d(new Private) 0029 { 0030 m_d->runnableJobsInterface = runnableJobsInterface; 0031 0032 m_d->renderingQueue.reset( 0033 new KisDabRenderingQueue(cs, resourcesFactory)); 0034 0035 KisDabRenderingQueueCache *cache = new KisDabRenderingQueueCache(); 0036 cache->setMirrorPostprocessing(mirrorOption); 0037 cache->setPrecisionOption(precisionOption); 0038 0039 m_d->renderingQueue->setCacheInterface(cache); 0040 } 0041 0042 KisDabRenderingExecutor::~KisDabRenderingExecutor() 0043 { 0044 } 0045 0046 void KisDabRenderingExecutor::addDab(const KisDabCacheUtils::DabRequestInfo &request, 0047 qreal opacity, qreal flow) 0048 { 0049 KisDabRenderingJobSP job = m_d->renderingQueue->addDab(request, opacity, flow); 0050 if (job) { 0051 m_d->runnableJobsInterface->addRunnableJob( 0052 new FreehandStrokeRunnableJobDataWithUpdate( 0053 new KisDabRenderingJobRunner(job, m_d->renderingQueue.data(), m_d->runnableJobsInterface), 0054 KisStrokeJobData::CONCURRENT)); 0055 } 0056 } 0057 0058 QList<KisRenderedDab> KisDabRenderingExecutor::takeReadyDabs(bool returnMutableDabs, 0059 int oneTimeLimit, 0060 bool *someDabsLeft) 0061 { 0062 return m_d->renderingQueue->takeReadyDabs(returnMutableDabs, oneTimeLimit, someDabsLeft); 0063 } 0064 0065 bool KisDabRenderingExecutor::hasPreparedDabs() const 0066 { 0067 return m_d->renderingQueue->hasPreparedDabs(); 0068 } 0069 0070 qreal KisDabRenderingExecutor::averageDabRenderingTime() const 0071 { 0072 return m_d->renderingQueue->averageExecutionTime(); 0073 } 0074 0075 int KisDabRenderingExecutor::averageDabSize() const 0076 { 0077 return m_d->renderingQueue->averageDabSize(); 0078 }