aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquickicon.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/quicktemplates2/qquickicon.cpp')
-rw-r--r--src/quicktemplates2/qquickicon.cpp82
1 files changed, 81 insertions, 1 deletions
diff --git a/src/quicktemplates2/qquickicon.cpp b/src/quicktemplates2/qquickicon.cpp
index 0b0127d3..79af62b1 100644
--- a/src/quicktemplates2/qquickicon.cpp
+++ b/src/quicktemplates2/qquickicon.cpp
@@ -44,7 +44,8 @@ public:
QQuickIconPrivate()
: width(0),
height(0),
- color(Qt::transparent)
+ color(Qt::transparent),
+ resolveMask(0)
{
}
@@ -53,6 +54,18 @@ public:
int width;
int height;
QColor color;
+
+ enum ResolveProperties {
+ NameResolved = 0x0001,
+ SourceResolved = 0x0002,
+ WidthResolved = 0x0004,
+ HeightResolved = 0x0008,
+ ColorResolved = 0x0010,
+ AllPropertiesResolved = 0x1ffff
+ };
+
+ // This is based on QFont's resolve_mask.
+ int resolveMask;
};
QQuickIcon::QQuickIcon()
@@ -101,7 +114,17 @@ QString QQuickIcon::name() const
void QQuickIcon::setName(const QString &name)
{
+ if ((d->resolveMask & QQuickIconPrivate::NameResolved) && d->name == name)
+ return;
+
d->name = name;
+ d->resolveMask |= QQuickIconPrivate::NameResolved;
+}
+
+void QQuickIcon::resetName()
+{
+ d->name = QString();
+ d->resolveMask &= ~QQuickIconPrivate::NameResolved;
}
QUrl QQuickIcon::source() const
@@ -111,7 +134,17 @@ QUrl QQuickIcon::source() const
void QQuickIcon::setSource(const QUrl &source)
{
+ if ((d->resolveMask & QQuickIconPrivate::SourceResolved) && d->source == source)
+ return;
+
d->source = source;
+ d->resolveMask |= QQuickIconPrivate::SourceResolved;
+}
+
+void QQuickIcon::resetSource()
+{
+ d->source = QString();
+ d->resolveMask &= ~QQuickIconPrivate::SourceResolved;
}
int QQuickIcon::width() const
@@ -121,7 +154,17 @@ int QQuickIcon::width() const
void QQuickIcon::setWidth(int width)
{
+ if ((d->resolveMask & QQuickIconPrivate::WidthResolved) && d->width == width)
+ return;
+
d->width = width;
+ d->resolveMask |= QQuickIconPrivate::WidthResolved;
+}
+
+void QQuickIcon::resetWidth()
+{
+ d->width = 0;
+ d->resolveMask &= ~QQuickIconPrivate::WidthResolved;
}
int QQuickIcon::height() const
@@ -131,7 +174,17 @@ int QQuickIcon::height() const
void QQuickIcon::setHeight(int height)
{
+ if ((d->resolveMask & QQuickIconPrivate::HeightResolved) && d->height == height)
+ return;
+
d->height = height;
+ d->resolveMask |= QQuickIconPrivate::HeightResolved;
+}
+
+void QQuickIcon::resetHeight()
+{
+ d->height = 0;
+ d->resolveMask &= ~QQuickIconPrivate::HeightResolved;
}
QColor QQuickIcon::color() const
@@ -141,12 +194,39 @@ QColor QQuickIcon::color() const
void QQuickIcon::setColor(const QColor &color)
{
+ if ((d->resolveMask & QQuickIconPrivate::ColorResolved) && d->color == color)
+ return;
+
d->color = color;
+ d->resolveMask |= QQuickIconPrivate::ColorResolved;
}
void QQuickIcon::resetColor()
{
d->color = Qt::transparent;
+ d->resolveMask &= ~QQuickIconPrivate::ColorResolved;
+}
+
+QQuickIcon QQuickIcon::resolve(const QQuickIcon &other) const
+{
+ QQuickIcon resolved = *this;
+
+ if (!(d->resolveMask & QQuickIconPrivate::NameResolved))
+ resolved.setName(other.name());
+
+ if (!(d->resolveMask & QQuickIconPrivate::SourceResolved))
+ resolved.setSource(other.source());
+
+ if (!(d->resolveMask & QQuickIconPrivate::WidthResolved))
+ resolved.setWidth(other.width());
+
+ if (!(d->resolveMask & QQuickIconPrivate::HeightResolved))
+ resolved.setHeight(other.height());
+
+ if (!(d->resolveMask & QQuickIconPrivate::ColorResolved))
+ resolved.setColor(other.color());
+
+ return resolved;
}
QT_END_NAMESPACE