diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-24 01:37:53 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-09-24 01:37:53 +1000 |
| commit | 2ccd3a8662c46e1be9cfb21a8d60751c98e78065 (patch) | |
| tree | da9c846b547c32b5bd6a8a0df46fc6eb6a862d91 /plugin/src/Caelestia/imageanalyser.hpp | |
| parent | players: persist active player across reloads (diff) | |
| download | caelestia-shell-2ccd3a8662c46e1be9cfb21a8d60751c98e78065.tar.gz caelestia-shell-2ccd3a8662c46e1be9cfb21a8d60751c98e78065.tar.bz2 caelestia-shell-2ccd3a8662c46e1be9cfb21a8d60751c98e78065.zip | |
plugin: add image analyser
Diffstat (limited to 'plugin/src/Caelestia/imageanalyser.hpp')
| -rw-r--r-- | plugin/src/Caelestia/imageanalyser.hpp | 61 |
1 files changed, 61 insertions, 0 deletions
diff --git a/plugin/src/Caelestia/imageanalyser.hpp b/plugin/src/Caelestia/imageanalyser.hpp new file mode 100644 index 0000000..bbea2b3 --- /dev/null +++ b/plugin/src/Caelestia/imageanalyser.hpp @@ -0,0 +1,61 @@ +#pragma once + +#include <QtQuick/qquickitem.h> +#include <qfuture.h> +#include <qfuturewatcher.h> +#include <qobject.h> +#include <qqmlintegration.h> + +namespace caelestia { + +class ImageAnalyser : public QObject { + Q_OBJECT + QML_ELEMENT + + Q_PROPERTY(QString source READ source WRITE setSource NOTIFY sourceChanged) + Q_PROPERTY(QQuickItem* sourceItem READ sourceItem WRITE setSourceItem NOTIFY sourceItemChanged) + Q_PROPERTY(int rescaleSize READ rescaleSize WRITE setRescaleSize NOTIFY rescaleSizeChanged) + Q_PROPERTY(QColor dominantColour READ dominantColour NOTIFY dominantColourChanged) + Q_PROPERTY(qreal luminance READ luminance NOTIFY luminanceChanged) + +public: + explicit ImageAnalyser(QObject* parent = nullptr); + + [[nodiscard]] QString source() const; + void setSource(const QString& source); + + [[nodiscard]] QQuickItem* sourceItem() const; + void setSourceItem(QQuickItem* sourceItem); + + [[nodiscard]] int rescaleSize() const; + void setRescaleSize(int rescaleSize); + + [[nodiscard]] QColor dominantColour() const; + [[nodiscard]] qreal luminance() const; + + Q_INVOKABLE void requestUpdate(); + +signals: + void sourceChanged(); + void sourceItemChanged(); + void rescaleSizeChanged(); + void dominantColourChanged(); + void luminanceChanged(); + +private: + using AnalyseResult = QPair<QColor, qreal>; + + QFutureWatcher<AnalyseResult>* const m_futureWatcher; + + QString m_source; + QQuickItem* m_sourceItem; + int m_rescaleSize; + + QColor m_dominantColour; + qreal m_luminance; + + void update(); + static void analyse(QPromise<AnalyseResult>& promise, const QImage& image, int rescaleSize); +}; + +} // namespace caelestia |