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 }