aboutsummaryrefslogtreecommitdiffstats
path: root/src/quickcontrols2
diff options
context:
space:
mode:
authorJ-P Nurmi <jpnurmi@qt.io>2017-05-09 16:44:08 +0200
committerJ-P Nurmi <jpnurmi@qt.io>2017-05-10 16:19:57 +0000
commit6c2a24a4f2695ae5565b9a5a42b04c9b68833866 (patch)
tree5373f36a6d5c54ce6c2caf386113142ed5e9fa89 /src/quickcontrols2
parent9947c815ea54c781bc1a9c95e26e2af1e6eebb87 (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.cpp44
-rw-r--r--src/quickcontrols2/qquickiconlabel_p.h8
-rw-r--r--src/quickcontrols2/qquickiconlabel_p_p.h3
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;
};