File indexing completed on 2024-05-12 05:38:57
0001 /* SPDX-FileCopyrightText: 2017 The Qt Company Ltd. 0002 * SPDX-FileCopyrightText: 2020 Noah Davis <noahadvs@gmail.com> 0003 * SPDX-License-Identifier: LGPL-3.0-only OR GPL-2.0-or-later 0004 */ 0005 // Almost completely copy/pasted from qtquickcontrols2 so that I don't need to depend on private headers 0006 0007 #include "qquickicon_p.h" 0008 0009 namespace Breeze 0010 { 0011 0012 class QQuickIconPrivate : public QSharedData 0013 { 0014 public: 0015 QString name; 0016 QUrl source; 0017 QUrl resolvedSource; // UNUSED: needed to keep compatibility with Qt's QQuickIcon 0018 int width = 0; 0019 int height = 0; 0020 QColor color = Qt::transparent; 0021 bool cache = true; 0022 0023 enum ResolveProperties { 0024 NameResolved = 0x0001, 0025 SourceResolved = 0x0002, 0026 WidthResolved = 0x0004, 0027 HeightResolved = 0x0008, 0028 ColorResolved = 0x0010, 0029 CacheResolved = 0x0020, 0030 AllPropertiesResolved = 0x1ffff, 0031 }; 0032 0033 // This is based on QFont's resolve_mask. 0034 int resolveMask = 0; 0035 }; 0036 0037 QQuickIcon::QQuickIcon() 0038 : d(new QQuickIconPrivate) 0039 { 0040 } 0041 0042 QQuickIcon::QQuickIcon(const QQuickIcon &other) 0043 : d(other.d) 0044 { 0045 } 0046 0047 QQuickIcon::~QQuickIcon() 0048 { 0049 } 0050 0051 QQuickIcon &QQuickIcon::operator=(const QQuickIcon &other) 0052 { 0053 d = other.d; 0054 return *this; 0055 } 0056 0057 bool QQuickIcon::operator==(const QQuickIcon &other) const 0058 { 0059 return d == other.d // 0060 || (d->name == other.d->name // 0061 && d->source == other.d->source // 0062 && d->width == other.d->width // 0063 && d->height == other.d->height // 0064 && d->color == other.d->color // 0065 && d->cache == other.d->cache); 0066 } 0067 0068 bool QQuickIcon::operator!=(const QQuickIcon &other) const 0069 { 0070 return !(*this == other); 0071 } 0072 0073 bool QQuickIcon::isEmpty() const 0074 { 0075 return d->name.isEmpty() && d->source.isEmpty(); 0076 } 0077 0078 QString QQuickIcon::name() const 0079 { 0080 return d->name; 0081 } 0082 0083 void QQuickIcon::setName(const QString &name) 0084 { 0085 if ((d->resolveMask & QQuickIconPrivate::NameResolved) && d->name == name) 0086 return; 0087 0088 d.detach(); 0089 d->name = name; 0090 d->resolveMask |= QQuickIconPrivate::NameResolved; 0091 } 0092 0093 void QQuickIcon::resetName() 0094 { 0095 d.detach(); 0096 d->name = QString(); 0097 d->resolveMask &= ~QQuickIconPrivate::NameResolved; 0098 } 0099 0100 QUrl QQuickIcon::source() const 0101 { 0102 return d->source; 0103 } 0104 0105 void QQuickIcon::setSource(const QUrl &source) 0106 { 0107 if ((d->resolveMask & QQuickIconPrivate::SourceResolved) && d->source == source) 0108 return; 0109 0110 d.detach(); 0111 d->source = source; 0112 d->resolveMask |= QQuickIconPrivate::SourceResolved; 0113 } 0114 0115 void QQuickIcon::resetSource() 0116 { 0117 d.detach(); 0118 d->source = QUrl(); 0119 d->resolveMask &= ~QQuickIconPrivate::SourceResolved; 0120 } 0121 0122 QString QQuickIcon::nameOrSource() const 0123 { 0124 if (!d->name.isEmpty()) { 0125 return d->name; 0126 } else if (d->source.isValid()) { 0127 return d->source.toString(); 0128 } 0129 return QString(); 0130 } 0131 0132 int QQuickIcon::width() const 0133 { 0134 return d->width; 0135 } 0136 0137 void QQuickIcon::setWidth(int width) 0138 { 0139 if ((d->resolveMask & QQuickIconPrivate::WidthResolved) && d->width == width) 0140 return; 0141 0142 d.detach(); 0143 d->width = width; 0144 d->resolveMask |= QQuickIconPrivate::WidthResolved; 0145 } 0146 0147 void QQuickIcon::resetWidth() 0148 { 0149 d.detach(); 0150 d->width = 0; 0151 d->resolveMask &= ~QQuickIconPrivate::WidthResolved; 0152 } 0153 0154 int QQuickIcon::height() const 0155 { 0156 return d->height; 0157 } 0158 0159 void QQuickIcon::setHeight(int height) 0160 { 0161 if ((d->resolveMask & QQuickIconPrivate::HeightResolved) && d->height == height) 0162 return; 0163 0164 d.detach(); 0165 d->height = height; 0166 d->resolveMask |= QQuickIconPrivate::HeightResolved; 0167 } 0168 0169 void QQuickIcon::resetHeight() 0170 { 0171 d.detach(); 0172 d->height = 0; 0173 d->resolveMask &= ~QQuickIconPrivate::HeightResolved; 0174 } 0175 0176 QColor QQuickIcon::color() const 0177 { 0178 return d->color; 0179 } 0180 0181 void QQuickIcon::setColor(const QColor &color) 0182 { 0183 if ((d->resolveMask & QQuickIconPrivate::ColorResolved) && d->color == color) 0184 return; 0185 0186 d.detach(); 0187 d->color = color; 0188 d->resolveMask |= QQuickIconPrivate::ColorResolved; 0189 } 0190 0191 void QQuickIcon::resetColor() 0192 { 0193 d.detach(); 0194 d->color = Qt::transparent; 0195 d->resolveMask &= ~QQuickIconPrivate::ColorResolved; 0196 } 0197 0198 bool QQuickIcon::cache() const 0199 { 0200 return d->cache; 0201 } 0202 0203 void QQuickIcon::setCache(bool cache) 0204 { 0205 if ((d->resolveMask & QQuickIconPrivate::CacheResolved) && d->cache == cache) 0206 return; 0207 0208 d.detach(); 0209 d->cache = cache; 0210 d->resolveMask |= QQuickIconPrivate::CacheResolved; 0211 } 0212 0213 void QQuickIcon::resetCache() 0214 { 0215 d.detach(); 0216 d->cache = true; 0217 d->resolveMask &= ~QQuickIconPrivate::CacheResolved; 0218 } 0219 0220 QQuickIcon QQuickIcon::resolve(const QQuickIcon &other) const 0221 { 0222 QQuickIcon resolved = *this; 0223 resolved.d.detach(); 0224 0225 if (!(d->resolveMask & QQuickIconPrivate::NameResolved)) 0226 resolved.d->name = other.d->name; 0227 0228 if (!(d->resolveMask & QQuickIconPrivate::SourceResolved)) 0229 resolved.d->source = other.d->source; 0230 0231 if (!(d->resolveMask & QQuickIconPrivate::WidthResolved)) 0232 resolved.d->width = other.d->width; 0233 0234 if (!(d->resolveMask & QQuickIconPrivate::HeightResolved)) 0235 resolved.d->height = other.d->height; 0236 0237 if (!(d->resolveMask & QQuickIconPrivate::ColorResolved)) 0238 resolved.d->color = other.d->color; 0239 0240 if (!(d->resolveMask & QQuickIconPrivate::CacheResolved)) 0241 resolved.d->cache = other.d->cache; 0242 0243 return resolved; 0244 } 0245 0246 } 0247 0248 #include "moc_qquickicon_p.cpp"