File indexing completed on 2024-05-12 15:58:44

0001 /*
0002  *  SPDX-FileCopyrightText: 2014 Dmitry Kazakov <dimula73@gmail.com>
0003  *
0004  *  SPDX-License-Identifier: GPL-2.0-or-later
0005  */
0006 
0007 #ifndef __KIS_SUSPEND_PROJECTION_UPDATES_STROKE_STRATEGY_H
0008 #define __KIS_SUSPEND_PROJECTION_UPDATES_STROKE_STRATEGY_H
0009 
0010 #include <KisRunnableBasedStrokeStrategy.h>
0011 
0012 #include <QScopedPointer>
0013 
0014 class KisSuspendProjectionUpdatesStrokeStrategy : public KisRunnableBasedStrokeStrategy
0015 {
0016 public:
0017     struct SharedData {
0018         KisProjectionUpdatesFilterCookie installedFilterCookie = {};
0019     };
0020     using SharedDataSP = QSharedPointer<SharedData>;
0021 
0022     struct SuspendFrameInvalidationHandle {
0023     public:
0024         SuspendFrameInvalidationHandle(class KisImageAnimationInterface* interface);
0025         ~SuspendFrameInvalidationHandle();
0026 
0027     private:
0028         KisImageAnimationInterface* m_interface;
0029     };
0030 
0031 
0032 public:
0033     KisSuspendProjectionUpdatesStrokeStrategy(KisImageWSP image, bool suspend, SharedDataSP sharedData);
0034     ~KisSuspendProjectionUpdatesStrokeStrategy() override;
0035 
0036     static QList<KisStrokeJobData*> createSuspendJobsData(KisImageWSP image);
0037     static QList<KisStrokeJobData*> createResumeJobsData(KisImageWSP image);
0038     static SharedDataSP createSharedData();
0039 
0040 private:
0041     void initStrokeCallback() override;
0042     void doStrokeCallback(KisStrokeJobData *data) override;
0043     void cancelStrokeCallback() override;
0044 
0045     void suspendStrokeCallback() override;
0046     void resumeStrokeCallback() override;
0047 
0048 
0049     void resumeAndIssueUpdates(bool dropUpdates);
0050 
0051 private:
0052     struct Private;
0053     const QScopedPointer<Private> m_d;
0054 };
0055 
0056 #endif /* __KIS_SUSPEND_PROJECTION_UPDATES_STROKE_STRATEGY_H */