File indexing completed on 2024-05-12 16:01:45
0001 /* 0002 * SPDX-FileCopyrightText: 2018 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #include "KisCloneDocumentStroke.h" 0007 0008 #include "KisDocument.h" 0009 #include "kis_layer_utils.h" 0010 0011 #include <QApplication> 0012 0013 0014 struct KRITAIMAGE_NO_EXPORT KisCloneDocumentStroke::Private 0015 { 0016 Private(KisDocument *_document) 0017 : document(_document) 0018 { 0019 } 0020 0021 KisDocument *document = 0; 0022 }; 0023 0024 KisCloneDocumentStroke::KisCloneDocumentStroke(KisDocument *document) 0025 : KisSimpleStrokeStrategy(QLatin1String("clone-document-stroke"), kundo2_i18n("Clone Document")), 0026 m_d(new Private(document)) 0027 { 0028 setClearsRedoOnStart(false); 0029 setRequestsOtherStrokesToEnd(false); 0030 setNeedsExplicitCancel(true); 0031 enableJob(JOB_INIT, true, KisStrokeJobData::BARRIER, KisStrokeJobData::EXCLUSIVE); 0032 enableJob(JOB_FINISH, true, KisStrokeJobData::BARRIER, KisStrokeJobData::EXCLUSIVE); 0033 enableJob(JOB_CANCEL, true, KisStrokeJobData::SEQUENTIAL); 0034 } 0035 0036 KisCloneDocumentStroke::~KisCloneDocumentStroke() 0037 { 0038 } 0039 0040 void KisCloneDocumentStroke::initStrokeCallback() 0041 { 0042 KisLayerUtils::forceAllDelayedNodesUpdate(m_d->document->image()->root()); 0043 } 0044 0045 void KisCloneDocumentStroke::finishStrokeCallback() 0046 { 0047 KisDocument *doc = m_d->document->clone(); 0048 doc->moveToThread(qApp->thread()); 0049 emit sigDocumentCloned(doc); 0050 } 0051 0052 void KisCloneDocumentStroke::cancelStrokeCallback() 0053 { 0054 emit sigCloningCancelled(); 0055 }