aboutsummaryrefslogtreecommitdiffstats
path: root/src
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
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')
-rw-r--r--src/imports/controls/qtquickcontrols2plugin.cpp2
-rw-r--r--src/imports/templates/qtquicktemplates2plugin.cpp2
-rw-r--r--src/quickcontrols2/qquickiconlabel.cpp44
-rw-r--r--src/quickcontrols2/qquickiconlabel_p.h8
-rw-r--r--src/quickcontrols2/qquickiconlabel_p_p.h3
-rw-r--r--src/quicktemplates2/qquickabstractbutton.cpp81
-rw-r--r--src/quicktemplates2/qquickabstractbutton_p.h8
-rw-r--r--src/quicktemplates2/qquickabstractbutton_p_p.h3
-rw-r--r--src/quicktemplates2/qquickaction.cpp20
-rw-r--r--src/quicktemplates2/qquickaction_p.h8
-rw-r--r--src/quicktemplates2/qquickaction_p_p.h3
-rw-r--r--src/quicktemplates2/qquickicon.cpp75
-rw-r--r--src/quicktemplates2/qquickicon_p.h38
-rw-r--r--src/quicktemplates2/qtquicktemplates2global_p.h1
14 files changed, 138 insertions, 158 deletions
diff --git a/src/imports/controls/qtquickcontrols2plugin.cpp b/src/imports/controls/qtquickcontrols2plugin.cpp
index 48d027dd..1effbbd8 100644
--- a/src/imports/controls/qtquickcontrols2plugin.cpp
+++ b/src/imports/controls/qtquickcontrols2plugin.cpp
@@ -159,7 +159,7 @@ void QtQuickControls2Plugin::registerTypes(const char *uri)
qmlRegisterType<QQuickAction>(uri, 2, 3, "Action");
qmlRegisterType<QQuickActionGroup>(uri, 2, 3, "ActionGroup");
qmlRegisterType<QQuickButtonGroup, 3>(uri, 2, 3, "ButtonGroup");
- qmlRegisterType<QQuickIcon>();
+ qRegisterMetaType<QQuickIcon>();
}
static QObject *styleSingleton(QQmlEngine *engine, QJSEngine *scriptEngine)
diff --git a/src/imports/templates/qtquicktemplates2plugin.cpp b/src/imports/templates/qtquicktemplates2plugin.cpp
index 32779b4a..2782fa9a 100644
--- a/src/imports/templates/qtquicktemplates2plugin.cpp
+++ b/src/imports/templates/qtquicktemplates2plugin.cpp
@@ -261,7 +261,7 @@ void QtQuickTemplates2Plugin::registerTypes(const char *uri)
qmlRegisterType<QQuickAction>(uri, 2, 3, "Action");
qmlRegisterType<QQuickActionGroup>(uri, 2, 3, "ActionGroup");
qmlRegisterType<QQuickButtonGroup, 3>(uri, 2, 3, "ButtonGroup");
- qmlRegisterType<QQuickIcon>();
+ qRegisterMetaType<QQuickIcon>();
qmlRegisterType<QQuickRangeSlider, 3>(uri, 2, 3, "RangeSlider");
qmlRegisterType<QQuickScrollBar, 3>(uri, 2, 3, "ScrollBar");
qmlRegisterType<QQuickScrollIndicator, 3>(uri, 2, 3, "ScrollIndicator");
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;
};
diff --git a/src/quicktemplates2/qquickabstractbutton.cpp b/src/quicktemplates2/qquickabstractbutton.cpp
index 96faf2d5..225e20d4 100644
--- a/src/quicktemplates2/qquickabstractbutton.cpp
+++ b/src/quicktemplates2/qquickabstractbutton.cpp
@@ -37,7 +37,6 @@
#include "qquickabstractbutton_p.h"
#include "qquickabstractbutton_p_p.h"
#include "qquickbuttongroup_p.h"
-#include "qquickicon_p.h"
#include "qquickaction_p.h"
#include "qquickaction_p_p.h"
@@ -161,7 +160,6 @@ QQuickAbstractButtonPrivate::QQuickAbstractButtonPrivate()
pressButtons(Qt::NoButton),
indicator(nullptr),
group(nullptr),
- icon(nullptr),
display(QQuickAbstractButton::TextBesideIcon),
action(nullptr)
{
@@ -637,16 +635,22 @@ void QQuickAbstractButton::setIndicator(QQuickItem *indicator)
\sa {Control::}{contentItem}
*/
-QQuickIcon *QQuickAbstractButton::icon() const
+QQuickIcon QQuickAbstractButton::icon() const
{
- QQuickAbstractButtonPrivate *d = const_cast<QQuickAbstractButtonPrivate*>(d_func());
- if (!d->icon) {
- d->icon = new QQuickIcon;
- QQml_setParent_noEvent(d->icon, const_cast<QQuickAbstractButton*>(this));
- }
+ Q_D(const QQuickAbstractButton);
return d->icon;
}
+void QQuickAbstractButton::setIcon(const QQuickIcon &icon)
+{
+ Q_D(QQuickAbstractButton);
+ if (d->icon == icon)
+ return;
+
+ d->icon = icon;
+ emit iconChanged();
+}
+
/*!
\since QtQuick.Controls 2.3
\qmlproperty enumeration QtQuick.Controls::AbstractButton::display
@@ -704,18 +708,10 @@ void QQuickAbstractButton::setAction(QQuickAction *action)
QObjectPrivate::disconnect(oldAction, &QQuickAction::triggered, d, &QQuickAbstractButtonPrivate::click);
disconnect(oldAction, &QQuickAction::textChanged, this, &QQuickAbstractButton::setText);
+ disconnect(oldAction, &QQuickAction::iconChanged, this, &QQuickAbstractButton::setIcon);
disconnect(oldAction, &QQuickAction::checkedChanged, this, &QQuickAbstractButton::setChecked);
disconnect(oldAction, &QQuickAction::checkableChanged, this, &QQuickAbstractButton::setCheckable);
disconnect(oldAction, &QQuickAction::enabledChanged, this, &QQuickItem::setEnabled);
-
- QQuickIcon *actionIcon = QQuickActionPrivate::get(oldAction)->icon;
- if (actionIcon && d->icon) {
- disconnect(actionIcon, &QQuickIcon::nameChanged, d->icon, &QQuickIcon::setName);
- disconnect(actionIcon, &QQuickIcon::sourceChanged, d->icon, &QQuickIcon::setSource);
- disconnect(actionIcon, &QQuickIcon::widthChanged, d->icon, &QQuickIcon::setWidth);
- disconnect(actionIcon, &QQuickIcon::heightChanged, d->icon, &QQuickIcon::setHeight);
- disconnect(actionIcon, &QQuickIcon::colorChanged, d->icon, &QQuickIcon::setColor);
- }
}
if (action) {
@@ -723,39 +719,32 @@ void QQuickAbstractButton::setAction(QQuickAction *action)
QObjectPrivate::connect(action, &QQuickAction::triggered, d, &QQuickAbstractButtonPrivate::click);
connect(action, &QQuickAction::textChanged, this, &QQuickAbstractButton::setText);
+ connect(action, &QQuickAction::iconChanged, this, &QQuickAbstractButton::setIcon);
connect(action, &QQuickAction::checkedChanged, this, &QQuickAbstractButton::setChecked);
connect(action, &QQuickAction::checkableChanged, this, &QQuickAbstractButton::setCheckable);
connect(action, &QQuickAction::enabledChanged, this, &QQuickItem::setEnabled);
- QQuickIcon *actionIcon = QQuickActionPrivate::get(action)->icon;
- if (actionIcon) {
- QQuickIcon *buttonIcon = icon();
- connect(actionIcon, &QQuickIcon::nameChanged, buttonIcon, &QQuickIcon::setName);
- connect(actionIcon, &QQuickIcon::sourceChanged, buttonIcon, &QQuickIcon::setSource);
- connect(actionIcon, &QQuickIcon::widthChanged, buttonIcon, &QQuickIcon::setWidth);
- connect(actionIcon, &QQuickIcon::heightChanged, buttonIcon, &QQuickIcon::setHeight);
- connect(actionIcon, &QQuickIcon::colorChanged, buttonIcon, &QQuickIcon::setColor);
-
- QString name = actionIcon->name();
- if (!name.isEmpty())
- buttonIcon->setName(name);
-
- QUrl source = actionIcon->source();
- if (!source.isEmpty())
- buttonIcon->setSource(source);
-
- int width = actionIcon->width();
- if (width > 0)
- buttonIcon->setWidth(width);
-
- int height = actionIcon->height();
- if (height)
- buttonIcon->setHeight(height);
-
- QColor color = actionIcon->color();
- if (color != Qt::transparent)
- buttonIcon->setColor(color);
- }
+ QQuickIcon actionIcon = action->icon();
+
+ QString name = actionIcon.name();
+ if (!name.isEmpty())
+ d->icon.setName(name);
+
+ QUrl source = actionIcon.source();
+ if (!source.isEmpty())
+ d->icon.setSource(source);
+
+ int width = actionIcon.width();
+ if (width > 0)
+ d->icon.setWidth(width);
+
+ int height = actionIcon.height();
+ if (height)
+ d->icon.setHeight(height);
+
+ QColor color = actionIcon.color();
+ if (color != Qt::transparent)
+ d->icon.setColor(color);
setText(action->text());
setChecked(action->isChecked());
diff --git a/src/quicktemplates2/qquickabstractbutton_p.h b/src/quicktemplates2/qquickabstractbutton_p.h
index c6a50665..9c372414 100644
--- a/src/quicktemplates2/qquickabstractbutton_p.h
+++ b/src/quicktemplates2/qquickabstractbutton_p.h
@@ -49,10 +49,10 @@
//
#include <QtQuickTemplates2/private/qquickcontrol_p.h>
+#include <QtQuickTemplates2/private/qquickicon_p.h>
QT_BEGIN_NAMESPACE
-class QQuickIcon;
class QQuickAction;
class QQuickAbstractButtonPrivate;
@@ -66,7 +66,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickAbstractButton : public QQuickContr
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL)
Q_PROPERTY(bool autoExclusive READ autoExclusive WRITE setAutoExclusive NOTIFY autoExclusiveChanged FINAL)
Q_PROPERTY(QQuickItem *indicator READ indicator WRITE setIndicator NOTIFY indicatorChanged FINAL)
- Q_PROPERTY(QQuickIcon *icon READ icon CONSTANT FINAL REVISION 3)
+ Q_PROPERTY(QQuickIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL REVISION 3)
Q_PROPERTY(Display display READ display WRITE setDisplay NOTIFY displayChanged REVISION 3)
Q_PROPERTY(QQuickAction *action READ action WRITE setAction NOTIFY actionChanged FINAL REVISION 3)
@@ -99,7 +99,8 @@ public:
QQuickItem *indicator() const;
void setIndicator(QQuickItem *indicator);
- QQuickIcon *icon() const;
+ QQuickIcon icon() const;
+ void setIcon(const QQuickIcon &icon);
enum Display {
IconOnly,
@@ -133,6 +134,7 @@ Q_SIGNALS:
void checkableChanged();
void autoExclusiveChanged();
void indicatorChanged();
+ Q_REVISION(3) void iconChanged();
Q_REVISION(3) void displayChanged();
Q_REVISION(3) void actionChanged();
diff --git a/src/quicktemplates2/qquickabstractbutton_p_p.h b/src/quicktemplates2/qquickabstractbutton_p_p.h
index 61a546d1..f1fef5e5 100644
--- a/src/quicktemplates2/qquickabstractbutton_p_p.h
+++ b/src/quicktemplates2/qquickabstractbutton_p_p.h
@@ -55,7 +55,6 @@ QT_BEGIN_NAMESPACE
class QQuickAction;
class QQuickButtonGroup;
-class QQuickIcon;
class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickAbstractButtonPrivate : public QQuickControlPrivate
{
@@ -102,11 +101,11 @@ public:
int holdTimer;
int delayTimer;
int repeatTimer;
+ QQuickIcon icon;
QPointF pressPoint;
Qt::MouseButtons pressButtons;
QQuickItem *indicator;
QQuickButtonGroup *group;
- QQuickIcon *icon;
QQuickAbstractButton::Display display;
QPointer<QQuickAction> action;
};
diff --git a/src/quicktemplates2/qquickaction.cpp b/src/quicktemplates2/qquickaction.cpp
index e6b1cedb..fb6d7c3e 100644
--- a/src/quicktemplates2/qquickaction.cpp
+++ b/src/quicktemplates2/qquickaction.cpp
@@ -38,7 +38,6 @@
#include "qquickaction_p_p.h"
#include "qquickactiongroup_p.h"
#include "qquickshortcutcontext_p_p.h"
-#include "qquickicon_p.h"
#include <QtGui/qevent.h>
#include <QtGui/private/qshortcutmap_p.h>
@@ -176,7 +175,6 @@ QQuickActionPrivate::QQuickActionPrivate()
enabled(true),
checked(false),
checkable(false),
- icon(nullptr),
defaultShortcutEntry(nullptr),
group(nullptr)
{
@@ -381,16 +379,22 @@ void QQuickAction::setText(const QString &text)
\include qquickicon.qdocinc grouped-properties
*/
-QQuickIcon *QQuickAction::icon() const
+QQuickIcon QQuickAction::icon() const
{
- QQuickActionPrivate *d = const_cast<QQuickActionPrivate *>(d_func());
- if (!d->icon) {
- d->icon = new QQuickIcon;
- QQml_setParent_noEvent(d->icon, const_cast<QQuickAction *>(this));
- }
+ Q_D(const QQuickAction);
return d->icon;
}
+void QQuickAction::setIcon(const QQuickIcon &icon)
+{
+ Q_D(QQuickAction);
+ if (d->icon == icon)
+ return;
+
+ d->icon = icon;
+ emit iconChanged(icon);
+}
+
/*!
\qmlproperty bool QtQuick.Controls::Action::enabled
diff --git a/src/quicktemplates2/qquickaction_p.h b/src/quicktemplates2/qquickaction_p.h
index d47b847e..ce989bed 100644
--- a/src/quicktemplates2/qquickaction_p.h
+++ b/src/quicktemplates2/qquickaction_p.h
@@ -49,7 +49,7 @@
//
#include <QtQuickTemplates2/private/qtquicktemplates2global_p.h>
-
+#include <QtQuickTemplates2/private/qquickicon_p.h>
#include <QtCore/qobject.h>
#include <QtQml/qqml.h>
@@ -62,7 +62,7 @@ class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickAction : public QObject
{
Q_OBJECT
Q_PROPERTY(QString text READ text WRITE setText NOTIFY textChanged FINAL)
- Q_PROPERTY(QQuickIcon *icon READ icon CONSTANT FINAL)
+ Q_PROPERTY(QQuickIcon icon READ icon WRITE setIcon NOTIFY iconChanged FINAL)
Q_PROPERTY(bool enabled READ isEnabled WRITE setEnabled NOTIFY enabledChanged RESET resetEnabled FINAL)
Q_PROPERTY(bool checked READ isChecked WRITE setChecked NOTIFY checkedChanged FINAL)
Q_PROPERTY(bool checkable READ isCheckable WRITE setCheckable NOTIFY checkableChanged FINAL)
@@ -75,7 +75,8 @@ public:
QString text() const;
void setText(const QString &text);
- QQuickIcon *icon() const;
+ QQuickIcon icon() const;
+ void setIcon(const QQuickIcon &icon);
bool isEnabled() const;
void setEnabled(bool enabled);
@@ -96,6 +97,7 @@ public Q_SLOTS:
Q_SIGNALS:
void textChanged(const QString &text);
+ void iconChanged(const QQuickIcon &icon);
void enabledChanged(bool enabled);
void checkedChanged(bool checked);
void checkableChanged(bool checkable);
diff --git a/src/quicktemplates2/qquickaction_p_p.h b/src/quicktemplates2/qquickaction_p_p.h
index 85da6b03..08c442ed 100644
--- a/src/quicktemplates2/qquickaction_p_p.h
+++ b/src/quicktemplates2/qquickaction_p_p.h
@@ -56,7 +56,6 @@
QT_BEGIN_NAMESPACE
-class QQuickIcon;
class QShortcutEvent;
class QQuickActionGroup;
@@ -115,7 +114,7 @@ public:
bool checked;
bool checkable;
QString text;
- QQuickIcon *icon;
+ QQuickIcon icon;
QVariant vshortcut;
QKeySequence keySequence;
ShortcutEntry *defaultShortcutEntry;
diff --git a/src/quicktemplates2/qquickicon.cpp b/src/quicktemplates2/qquickicon.cpp
index 38d0b2af..0b0127d3 100644
--- a/src/quicktemplates2/qquickicon.cpp
+++ b/src/quicktemplates2/qquickicon.cpp
@@ -34,15 +34,12 @@
**
****************************************************************************/
-#include <QtCore/private/qobject_p.h>
#include "qquickicon_p.h"
QT_BEGIN_NAMESPACE
-class QQuickIconPrivate : public QObjectPrivate
+class QQuickIconPrivate : public QSharedData
{
- Q_DECLARE_PUBLIC(QQuickIcon)
-
public:
QQuickIconPrivate()
: width(0),
@@ -58,94 +55,98 @@ public:
QColor color;
};
-QQuickIcon::QQuickIcon(QObject *parent)
- : QObject(*(new QQuickIconPrivate), parent)
+QQuickIcon::QQuickIcon()
+ : d(new QQuickIconPrivate)
+{
+}
+
+QQuickIcon::QQuickIcon(const QQuickIcon &other)
+ : d(other.d)
+{
+}
+
+QQuickIcon::~QQuickIcon()
+{
+}
+
+QQuickIcon &QQuickIcon::operator=(const QQuickIcon &other)
+{
+ d = other.d;
+ return *this;
+}
+
+bool QQuickIcon::operator==(const QQuickIcon &other) const
+{
+ return d == other.d || (d->name == other.d->name
+ && d->source == other.d->source
+ && d->width == other.d->width
+ && d->height == other.d->height
+ && d->color == other.d->color);
+}
+
+bool QQuickIcon::operator!=(const QQuickIcon &other) const
+{
+ return !(*this == other);
+}
+
+bool QQuickIcon::isEmpty() const
{
+ return d->name.isEmpty() && d->source.isEmpty();
}
QString QQuickIcon::name() const
{
- Q_D(const QQuickIcon);
return d->name;
}
void QQuickIcon::setName(const QString &name)
{
- Q_D(QQuickIcon);
- if (name == d->name)
- return;
-
d->name = name;
- emit nameChanged(name);
}
QUrl QQuickIcon::source() const
{
- Q_D(const QQuickIcon);
return d->source;
}
void QQuickIcon::setSource(const QUrl &source)
{
- Q_D(QQuickIcon);
- if (source == d->source)
- return;
-
d->source = source;
- emit sourceChanged(source);
}
int QQuickIcon::width() const
{
- Q_D(const QQuickIcon);
return d->width;
}
void QQuickIcon::setWidth(int width)
{
- Q_D(QQuickIcon);
- if (width == d->width)
- return;
-
d->width = width;
- emit widthChanged(width);
}
int QQuickIcon::height() const
{
- Q_D(const QQuickIcon);
return d->height;
}
void QQuickIcon::setHeight(int height)
{
- Q_D(QQuickIcon);
- if (height == d->height)
- return;
-
d->height = height;
- emit heightChanged(height);
}
QColor QQuickIcon::color() const
{
- Q_D(const QQuickIcon);
return d->color;
}
void QQuickIcon::setColor(const QColor &color)
{
- Q_D(QQuickIcon);
- if (color == d->color)
- return;
-
d->color = color;
- emit colorChanged(color);
}
void QQuickIcon::resetColor()
{
- setColor(Qt::transparent);
+ d->color = Qt::transparent;
}
QT_END_NAMESPACE
diff --git a/src/quicktemplates2/qquickicon_p.h b/src/quicktemplates2/qquickicon_p.h
index 4b1557a0..6e28f2a9 100644
--- a/src/quicktemplates2/qquickicon_p.h
+++ b/src/quicktemplates2/qquickicon_p.h
@@ -49,7 +49,9 @@
//
#include <QtCore/qurl.h>
-#include <QtCore/qobject.h>
+#include <QtCore/qstring.h>
+#include <QtCore/qobjectdefs.h>
+#include <QtCore/qshareddata.h>
#include <QtQuickTemplates2/private/qtquicktemplates2global_p.h>
#include <QtGui/qcolor.h>
@@ -57,17 +59,25 @@ QT_BEGIN_NAMESPACE
class QQuickIconPrivate;
-class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickIcon : public QObject
+class Q_QUICKTEMPLATES2_PRIVATE_EXPORT QQuickIcon
{
- Q_OBJECT
- Q_PROPERTY(QString name READ name WRITE setName NOTIFY nameChanged FINAL)
- Q_PROPERTY(QUrl source READ source WRITE setSource NOTIFY sourceChanged FINAL)
- Q_PROPERTY(int width READ width WRITE setWidth NOTIFY widthChanged FINAL)
- Q_PROPERTY(int height READ height WRITE setHeight NOTIFY heightChanged FINAL)
- Q_PROPERTY(QColor color READ color WRITE setColor RESET resetColor NOTIFY colorChanged FINAL)
+ Q_GADGET
+ Q_PROPERTY(QString name READ name WRITE setName FINAL)
+ Q_PROPERTY(QUrl source READ source WRITE setSource FINAL)
+ Q_PROPERTY(int width READ width WRITE setWidth FINAL)
+ Q_PROPERTY(int height READ height WRITE setHeight FINAL)
+ Q_PROPERTY(QColor color READ color WRITE setColor RESET resetColor FINAL)
public:
- explicit QQuickIcon(QObject *parent = nullptr);
+ QQuickIcon();
+ QQuickIcon(const QQuickIcon &other);
+ ~QQuickIcon();
+
+ QQuickIcon& operator=(const QQuickIcon &other);
+ bool operator==(const QQuickIcon &other) const;
+ bool operator!=(const QQuickIcon &other) const;
+
+ bool isEmpty() const;
QString name() const;
void setName(const QString &name);
@@ -85,16 +95,8 @@ public:
void setColor(const QColor &color);
void resetColor();
-Q_SIGNALS:
- void nameChanged(const QString &name);
- void sourceChanged(const QUrl &source);
- void widthChanged(int width);
- void heightChanged(int height);
- void colorChanged(const QColor &color);
-
private:
- Q_DISABLE_COPY(QQuickIcon)
- Q_DECLARE_PRIVATE(QQuickIcon)
+ QSharedDataPointer<QQuickIconPrivate> d;
};
QT_END_NAMESPACE
diff --git a/src/quicktemplates2/qtquicktemplates2global_p.h b/src/quicktemplates2/qtquicktemplates2global_p.h
index b7f54bb6..e5ee3f2e 100644
--- a/src/quicktemplates2/qtquicktemplates2global_p.h
+++ b/src/quicktemplates2/qtquicktemplates2global_p.h
@@ -49,6 +49,7 @@
//
#include <QtCore/qglobal.h>
+#include <QtQml/private/qqmlglobal_p.h>
#include <QtQuickTemplates2/private/qtquicktemplates2-config_p.h>
QT_BEGIN_NAMESPACE