File indexing completed on 2024-06-23 04:26:23

0001 /*
0002  *  SPDX-FileCopyrightText: 2020 Agata Cacko <tamtamy.tymona@gmail.com>
0003  *  SPDX-FileCopyrightText: 2023 Dmitry Kazakov <dimula73@gmail.com>
0004  *
0005  *  SPDX-License-Identifier: GPL-2.0-or-later
0006  */
0007 #ifndef HISTOGRAMCOMPUTATIONSTROKESTRATEGY_H
0008 #define HISTOGRAMCOMPUTATIONSTROKESTRATEGY_H
0009 
0010 #include <KisIdleTaskStrokeStrategy.h>
0011 #include <vector>
0012 
0013 class KoColorSpace;
0014 
0015 
0016 using HistVector = std::vector<std::vector<quint32> >; //Don't use QVector here - it's too slow for this purpose
0017 
0018 struct HistogramData
0019 {
0020     HistVector bins;
0021     const KoColorSpace* colorSpace {0};
0022 };
0023 Q_DECLARE_METATYPE(HistogramData)
0024 
0025 
0026 class HistogramComputationStrokeStrategy : public KisIdleTaskStrokeStrategy
0027 {
0028     Q_OBJECT
0029 public:
0030     HistogramComputationStrokeStrategy(KisImageSP image);
0031     ~HistogramComputationStrokeStrategy() override;
0032 
0033 private:
0034     void initStrokeCallback() override;
0035     void doStrokeCallback(KisStrokeJobData *data) override;
0036     void finishStrokeCallback() override;
0037 
0038     void initiateVector(HistVector &vec, const KoColorSpace* colorSpace);
0039 
0040 Q_SIGNALS:
0041     //Emitted when thumbnail is updated and overviewImage is fully generated.
0042     void computationResultReady(HistogramData data);
0043 
0044 private:
0045     struct Private;
0046     const QScopedPointer<Private> m_d;
0047 };
0048 
0049 #endif // HISTOGRAMCOMPUTATIONSTROKESTRATEGY_H