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 }