Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package qt6-lottie for openSUSE:Factory checked in at 2026-05-28 17:26:05 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/qt6-lottie (Old) and /work/SRC/openSUSE:Factory/.qt6-lottie.new.1937 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "qt6-lottie" Thu May 28 17:26:05 2026 rev:41 rq:1355424 version:6.11.1 Changes: -------- --- /work/SRC/openSUSE:Factory/qt6-lottie/qt6-lottie.changes 2026-03-28 20:15:25.226547297 +0100 +++ /work/SRC/openSUSE:Factory/.qt6-lottie.new.1937/qt6-lottie.changes 2026-05-28 17:27:21.724769318 +0200 @@ -1,0 +2,6 @@ +Thu May 14 14:55:03 UTC 2026 - Christophe Marin <[email protected]> + +- Update to 6.11.1 + https://www.qt.io/blog/qt-6.11.1-released + +------------------------------------------------------------------- Old: ---- qtlottie-everywhere-src-6.11.0.tar.xz New: ---- qtlottie-everywhere-src-6.11.1.tar.xz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ qt6-lottie.spec ++++++ --- /var/tmp/diff_new_pack.8B6lQG/_old 2026-05-28 17:27:22.864816508 +0200 +++ /var/tmp/diff_new_pack.8B6lQG/_new 2026-05-28 17:27:22.868816674 +0200 @@ -16,7 +16,7 @@ # -%define real_version 6.11.0 +%define real_version 6.11.1 %define short_version 6.11 %define short_name qtlottie %define tar_name qtlottie-everywhere-src @@ -28,7 +28,7 @@ %endif # Name: qt6-lottie%{?pkg_suffix} -Version: 6.11.0 +Version: 6.11.1 Release: 0 Summary: QML API for rendering graphics and animation # LICENSE.GPL3-EXCEPT only applies to the conan recipe which is not used ++++++ qtlottie-everywhere-src-6.11.0.tar.xz -> qtlottie-everywhere-src-6.11.1.tar.xz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/.cmake.conf new/qtlottie-everywhere-src-6.11.1/.cmake.conf --- old/qtlottie-everywhere-src-6.11.0/.cmake.conf 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/.cmake.conf 2026-05-08 03:18:53.000000000 +0200 @@ -1,4 +1,4 @@ -set(QT_REPO_MODULE_VERSION "6.11.0") +set(QT_REPO_MODULE_VERSION "6.11.1") set(QT_REPO_MODULE_PRERELEASE_VERSION_SEGMENT "alpha1") set(QT_EXTRA_INTERNAL_TARGET_DEFINES "QT_NO_CONTEXTLESS_CONNECT=1" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/.tag new/qtlottie-everywhere-src-6.11.1/.tag --- old/qtlottie-everywhere-src-6.11.0/.tag 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/.tag 2026-05-08 03:18:53.000000000 +0200 @@ -1 +1 @@ -cb51162b42be1134961706a32942772a8cec61cf +a22c96958c14843a456a787e108e67bb07947142 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/dependencies.yaml new/qtlottie-everywhere-src-6.11.1/dependencies.yaml --- old/qtlottie-everywhere-src-6.11.0/dependencies.yaml 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/dependencies.yaml 2026-05-08 03:18:53.000000000 +0200 @@ -1,7 +1,7 @@ dependencies: ../qtbase: - ref: 8ba7ea4b77a4b8f1948760221e264917ddc9e1c8 + ref: 59c81a3c2247b821b9b84b4eb8d939b77e07e276 required: true ../qtdeclarative: - ref: e602a097ca314e9610b1fd3b7dbfa467a868731a + ref: a02bed441965ee1f18f856352c7d5ee5ba35d795 required: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/src/lottie/qlottiebase.cpp new/qtlottie-everywhere-src-6.11.1/src/lottie/qlottiebase.cpp --- old/qtlottie-everywhere-src-6.11.0/src/lottie/qlottiebase.cpp 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/src/lottie/qlottiebase.cpp 2026-05-08 03:18:53.000000000 +0200 @@ -246,12 +246,12 @@ else retVal = source->definition().value("v"_L1).toObject(); if (source->children().size() > 1) - qCWarning(lcLottieQtLottieParser) << "Effect source points" + qCInfo(lcLottieQtLottieParser) << "Effect source points" "to a group that has" "many children. The" "first is be picked"; } else { - qCWarning(lcLottieQtLottieParser) << "Failed to find specified effect" << effect; + qCInfo(lcLottieQtLottieParser) << "Failed to find specified effect" << effect; } // Let users of the json know that it is originated from expression, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/src/lottie/qlottiegfill.cpp new/qtlottie-everywhere-src-6.11.1/src/lottie/qlottiegfill.cpp --- old/qtlottie-everywhere-src-6.11.0/src/lottie/qlottiegfill.cpp 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/src/lottie/qlottiegfill.cpp 2026-05-08 03:18:53.000000000 +0200 @@ -111,6 +111,7 @@ return -1; if (!isAnimated) { + QMap<qreal, QVector4D> colorStops; QJsonArray colorArr = stops.value("k"_L1).toArray(); for (int i = 0; i < (elementCount * 4); i += 4) { // p denotes the color stop percentage @@ -118,59 +119,62 @@ colorVec[0] = colorArr.at(i + 1).toVariant().toFloat(); colorVec[1] = colorArr.at(i + 2).toVariant().toFloat(); colorVec[2] = colorArr.at(i + 3).toVariant().toFloat(); - // Set gradient stop position into w of the vector colorVec[3] = 1.0f; QLottieProperty4D<QVector4D> colorPos; colorPos.setValue(colorVec); + // The stop position is found in the first element of the vector qreal pos = colorArr.at(i + 0).toVariant().toFloat(); m_colors[pos] = colorPos; + colorStops.insert(pos, colorVec); } - QList<qreal> keys = m_colors.keys(); - std::sort(keys.begin(), keys.end()); - int keyIndex = 0; - for (int i = (elementCount * 4); i < colorArr.size(); i+= 2) { - qreal pos = colorArr.at(i).toVariant().toFloat(); - qreal opacity = colorArr.at(i + 1).toVariant().toFloat(); - if (m_colors.contains(pos)) { - QLottieProperty4D<QVector4D> colorVec = m_colors.value(pos); - QVector4D color = colorVec.value(); - color[3] = opacity; - colorVec.setValue(color); - m_colors[pos] = colorVec; - keyIndex++; - } else { - qreal pos0; - qreal pos1; - if (keyIndex == 0) { - pos0 = keys.value(0); - pos1 = keys.value(1); + + if (colorArr.size() > (elementCount * 4)) { + // The gradient has opacity stops; handle them + QMap<qreal, qreal> opacityStops; + for (int i = (elementCount * 4); i < colorArr.size(); i += 2) { + qreal pos = colorArr.at(i).toVariant().toFloat(); + qreal opacity = colorArr.at(i + 1).toVariant().toFloat(); + opacityStops.insert(pos, opacity); + } + QMap<qreal, qreal> uniqueOpacityStops(opacityStops); + + // First: add opacity to all existing color stops + for (auto [pos, color] : colorStops.asKeyValueRange()) { + qreal opacity = 1.0; + if (pos <= opacityStops.firstKey() || opacityStops.size() == 1) { + opacity = opacityStops.first(); + } else if (pos >= opacityStops.lastKey()) { + opacity = opacityStops.last(); } else { - pos0 = keys.value(keyIndex-1); - pos1 = keys.value(keyIndex); + auto it2 = opacityStops.lowerBound(pos); + Q_ASSERT(it2 != opacityStops.cbegin()); + auto it1(it2); + it1--; + qreal ratio = (pos - it1.key()) / (it2.key() - it1.key()); + opacity = it1.value() + ratio * (it2.value() - it1.value()); } + color[3] = opacity; + m_colors[pos].setValue(color); + uniqueOpacityStops.remove(pos); // will remove if position present, otherwise noop + } - if (pos1 > pos) { - QVector4D col0 = m_colors[pos0].value(); - QVector4D col1 = m_colors[pos1].value(); - qreal ratio = (pos - pos0) / (pos1 - pos0); - qreal r = col0[0] + ratio * (col1[0] - col0[0]); - qreal g = col0[1] + ratio * (col1[1] - col0[1]); - qreal b = col0[2] + ratio * (col1[2] - col0[2]); - QVector4D color = QVector4D(r, g, b, opacity); - QLottieProperty4D<QVector4D> colorPos; - colorPos.setValue(color); - m_colors[pos] = colorPos; + // Second: add new color stops for any unique opacity stop positions + for (auto [pos, opacity] : uniqueOpacityStops.asKeyValueRange()) { + QVector4D color; + if (pos <= colorStops.firstKey() || colorStops.size() == 1) { + color = colorStops.first(); + } else if (pos >= colorStops.lastKey()) { + color = colorStops.last(); } else { - QLottieProperty4D<QVector4D> colorVec = m_colors.value(pos1); - QVector4D color = colorVec.value(); - qreal opa0 = m_colors[pos1].value()[3]; - qreal ratio = (pos1 - pos0) / (pos - pos0); - qreal opa = opa0 + ratio * (opacity - opa0); - color[3] = opa; - colorVec.setValue(color); - m_colors[pos1] = colorVec; - keyIndex++; + auto it2 = colorStops.lowerBound(pos); + Q_ASSERT(it2 != colorStops.cbegin()); + auto it1(it2); + it1--; + qreal ratio = (pos - it1.key()) / (it2.key() - it1.key()); + color = it1.value() + ratio * (it2.value() - it1.value()); } + color[3] = opacity; + m_colors[pos].setValue(color); } } } else { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/src/lottie/qlottielayer.cpp new/qtlottie-everywhere-src-6.11.1/src/lottie/qlottielayer.cpp --- old/qtlottie-everywhere-src-6.11.0/src/lottie/qlottielayer.cpp 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/src/lottie/qlottielayer.cpp 2026-05-08 03:18:53.000000000 +0200 @@ -352,9 +352,10 @@ QJsonArray::const_iterator it = definition.constEnd(); while (it != definition.constBegin()) { // Create effects container if at least one effect found - if (!m_effects) { - m_effects = new QLottieBase; - effectRoot = m_effects; + if (!effectRoot) { + Q_ASSERT(!m_effects); + effectRoot = new QLottieBase; + m_effects = effectRoot; } it--; QJsonObject effect = (*it).toObject(); diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/src/qml/doc/qtlottieanimation.qdocconf new/qtlottie-everywhere-src-6.11.1/src/qml/doc/qtlottieanimation.qdocconf --- old/qtlottie-everywhere-src-6.11.0/src/qml/doc/qtlottieanimation.qdocconf 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/src/qml/doc/qtlottieanimation.qdocconf 2026-05-08 03:18:53.000000000 +0200 @@ -6,6 +6,9 @@ description = Lottie Player for Qt buildversion = Qt Lottie Animation | Commercial or GPLv3 +# No C++ API do document, prevent QDoc from searching for a module header +moduleheader = + headerdirs += ../.. sourcedirs += ../.. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/src/qml/doc/src/qt_target_qml_from_lottie.qdoc new/qtlottie-everywhere-src-6.11.1/src/qml/doc/src/qt_target_qml_from_lottie.qdoc --- old/qtlottie-everywhere-src-6.11.0/src/qml/doc/src/qt_target_qml_from_lottie.qdoc 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/src/qml/doc/src/qt_target_qml_from_lottie.qdoc 2026-05-08 03:18:53.000000000 +0200 @@ -8,7 +8,7 @@ \title qt_target_qml_from_lottie \keyword qt6_target_qml_from_lottie -\summary {Generates QML code based on an Lottie file.} +\summary {Generates QML code based on a Lottie file.} The command is defined in the \c LottieTools component of the \c Qt6 package, which can be loaded like this: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/qtlottie-everywhere-src-6.11.0/src/qml/doc/src/qtlottie.qdoc new/qtlottie-everywhere-src-6.11.1/src/qml/doc/src/qtlottie.qdoc --- old/qtlottie-everywhere-src-6.11.0/src/qml/doc/src/qtlottie.qdoc 2026-03-10 06:07:49.000000000 +0100 +++ new/qtlottie-everywhere-src-6.11.1/src/qml/doc/src/qtlottie.qdoc 2026-05-08 03:18:53.000000000 +0200 @@ -15,11 +15,11 @@ \l{lottietoqml} is included. This tool converts Lottie animations to QML. As a result, they can be rendered using the hardware-accelerated renderer in Qt Quick. - If the Lottie files are known at compile tome, you can also convert them to QML using the + If the Lottie files are known at compile time, you can also convert them to QML using the \l lottietoqml tool, or the \l{qt_target_qml_from_lottie} CMake command that wraps the tool. Finally, the \l{VectorImage} Qt Quick item can load Lottie format files directly. It converts - them to QML at runtime using the \ lottietoqml functionality in a plugin. + them to QML at runtime using the \l lottietoqml functionality in a plugin. \section1 Getting Started
