File indexing completed on 2024-05-19 04:29:13

0001 /*
0002  *  SPDX-FileCopyrightText: 2023 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 #include "KisIdleTaskStrokeStrategy.h"
0007 
0008 
0009 KisIdleTaskStrokeStrategy::KisIdleTaskStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name)
0010     : KisRunnableBasedStrokeStrategy(id, name)
0011 {
0012     enableJob(KisSimpleStrokeStrategy::JOB_INIT, true, KisStrokeJobData::BARRIER, KisStrokeJobData::EXCLUSIVE);
0013     enableJob(KisSimpleStrokeStrategy::JOB_DOSTROKE);
0014     enableJob(KisSimpleStrokeStrategy::JOB_FINISH, true, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE);
0015     enableJob(KisSimpleStrokeStrategy::JOB_CANCEL, true, KisStrokeJobData::SEQUENTIAL, KisStrokeJobData::EXCLUSIVE);
0016 
0017     setRequestsOtherStrokesToEnd(false);
0018     setClearsRedoOnStart(false);
0019     setCanForgetAboutMe(true);
0020 }
0021 
0022 KisIdleTaskStrokeStrategy::~KisIdleTaskStrokeStrategy() = default;
0023 
0024 
0025 KisStrokeStrategy *KisIdleTaskStrokeStrategy::createLodClone(int levelOfDetail)
0026 {
0027     Q_UNUSED(levelOfDetail);
0028     /**
0029      * We do not generate preview for Instant Preview mode. Even though we
0030      * could do that, it is not very needed, because KisIdleWatcher ensures
0031      * that overview preview is generated only when all the background jobs
0032      * are completed.
0033      *
0034      * The only thing we should do about Instant Preview is to avoid resetting
0035      * LoDN planes, when the thumbnail is running. Therefore we should return
0036      * a fake noop strategy as our LoDN clone (that is a marker of non-legacy
0037      * stroke for the scheduler)
0038      */
0039     return new KisSimpleStrokeStrategy(QLatin1String("KisIdleTaskStrokeStrategy_FakeLodN"));
0040 }
0041 
0042 void KisIdleTaskStrokeStrategy::finishStrokeCallback()
0043 {
0044     emit sigIdleTaskFinished();
0045 }
0046 
0047 QWeakPointer<boost::none_t> KisIdleTaskStrokeStrategy::idleTaskCookie()
0048 {
0049     KIS_SAFE_ASSERT_RECOVER_RETURN_VALUE(!m_idleTaskCookie, m_idleTaskCookie);
0050     m_idleTaskCookie.reset(new boost::none_t(boost::none));
0051     return m_idleTaskCookie;
0052 }