diff options
author | J-P Nurmi <jpnurmi@qt.io> | 2017-05-09 16:44:08 +0200 |
---|---|---|
committer | J-P Nurmi <jpnurmi@qt.io> | 2017-05-10 16:19:57 +0000 |
commit | 6c2a24a4f2695ae5565b9a5a42b04c9b68833866 (patch) | |
tree | 5373f36a6d5c54ce6c2caf386113142ed5e9fa89 /src/quickcontrols2 | |
parent | 9947c815ea54c781bc1a9c95e26e2af1e6eebb87 (diff) |
Make QQuickIcon a value type
QQuickIcon no longer inherits QObject, but becomes a light-weight
implicitly shared Q_GADGET-type, that is passed by value the same
way fonts and colors are.
Before:
SUB: OS: Fedora 25 (Workstation Edition)
SUB: QPA: xcb
SUB: GL_VENDOR: Intel Open Source Technology Center
SUB: GL_RENDERER: Mesa DRI Intel(R) Haswell Desktop
SUB: GL_VERSION: 3.0 Mesa 13.0.4
SUB: running: benchmarks/auto/creation/controls/delegates_buttoncontrol2.qml
SUB: 110 frames
SUB: 109 frames
SUB: 109 frames
SUB: 109 frames
SUB: 109 frames
SUB: Average:
SUB: 109.2 frames; using samples; MedianAll=109; StdDev=0.447214, CoV=0.00409536
After:
[...]
SUB: running: benchmarks/auto/creation/controls/delegates_buttoncontrol2.qml
SUB: 123 frames
SUB: 124 frames
SUB: 124 frames
SUB: 122 frames
SUB: 125 frames
SUB: Average:
SUB: 123.6 frames; using samples; MedianAll=124; StdDev=1.14018, CoV=0.00922472
Change-Id: I604532204fb94fc0726d0c9b8b6097f9ebc265e8
Reviewed-by: Mitch Curtis <mitch.curtis@qt.io>
Diffstat (limited to 'src/quickcontrols2')
-rw-r--r-- | src/quickcontrols2/qquickiconlabel.cpp | 44 | ||||
-rw-r--r-- | src/quickcontrols2/qquickiconlabel_p.h | 8 | ||||
-rw-r--r-- | src/quickcontrols2/qquickiconlabel_p_p.h | 3 |
3 files changed, 18 insertions, 37 deletions
diff --git a/src/quickcontrols2/qquickiconlabel.cpp b/src/quickcontrols2/qquickiconlabel.cpp index 61151f28..1cfceda2 100644 --- a/src/quickcontrols2/qquickiconlabel.cpp +++ b/src/quickcontrols2/qquickiconlabel.cpp @@ -41,7 +41,6 @@ #include <QtGui/private/qguiapplication_p.h> #include <QtQuick/private/qquickitem_p.h> #include <QtQuick/private/qquicktext_p.h> -#include <QtQuickTemplates2/private/qquickicon_p.h> QT_BEGIN_NAMESPACE @@ -66,7 +65,6 @@ QQuickIconLabelPrivate::QQuickIconLabelPrivate() leftPadding(0), rightPadding(0), bottomPadding(0), - icon(nullptr), image(nullptr), label(nullptr) { @@ -74,7 +72,7 @@ QQuickIconLabelPrivate::QQuickIconLabelPrivate() bool QQuickIconLabelPrivate::hasIcon() const { - return display != QQuickIconLabel::TextOnly && icon && (!icon->name().isEmpty() || !icon->source().isEmpty()); + return display != QQuickIconLabel::TextOnly && !icon.isEmpty(); } bool QQuickIconLabelPrivate::hasText() const @@ -92,10 +90,10 @@ bool QQuickIconLabelPrivate::createImage() watchChanges(image); beginClass(image); image->setObjectName(QStringLiteral("image")); - image->setName(icon->name()); - image->setSource(icon->source()); - image->setSourceSize(QSize(icon->width(), icon->height())); - image->setColor(icon->color()); + image->setName(icon.name()); + image->setSource(icon.source()); + image->setSourceSize(QSize(icon.width(), icon.height())); + image->setColor(icon.color()); QQmlEngine::setContextForObject(image, qmlContext(q)); if (componentComplete) completeComponent(image); @@ -122,11 +120,11 @@ bool QQuickIconLabelPrivate::updateImage() void QQuickIconLabelPrivate::syncImage() { - if (!image || !icon) + if (!image || icon.isEmpty()) return; - image->setName(icon->name()); - image->setSource(icon->source()); + image->setName(icon.name()); + image->setSource(icon.source()); } void QQuickIconLabelPrivate::updateOrSyncImage() @@ -200,11 +198,11 @@ void QQuickIconLabelPrivate::updateOrSyncLabel() void QQuickIconLabelPrivate::updateIcon() { - if (!image || !icon) + if (!image || icon.isEmpty()) return; - image->setColor(icon->color()); - image->setSourceSize(QSize(icon->width(), icon->height())); + image->setColor(icon.color()); + image->setSourceSize(QSize(icon.width(), icon.height())); } void QQuickIconLabelPrivate::updateImplicitSize() @@ -395,35 +393,19 @@ QQuickIconLabel::~QQuickIconLabel() d->unwatchChanges(d->label); } -QQuickIcon *QQuickIconLabel::icon() const +QQuickIcon QQuickIconLabel::icon() const { Q_D(const QQuickIconLabel); return d->icon; } -void QQuickIconLabel::setIcon(QQuickIcon *icon) +void QQuickIconLabel::setIcon(const QQuickIcon &icon) { Q_D(QQuickIconLabel); if (d->icon == icon) return; - if (QQuickIcon *oldIcon = d->icon) { - QObjectPrivate::disconnect(oldIcon, &QQuickIcon::nameChanged, d, &QQuickIconLabelPrivate::updateOrSyncImage); - QObjectPrivate::disconnect(oldIcon, &QQuickIcon::sourceChanged, d, &QQuickIconLabelPrivate::updateOrSyncImage); - QObjectPrivate::disconnect(oldIcon, &QQuickIcon::colorChanged, d, &QQuickIconLabelPrivate::updateIcon); - QObjectPrivate::disconnect(oldIcon, &QQuickIcon::widthChanged, d, &QQuickIconLabelPrivate::updateIcon); - QObjectPrivate::disconnect(oldIcon, &QQuickIcon::heightChanged, d, &QQuickIconLabelPrivate::updateIcon); - } - d->icon = icon; - if (icon) { - QObjectPrivate::connect(icon, &QQuickIcon::nameChanged, d, &QQuickIconLabelPrivate::updateOrSyncImage); - QObjectPrivate::connect(icon, &QQuickIcon::sourceChanged, d, &QQuickIconLabelPrivate::updateOrSyncImage); - QObjectPrivate::connect(icon, &QQuickIcon::colorChanged, d, &QQuickIconLabelPrivate::updateIcon); - QObjectPrivate::connect(icon, &QQuickIcon::widthChanged, d, &QQuickIconLabelPrivate::updateIcon); - QObjectPrivate::connect(icon, &QQuickIcon::heightChanged, d, &QQuickIconLabelPrivate::updateIcon); - } - d->updateOrSyncImage(); } diff --git a/src/quickcontrols2/qquickiconlabel_p.h b/src/quickcontrols2/qquickiconlabel_p.h index 63b7fbd2..df79dbf2 100644 --- a/src/quickcontrols2/qquickiconlabel_p.h +++ b/src/quickcontrols2/qquickiconlabel_p.h @@ -50,16 +50,16 @@ #include <QtQuick/qquickitem.h> #include <QtQuickControls2/private/qtquickcontrols2global_p.h> +#include <QtQuickTemplates2/private/qquickicon_p.h> QT_BEGIN_NAMESPACE -class QQuickIcon; class QQuickIconLabelPrivate; class Q_QUICKCONTROLS2_PRIVATE_EXPORT QQuickIconLabel : public QQuickItem { Q_OBJECT - Q_PROPERTY(QQuickIcon *icon READ icon WRITE setIcon FINAL) + Q_PROPERTY(QQuickIcon icon READ icon WRITE setIcon FINAL) Q_PROPERTY(QString text READ text WRITE setText FINAL) Q_PROPERTY(QFont font READ font WRITE setFont FINAL) Q_PROPERTY(QColor color READ color WRITE setColor FINAL) @@ -84,8 +84,8 @@ public: explicit QQuickIconLabel(QQuickItem *parent = nullptr); ~QQuickIconLabel(); - QQuickIcon *icon() const; - void setIcon(QQuickIcon *icon); + QQuickIcon icon() const; + void setIcon(const QQuickIcon &icon); QString text() const; void setText(const QString text); diff --git a/src/quickcontrols2/qquickiconlabel_p_p.h b/src/quickcontrols2/qquickiconlabel_p_p.h index 00c2d404..b02b5400 100644 --- a/src/quickcontrols2/qquickiconlabel_p_p.h +++ b/src/quickcontrols2/qquickiconlabel_p_p.h @@ -55,7 +55,6 @@ QT_BEGIN_NAMESPACE class QQuickText; -class QQuickIcon; class QQuickIconImage; class QQuickIconLabelPrivate : public QQuickItemPrivate, public QQuickItemChangeListener @@ -105,7 +104,7 @@ public: QFont font; QColor color; QString text; - QQuickIcon *icon; + QQuickIcon icon; QQuickIconImage *image; QQuickText *label; }; |