File indexing completed on 2024-05-19 04:29:13
0001 /* 0002 * SPDX-FileCopyrightText: 2023 Dmitry Kazakov <dimula73@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-or-later 0005 */ 0006 #ifndef KISIDLETASKSTROKESTRATEGY_H 0007 #define KISIDLETASKSTROKESTRATEGY_H 0008 0009 #include <kritaui_export.h> 0010 0011 #include <functional> 0012 0013 #include <boost/none.hpp> 0014 #include <kis_types.h> 0015 #include <KisRunnableBasedStrokeStrategy.h> 0016 0017 /** 0018 * A base class for strategies used in "idle tasks". Such strategy 0019 * does **not** modify any undo stack and can be cancelled by the 0020 * image at any moment (e.g. when the user starts a real brush stroke). 0021 * 0022 * If you need to handle the cancellation event, implement 0023 * cancelStrokeCallback() function. 0024 */ 0025 class KRITAUI_EXPORT KisIdleTaskStrokeStrategy: public QObject, public KisRunnableBasedStrokeStrategy { 0026 Q_OBJECT 0027 public: 0028 KisIdleTaskStrokeStrategy(const QLatin1String &id, const KUndo2MagicString &name = KUndo2MagicString()); 0029 ~KisIdleTaskStrokeStrategy(); 0030 0031 KisStrokeStrategy* createLodClone(int levelOfDetail) override; 0032 QWeakPointer<boost::none_t> idleTaskCookie(); 0033 0034 protected: 0035 void finishStrokeCallback() override; 0036 0037 Q_SIGNALS: 0038 void sigIdleTaskFinished(); 0039 0040 private: 0041 QSharedPointer<boost::none_t> m_idleTaskCookie; 0042 }; 0043 0044 using KisIdleTaskStrokeStrategyFactory = std::function<KisIdleTaskStrokeStrategy*(KisImageSP image)>; 0045 0046 #endif // KISIDLETASKSTROKESTRATEGY_H