summaryrefslogtreecommitdiff
path: root/plugin/src/Caelestia/imageanalyser.hpp
diff options
context:
space:
mode:
author2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-24 01:37:53 +1000
committer2 * r + 2 * t <61896496+soramanew@users.noreply.github.com>2025-09-24 01:37:53 +1000
commit2ccd3a8662c46e1be9cfb21a8d60751c98e78065 (patch)
treeda9c846b547c32b5bd6a8a0df46fc6eb6a862d91 /plugin/src/Caelestia/imageanalyser.hpp
parentplayers: persist active player across reloads (diff)
downloadcaelestia-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.hpp61
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