File indexing completed on 2024-05-19 04:26:37

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 #include "kis_projection_updates_filter.h"
0014 
0015 class KisSuspendProjectionUpdatesStrokeStrategy : public KisRunnableBasedStrokeStrategy
0016 {
0017 public:
0018     struct SuspendUpdatesFilterInterface : public KisProjectionUpdatesFilter
0019     {
0020         virtual void addExplicitUIUpdateRect(const QRect &rc) = 0;
0021     };
0022 
0023     struct SharedData {
0024         KisProjectionUpdatesFilterCookie installedFilterCookie = {};
0025     };
0026     using SharedDataSP = QSharedPointer<SharedData>;
0027 
0028     struct SuspendFrameInvalidationHandle {
0029     public:
0030         SuspendFrameInvalidationHandle(class KisImageAnimationInterface* interface);
0031         ~SuspendFrameInvalidationHandle();
0032 
0033     private:
0034         KisImageAnimationInterface* m_interface;
0035     };
0036 
0037 
0038 public:
0039     KisSuspendProjectionUpdatesStrokeStrategy(KisImageWSP image, bool suspend, SharedDataSP sharedData);
0040     ~KisSuspendProjectionUpdatesStrokeStrategy() override;
0041 
0042     static QList<KisStrokeJobData*> createSuspendJobsData(KisImageWSP image);
0043     static QList<KisStrokeJobData*> createResumeJobsData(KisImageWSP image);
0044     static SharedDataSP createSharedData();
0045 
0046 private:
0047     void initStrokeCallback() override;
0048     void doStrokeCallback(KisStrokeJobData *data) override;
0049     void cancelStrokeCallback() override;
0050 
0051     void suspendStrokeCallback() override;
0052     void resumeStrokeCallback() override;
0053 
0054 private:
0055     struct Private;
0056     const QScopedPointer<Private> m_d;
0057 };
0058 
0059 #endif /* __KIS_SUSPEND_PROJECTION_UPDATES_STROKE_STRATEGY_H */