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 */