diff options
| author | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-08-27 23:29:11 +1000 |
|---|---|---|
| committer | 2 * r + 2 * t <61896496+soramanew@users.noreply.github.com> | 2025-08-27 23:29:11 +1000 |
| commit | bec98e1fc5a25e68e3cc7bf7585c092a82a40633 (patch) | |
| tree | ea28691f78ee45c001d3230ef63370b22d8f3e7f /plugin | |
| parent | hypr: fix active window and window focus (#483) (diff) | |
| download | caelestia-shell-bec98e1fc5a25e68e3cc7bf7585c092a82a40633.tar.gz caelestia-shell-bec98e1fc5a25e68e3cc7bf7585c092a82a40633.tar.bz2 caelestia-shell-bec98e1fc5a25e68e3cc7bf7585c092a82a40633.zip | |
plugin: better getDominantColour
Use callback instead of setting prop
Diffstat (limited to 'plugin')
| -rw-r--r-- | plugin/src/Caelestia/cutils.cpp | 17 | ||||
| -rw-r--r-- | plugin/src/Caelestia/cutils.hpp | 4 |
2 files changed, 11 insertions, 10 deletions
diff --git a/plugin/src/Caelestia/cutils.cpp b/plugin/src/Caelestia/cutils.cpp index 30f38dd..d17cd56 100644 --- a/plugin/src/Caelestia/cutils.cpp +++ b/plugin/src/Caelestia/cutils.cpp @@ -91,11 +91,11 @@ bool CUtils::copyFile(const QUrl& source, const QUrl& target, bool overwrite) co return QFile::copy(source.toLocalFile(), target.toLocalFile()); } -void CUtils::getDominantColour(QQuickItem* item) const { - this->getDominantColour(item, 128, 128); +void CUtils::getDominantColour(QQuickItem* item, QJSValue callback) const { + this->getDominantColour(item, 128, 128, callback); } -void CUtils::getDominantColour(QQuickItem* item, int width, int height) const { +void CUtils::getDominantColour(QQuickItem* item, int width, int height, QJSValue callback) const { if (!item) { qWarning() << "CUtils::getDominantColour: an item is required"; return; @@ -109,7 +109,7 @@ void CUtils::getDominantColour(QQuickItem* item, int width, int height) const { QSharedPointer<QQuickItemGrabResult> grabResult = item->grabToImage(QSize(width, height)); QObject::connect(grabResult.data(), &QQuickItemGrabResult::ready, this, - [grabResult, item, this]() { + [grabResult, item, callback, this]() { QImage image = grabResult->image(); if (image.format() != QImage::Format_ARGB32) { @@ -154,10 +154,11 @@ void CUtils::getDominantColour(QQuickItem* item, int width, int height) const { } const QColor colour = QColor((0xFF << 24) | dominantColour); - - QMetaObject::invokeMethod(item, [item, colour]() { - item->setProperty("dominantColour", colour); - }, Qt::QueuedConnection); + if (callback.isCallable()) { + QMetaObject::invokeMethod(item, [item, callback, colour, this]() { + callback.call({ qmlEngine(this)->toScriptValue(QVariant::fromValue(colour)) }); + }, Qt::QueuedConnection); + } } ); } diff --git a/plugin/src/Caelestia/cutils.hpp b/plugin/src/Caelestia/cutils.hpp index 36120f4..08fad41 100644 --- a/plugin/src/Caelestia/cutils.hpp +++ b/plugin/src/Caelestia/cutils.hpp @@ -20,6 +20,6 @@ public: Q_INVOKABLE bool copyFile(const QUrl& source, const QUrl& target) const; Q_INVOKABLE bool copyFile(const QUrl& source, const QUrl& target, bool overwrite) const; - Q_INVOKABLE void getDominantColour(QQuickItem* item) const; - Q_INVOKABLE void getDominantColour(QQuickItem* item, int width, int height) const; + Q_INVOKABLE void getDominantColour(QQuickItem* item, QJSValue callback) const; + Q_INVOKABLE void getDominantColour(QQuickItem* item, int width, int height, QJSValue callback) const; }; |