diff options
Diffstat (limited to 'src/quick/util')
-rw-r--r-- | src/quick/util/qquickanimation.cpp | 22 | ||||
-rw-r--r-- | src/quick/util/qquickanimation_p.h | 1 | ||||
-rw-r--r-- | src/quick/util/qquickimageprovider.cpp | 5 | ||||
-rw-r--r-- | src/quick/util/qquickimageprovider.h | 6 | ||||
-rw-r--r-- | src/quick/util/qquickimageprovider_p.h | 72 | ||||
-rw-r--r-- | src/quick/util/qquickpixmapcache.cpp | 19 | ||||
-rw-r--r-- | src/quick/util/qquickprofiler.cpp | 3 | ||||
-rw-r--r-- | src/quick/util/qquickprofiler_p.h | 2 | ||||
-rw-r--r-- | src/quick/util/qquickstate.cpp | 2 | ||||
-rw-r--r-- | src/quick/util/qquickstate_p_p.h | 4 | ||||
-rw-r--r-- | src/quick/util/qquicksvgparser.cpp | 3 | ||||
-rw-r--r-- | src/quick/util/qquickutilmodule.cpp | 3 | ||||
-rw-r--r-- | src/quick/util/util.pri | 1 |
13 files changed, 132 insertions, 11 deletions
diff --git a/src/quick/util/qquickanimation.cpp b/src/quick/util/qquickanimation.cpp index 9ee1a323e5..02be9daac0 100644 --- a/src/quick/util/qquickanimation.cpp +++ b/src/quick/util/qquickanimation.cpp @@ -234,6 +234,27 @@ QQmlProperty QQuickAbstractAnimationPrivate::createProperty(QObject *obj, const The corresponding handler is \c onStopped. */ +/*! + \qmlsignal QtQuick::Animation::finished() + \since 5.12 + + This signal is emitted when the animation has finished naturally. + + It is not emitted when \l running is set to \c false, nor for animations whose + \l loops property is set to \c Animation.Infinite. + + In addition, it is only emitted for top-level, standalone animations. It + will not be emitted for animations in a Behavior or Transition, or + animations that are part of an animation group. + + If \l alwaysRunToEnd is true, this signal will not be emitted until the + animation has completed its current iteration. + + The corresponding handler is \c onFinished. + + \sa stopped(), started(), running +*/ + void QQuickAbstractAnimation::setRunning(bool r) { Q_D(QQuickAbstractAnimation); @@ -656,6 +677,7 @@ void QQuickAbstractAnimationPrivate::animationFinished(QAbstractAnimationJob*) if (loopCount != 1) animationInstance->setLoopCount(loopCount); } + emit q->finished(); } QQuickAbstractAnimation::ThreadingModel QQuickAbstractAnimation::threadingModel() const diff --git a/src/quick/util/qquickanimation_p.h b/src/quick/util/qquickanimation_p.h index 2293f2597f..746cb938bd 100644 --- a/src/quick/util/qquickanimation_p.h +++ b/src/quick/util/qquickanimation_p.h @@ -126,6 +126,7 @@ Q_SIGNALS: void pausedChanged(bool); void alwaysRunToEndChanged(bool); void loopCountChanged(int); + Q_REVISION(12) void finished(); public Q_SLOTS: void restart(); diff --git a/src/quick/util/qquickimageprovider.cpp b/src/quick/util/qquickimageprovider.cpp index f7c8724318..5d7664433b 100644 --- a/src/quick/util/qquickimageprovider.cpp +++ b/src/quick/util/qquickimageprovider.cpp @@ -39,8 +39,10 @@ #include "qquickimageprovider.h" +#include "qquickimageprovider_p.h" #include "qquickpixmapcache_p.h" #include <QtQuick/private/qsgcontext_p.h> +#include <private/qqmlglobal_p.h> QT_BEGIN_NAMESPACE @@ -160,7 +162,10 @@ QQuickTextureFactory *QQuickTextureFactory::textureFactoryForImage(const QImage Constructs the image response */ QQuickImageResponse::QQuickImageResponse() + : QObject(*(new QQuickImageResponsePrivate)) { + qmlobject_connect(this, QQuickImageResponse, SIGNAL(finished()), + this, QQuickImageResponse, SLOT(_q_finished())); } /*! diff --git a/src/quick/util/qquickimageprovider.h b/src/quick/util/qquickimageprovider.h index 4f8193789a..82d0501697 100644 --- a/src/quick/util/qquickimageprovider.h +++ b/src/quick/util/qquickimageprovider.h @@ -69,6 +69,8 @@ public: static QQuickTextureFactory *textureFactoryForImage(const QImage &image); }; +class QQuickImageResponsePrivate; + class Q_QUICK_EXPORT QQuickImageResponse : public QObject { Q_OBJECT @@ -84,6 +86,10 @@ public Q_SLOTS: Q_SIGNALS: void finished(); + +private: + Q_DECLARE_PRIVATE(QQuickImageResponse) + Q_PRIVATE_SLOT(d_func(), void _q_finished()) }; class Q_QUICK_EXPORT QQuickImageProvider : public QQmlImageProviderBase diff --git a/src/quick/util/qquickimageprovider_p.h b/src/quick/util/qquickimageprovider_p.h new file mode 100644 index 0000000000..b5baf79319 --- /dev/null +++ b/src/quick/util/qquickimageprovider_p.h @@ -0,0 +1,72 @@ +/**************************************************************************** +** +** Copyright (C) 2016 The Qt Company Ltd. +** Contact: https://www.qt.io/licensing/ +** +** This file is part of the QtQuick module of the Qt Toolkit. +** +** $QT_BEGIN_LICENSE:LGPL$ +** Commercial License Usage +** Licensees holding valid commercial Qt licenses may use this file in +** accordance with the commercial license agreement provided with the +** Software or, alternatively, in accordance with the terms contained in +** a written agreement between you and The Qt Company. For licensing terms +** and conditions see https://www.qt.io/terms-conditions. For further +** information use the contact form at https://www.qt.io/contact-us. +** +** GNU Lesser General Public License Usage +** Alternatively, this file may be used under the terms of the GNU Lesser +** General Public License version 3 as published by the Free Software +** Foundation and appearing in the file LICENSE.LGPL3 included in the +** packaging of this file. Please review the following information to +** ensure the GNU Lesser General Public License version 3 requirements +** will be met: https://www.gnu.org/licenses/lgpl-3.0.html. +** +** GNU General Public License Usage +** Alternatively, this file may be used under the terms of the GNU +** General Public License version 2.0 or (at your option) the GNU General +** Public license version 3 or any later version approved by the KDE Free +** Qt Foundation. The licenses are as published by the Free Software +** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3 +** included in the packaging of this file. Please review the following +** information to ensure the GNU General Public License requirements will +** be met: https://www.gnu.org/licenses/gpl-2.0.html and +** https://www.gnu.org/licenses/gpl-3.0.html. +** +** $QT_END_LICENSE$ +** +****************************************************************************/ + +#ifndef QQUICKQQUICKIMAGEPROVIDER_P_H +#define QQUICKQQUICKIMAGEPROVIDER_P_H + +// +// W A R N I N G +// ------------- +// +// This file is not part of the Qt API. It exists purely as an +// implementation detail. This header file may change from version to +// version without notice, or even be removed. +// +// We mean it. +// + +#include <private/qtquickglobal_p.h> +#include <private/qobject_p.h> +#include <qquickimageprovider.h> + +QT_BEGIN_NAMESPACE + +class QQuickImageResponsePrivate : public QObjectPrivate +{ + Q_DECLARE_PUBLIC(QQuickImageResponse) +public: + bool finished = false; + + void _q_finished() { finished = true; } +}; + + +QT_END_NAMESPACE + +#endif // QQUICKQQUICKIMAGEPROVIDER_P_H diff --git a/src/quick/util/qquickpixmapcache.cpp b/src/quick/util/qquickpixmapcache.cpp index 4237ec3edf..0dd2a88ca1 100644 --- a/src/quick/util/qquickpixmapcache.cpp +++ b/src/quick/util/qquickpixmapcache.cpp @@ -39,6 +39,7 @@ #include "qquickpixmapcache_p.h" #include <qquickimageprovider.h> +#include "qquickimageprovider_p.h" #include <qqmlengine.h> #include <private/qqmlglobal_p.h> @@ -179,6 +180,8 @@ public: QQuickPixmapReaderThreadObject(QQuickPixmapReader *); void processJobs(); bool event(QEvent *e) override; +public slots: + void asyncResponseFinished(QQuickImageResponse *response); private slots: void networkRequestDone(); void asyncResponseFinished(); @@ -613,10 +616,15 @@ void QQuickPixmapReaderThreadObject::networkRequestDone() #endif } +void QQuickPixmapReaderThreadObject::asyncResponseFinished(QQuickImageResponse *response) +{ + reader->asyncResponseFinished(response); +} + void QQuickPixmapReaderThreadObject::asyncResponseFinished() { QQuickImageResponse *response = static_cast<QQuickImageResponse *>(sender()); - reader->asyncResponseFinished(response); + asyncResponseFinished(response); } void QQuickPixmapReader::processJobs() @@ -800,7 +808,14 @@ void QQuickPixmapReader::processJob(QQuickPixmapReply *runningJob, const QUrl &u response = asyncProvider->requestImageResponse(imageId(url), runningJob->requestSize); } - QObject::connect(response, SIGNAL(finished()), threadObject, SLOT(asyncResponseFinished())); + // Might be that the async provider was so quick it emitted the signal before we + // could connect to it. + if (static_cast<QQuickImageResponsePrivate*>(QObjectPrivate::get(response))->finished) { + QMetaObject::invokeMethod(threadObject, "asyncResponseFinished", + Qt::QueuedConnection, Q_ARG(QQuickImageResponse*, response)); + } else { + QObject::connect(response, SIGNAL(finished()), threadObject, SLOT(asyncResponseFinished())); + } asyncResponses.insert(response, runningJob); break; diff --git a/src/quick/util/qquickprofiler.cpp b/src/quick/util/qquickprofiler.cpp index bd9f04e562..decc6eac31 100644 --- a/src/quick/util/qquickprofiler.cpp +++ b/src/quick/util/qquickprofiler.cpp @@ -116,9 +116,8 @@ void QQuickProfiler::stopProfilingImpl() m_data.clear(); } -void QQuickProfiler::reportDataImpl(bool trackLocations) +void QQuickProfiler::reportDataImpl() { - Q_UNUSED(trackLocations); QMutexLocker lock(&m_dataMutex); emit dataReady(m_data); m_data.clear(); diff --git a/src/quick/util/qquickprofiler_p.h b/src/quick/util/qquickprofiler_p.h index d699ddf371..28b058c2e8 100644 --- a/src/quick/util/qquickprofiler_p.h +++ b/src/quick/util/qquickprofiler_p.h @@ -357,7 +357,7 @@ protected: void startProfilingImpl(quint64 features); void stopProfilingImpl(); - void reportDataImpl(bool trackLocations); + void reportDataImpl(); void setTimer(const QElapsedTimer &t); }; diff --git a/src/quick/util/qquickstate.cpp b/src/quick/util/qquickstate.cpp index b953ad1c7f..3ca6440784 100644 --- a/src/quick/util/qquickstate.cpp +++ b/src/quick/util/qquickstate.cpp @@ -222,7 +222,7 @@ bool QQuickState::isWhenKnown() const QQmlBinding *QQuickState::when() const { Q_D(const QQuickState); - return d->when; + return d->when.data(); } void QQuickState::setWhen(QQmlBinding *when) diff --git a/src/quick/util/qquickstate_p_p.h b/src/quick/util/qquickstate_p_p.h index f1bc24c558..61472b4d06 100644 --- a/src/quick/util/qquickstate_p_p.h +++ b/src/quick/util/qquickstate_p_p.h @@ -203,12 +203,12 @@ class QQuickStatePrivate : public QObjectPrivate public: QQuickStatePrivate() - : when(nullptr), named(false), inState(false), group(nullptr) {} + : named(false), inState(false), group(nullptr) {} typedef QList<QQuickSimpleAction> SimpleActionList; QString name; - QQmlBinding *when; + QQmlBinding::Ptr when; bool named; struct OperationGuard : public QQmlGuard<QQuickStateOperation> diff --git a/src/quick/util/qquicksvgparser.cpp b/src/quick/util/qquicksvgparser.cpp index 2bf9c121d3..0687913565 100644 --- a/src/quick/util/qquicksvgparser.cpp +++ b/src/quick/util/qquicksvgparser.cpp @@ -280,11 +280,8 @@ bool QQuickSvgParser::parsePathDataFast(const QString &dataStr, QPainterPath &pa ++str; QChar pathElem = *str; ++str; - QChar endc = *end; - *const_cast<QChar *>(end) = 0; // parseNumbersArray requires 0-termination that QStringRef cannot guarantee QVarLengthArray<qreal, 8> arg; parseNumbersArray(str, arg); - *const_cast<QChar *>(end) = endc; if (pathElem == QLatin1Char('z') || pathElem == QLatin1Char('Z')) arg.append(0);//dummy const qreal *num = arg.constData(); diff --git a/src/quick/util/qquickutilmodule.cpp b/src/quick/util/qquickutilmodule.cpp index b2e5b84cf4..31d4d4c437 100644 --- a/src/quick/util/qquickutilmodule.cpp +++ b/src/quick/util/qquickutilmodule.cpp @@ -132,4 +132,7 @@ void QQuickUtilModule::defineModule() qmlRegisterType<QQuickShortcut,9>("QtQuick", 2, 9, "Shortcut"); #endif + + qmlRegisterUncreatableType<QQuickAbstractAnimation, 12>("QtQuick", 2, 12, "Animation", + QQuickAbstractAnimation::tr("Animation is an abstract class")); } diff --git a/src/quick/util/util.pri b/src/quick/util/util.pri index edcb268cd9..c51f082d03 100644 --- a/src/quick/util/util.pri +++ b/src/quick/util/util.pri @@ -53,6 +53,7 @@ HEADERS += \ $$PWD/qquickfontloader_p.h \ $$PWD/qquickstyledtext_p.h \ $$PWD/qquickimageprovider.h \ + $$PWD/qquickimageprovider_p.h \ $$PWD/qquicksvgparser_p.h \ $$PWD/qquickvaluetypes_p.h \ $$PWD/qquickanimator_p.h \ |