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