diff options
author | Vladimir Belyavsky <belyavskyv@gmail.com> | 2024-05-07 18:26:21 +0300 |
---|---|---|
committer | Vladimir Belyavsky <belyavskyv@gmail.com> | 2024-05-08 19:04:02 +0300 |
commit | a5edb49c8fe8ae72aaaf7fed3a3f27b3d78ea9cd (patch) | |
tree | 5fefdfd284fafd6a60dd4e4fec482fa41667fc91 /src/quick | |
parent | 8764f4a72b45edc15894703ec576471f9e758ae0 (diff) |
QQuickStyledTextImgTag: hold QQuickPixmap as smart pointer
Use QScopedPointer for QQuickPixmap member of QQuickStyledTextImgTag
instead of holding it as a raw pointer. This way we make it a little
safer to use and can clean up the code a bit.
Change-Id: I98ebbe7892d4019ad305d8087bd195071fa868a4
Reviewed-by: Eskil Abrahamsen Blomfeldt <eskil.abrahamsen-blomfeldt@qt.io>
Diffstat (limited to 'src/quick')
-rw-r--r-- | src/quick/items/qquicktext.cpp | 11 | ||||
-rw-r--r-- | src/quick/util/qquickstyledtext.cpp | 5 | ||||
-rw-r--r-- | src/quick/util/qquickstyledtext_p.h | 8 |
3 files changed, 10 insertions, 14 deletions
diff --git a/src/quick/items/qquicktext.cpp b/src/quick/items/qquicktext.cpp index 760325ce15..af3fe3d1d4 100644 --- a/src/quick/items/qquicktext.cpp +++ b/src/quick/items/qquicktext.cpp @@ -1287,7 +1287,7 @@ void QQuickTextPrivate::setLineGeometry(QTextLine &line, qreal lineWidth, qreal if (!image->pix) { const QQmlContext *context = qmlContext(q); const QUrl url = context->resolvedUrl(q->baseUrl()).resolved(image->url); - image->pix = new QQuickPixmap(context->engine(), url, QRect(), image->size * devicePixelRatio()); + image->pix.reset(new QQuickPixmap(context->engine(), url, QRect(), image->size * devicePixelRatio())); if (image->pix->isLoading()) { image->pix->connectFinished(q, SLOT(imageDownloadFinished())); @@ -1939,9 +1939,7 @@ void QQuickText::itemChange(ItemChange change, const ItemChangeData &value) // check if we have scalable inline images with explicit size set, which should be reloaded for (QQuickStyledTextImgTag *image : std::as_const(d->extra->visibleImgTags)) { if (image->size.isValid() && QQuickPixmap::isScalableImageFormat(image->url)) { - delete image->pix; - image->pix = nullptr; - + image->pix.reset(); needUpdateLayout = true; } } @@ -2793,9 +2791,8 @@ QSGNode *QQuickText::updatePaintNode(QSGNode *oldNode, UpdatePaintNodeData *data if (d->extra.isAllocated()) { for (QQuickStyledTextImgTag *img : std::as_const(d->extra->visibleImgTags)) { - QQuickPixmap *pix = img->pix; - if (pix && pix->isReady()) - node->addImage(QRectF(img->pos.x() + dx, img->pos.y() + dy, img->size.width(), img->size.height()), pix->image()); + if (img->pix && img->pix->isReady()) + node->addImage(QRectF(img->pos.x() + dx, img->pos.y() + dy, img->size.width(), img->size.height()), img->pix->image()); } } } diff --git a/src/quick/util/qquickstyledtext.cpp b/src/quick/util/qquickstyledtext.cpp index 527b8dbffe..a595dbcbc2 100644 --- a/src/quick/util/qquickstyledtext.cpp +++ b/src/quick/util/qquickstyledtext.cpp @@ -677,12 +677,11 @@ void QQuickStyledTextPrivate::parseImageAttributes(const QChar *&ch, const QStri // to avoid a relayout later on. QUrl url = baseUrl.resolved(image->url); if (url.isLocalFile()) { - image->pix = new QQuickPixmap(context->engine(), url, QRect(), image->size); + image->pix.reset(new QQuickPixmap(context->engine(), url, QRect(), image->size)); if (image->pix && image->pix->isReady()) { image->size = image->pix->implicitSize(); } else { - delete image->pix; - image->pix = nullptr; + image->pix.reset(); } } } diff --git a/src/quick/util/qquickstyledtext_p.h b/src/quick/util/qquickstyledtext_p.h index af4b980c44..9f8ccf31e4 100644 --- a/src/quick/util/qquickstyledtext_p.h +++ b/src/quick/util/qquickstyledtext_p.h @@ -19,6 +19,7 @@ #include <QPointF> #include <QList> #include <QUrl> +#include <QScopedPointer> #include <QtQuick/private/qquickpixmap_p.h> QT_BEGIN_NAMESPACE @@ -31,9 +32,8 @@ class QQmlContext; class Q_AUTOTEST_EXPORT QQuickStyledTextImgTag { public: - QQuickStyledTextImgTag() { } - - ~QQuickStyledTextImgTag() { delete pix; } + QQuickStyledTextImgTag() = default; + ~QQuickStyledTextImgTag() = default; enum Align { Bottom, @@ -47,7 +47,7 @@ public: int position = 0; qreal offset = 0.0; // this offset allows us to compensate for flooring reserved space Align align = QQuickStyledTextImgTag::Bottom; - QQuickPixmap *pix = nullptr; + QScopedPointer<QQuickPixmap> pix; }; class Q_AUTOTEST_EXPORT QQuickStyledText |