QColor: port to QStringView
... leveraging the existing support for QLatin1String, which is the char equivalent of QStringView. The only noteworthy changes here are the port of the low-level functions to size_t and that the internal template function, setColorFromString(), can now take its argument by value, since only views are ever passed to it anymore. In the test, used new QTest::addRow() to format test names, and introduced temporaries to avoid re-calculating the same input values for every check. Change-Id: Ia3c59e5c435ff753f34993a8d85c0c0b4e8e2b22 Reviewed-by: Milian Wolff <milian.wolff@kdab.com> Reviewed-by: Edward Welbourne <edward.welbourne@qt.io> Reviewed-by: Lars Knoll <lars.knoll@qt.io>bb10
parent
7180236063
commit
46351b4e60
|
|
@ -79,7 +79,7 @@ static inline int hex2int(char s)
|
|||
return h < 0 ? h : (h << 4) | h;
|
||||
}
|
||||
|
||||
static bool get_hex_rgb(const char *name, int len, QRgb *rgb)
|
||||
static bool get_hex_rgb(const char *name, size_t len, QRgb *rgb)
|
||||
{
|
||||
if (name[0] != '#')
|
||||
return false;
|
||||
|
|
@ -124,12 +124,12 @@ bool qt_get_hex_rgb(const char *name, QRgb *rgb)
|
|||
return get_hex_rgb(name, qstrlen(name), rgb);
|
||||
}
|
||||
|
||||
static bool get_hex_rgb(const QChar *str, int len, QRgb *rgb)
|
||||
static bool get_hex_rgb(const QChar *str, size_t len, QRgb *rgb)
|
||||
{
|
||||
if (len > 13)
|
||||
return false;
|
||||
char tmp[16];
|
||||
for (int i = 0; i < len; ++i)
|
||||
for (size_t i = 0; i < len; ++i)
|
||||
tmp[i] = str[i].toLatin1();
|
||||
tmp[len] = 0;
|
||||
return get_hex_rgb(tmp, len, rgb);
|
||||
|
|
@ -858,6 +858,7 @@ QString QColor::name(NameFormat format) const
|
|||
return QString();
|
||||
}
|
||||
|
||||
#if QT_STRINGVIEW_LEVEL < 2
|
||||
/*!
|
||||
Sets the RGB value of this QColor to \a name, which may be in one
|
||||
of these formats:
|
||||
|
|
@ -882,6 +883,17 @@ QString QColor::name(NameFormat format) const
|
|||
*/
|
||||
|
||||
void QColor::setNamedColor(const QString &name)
|
||||
{
|
||||
setColorFromString(QStringView(name));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\overload
|
||||
\since 5.10
|
||||
*/
|
||||
|
||||
void QColor::setNamedColor(QStringView name)
|
||||
{
|
||||
setColorFromString(name);
|
||||
}
|
||||
|
|
@ -896,6 +908,7 @@ void QColor::setNamedColor(QLatin1String name)
|
|||
setColorFromString(name);
|
||||
}
|
||||
|
||||
#if QT_STRINGVIEW_LEVEL < 2
|
||||
/*!
|
||||
\since 4.7
|
||||
|
||||
|
|
@ -909,7 +922,17 @@ void QColor::setNamedColor(QLatin1String name)
|
|||
*/
|
||||
bool QColor::isValidColor(const QString &name)
|
||||
{
|
||||
return !name.isEmpty() && QColor().setColorFromString(name);
|
||||
return isValidColor(QStringView(name));
|
||||
}
|
||||
#endif
|
||||
|
||||
/*!
|
||||
\overload
|
||||
\since 5.10
|
||||
*/
|
||||
bool QColor::isValidColor(QStringView name) Q_DECL_NOTHROW
|
||||
{
|
||||
return name.size() && QColor().setColorFromString(name);
|
||||
}
|
||||
|
||||
/*!
|
||||
|
|
@ -922,7 +945,7 @@ bool QColor::isValidColor(QLatin1String name) Q_DECL_NOTHROW
|
|||
}
|
||||
|
||||
template <typename String>
|
||||
bool QColor::setColorFromString(const String &name)
|
||||
bool QColor::setColorFromString(String name)
|
||||
{
|
||||
if (!name.size()) {
|
||||
invalidate();
|
||||
|
|
|
|||
|
|
@ -72,7 +72,10 @@ public:
|
|||
inline QColor(int r, int g, int b, int a = 255);
|
||||
QColor(QRgb rgb) Q_DECL_NOTHROW;
|
||||
QColor(QRgba64 rgba64) Q_DECL_NOTHROW;
|
||||
#if QT_STRINGVIEW_LEVEL < 2
|
||||
inline QColor(const QString& name);
|
||||
#endif
|
||||
explicit inline QColor(QStringView name);
|
||||
inline QColor(const char *aname) : QColor(QLatin1String(aname)) {}
|
||||
inline QColor(QLatin1String name);
|
||||
QColor(Spec spec) Q_DECL_NOTHROW;
|
||||
|
|
@ -95,7 +98,10 @@ public:
|
|||
QString name() const;
|
||||
QString name(NameFormat format) const;
|
||||
|
||||
#if QT_STRINGVIEW_LEVEL < 2
|
||||
void setNamedColor(const QString& name);
|
||||
#endif
|
||||
void setNamedColor(QStringView name);
|
||||
void setNamedColor(QLatin1String name);
|
||||
|
||||
static QStringList colorNames();
|
||||
|
|
@ -221,14 +227,17 @@ public:
|
|||
|
||||
operator QVariant() const;
|
||||
|
||||
#if QT_STRINGVIEW_LEVEL < 2
|
||||
static bool isValidColor(const QString &name);
|
||||
#endif
|
||||
static bool isValidColor(QStringView) Q_DECL_NOTHROW;
|
||||
static bool isValidColor(QLatin1String) Q_DECL_NOTHROW;
|
||||
|
||||
private:
|
||||
|
||||
void invalidate() Q_DECL_NOTHROW;
|
||||
template <typename String>
|
||||
bool setColorFromString(const String &name);
|
||||
bool setColorFromString(String name);
|
||||
|
||||
Spec cspec;
|
||||
union {
|
||||
|
|
@ -280,8 +289,13 @@ inline QColor::QColor(int r, int g, int b, int a)
|
|||
inline QColor::QColor(QLatin1String aname)
|
||||
{ setNamedColor(aname); }
|
||||
|
||||
inline QColor::QColor(QStringView aname)
|
||||
{ setNamedColor(aname); }
|
||||
|
||||
#if QT_STRINGVIEW_LEVEL < 2
|
||||
inline QColor::QColor(const QString& aname)
|
||||
{ setNamedColor(aname); }
|
||||
#endif
|
||||
|
||||
#if QT_VERSION < QT_VERSION_CHECK(6,0,0)
|
||||
inline QColor::QColor(const QColor &acolor) Q_DECL_NOTHROW
|
||||
|
|
|
|||
|
|
@ -545,19 +545,32 @@ void tst_QColor::setNamedColor_data()
|
|||
QColor bySetNamedColor; \
|
||||
bySetNamedColor.setNamedColor(expr); \
|
||||
auto byCtor = QColor(expr); \
|
||||
QTest::newRow(e.name + QByteArrayLiteral(#expr)) \
|
||||
QTest::addRow("%s: %s", e.name, #expr) \
|
||||
<< byCtor << bySetNamedColor << expected; \
|
||||
} while (0) \
|
||||
/*end*/
|
||||
|
||||
ROW(QLatin1String(e.name));
|
||||
ROW(QString(QLatin1String(e.name)));
|
||||
const auto l1 = QLatin1String(e.name);
|
||||
const auto l1UpperBA = QByteArray(e.name).toUpper();
|
||||
const auto l1Upper = QLatin1String(l1UpperBA);
|
||||
const auto l1SpaceBA = QByteArray(e.name).insert(1, ' ');
|
||||
const auto l1Space = QLatin1String(l1SpaceBA);
|
||||
|
||||
const auto u16 = QString(l1);
|
||||
const auto u16Upper = u16.toUpper();
|
||||
const auto u16Space = QString(u16).insert(1, ' ');
|
||||
|
||||
ROW(l1);
|
||||
ROW(u16);
|
||||
ROW(QStringView(u16));
|
||||
// name should be case insensitive
|
||||
ROW(QLatin1String(QByteArray(e.name).toUpper()));
|
||||
ROW(QString(e.name).toUpper());
|
||||
ROW(l1Upper);
|
||||
ROW(u16Upper);
|
||||
ROW(QStringView(u16Upper));
|
||||
// spaces should be ignored
|
||||
ROW(QLatin1String(QByteArray(e.name).insert(1, ' ')));
|
||||
ROW(QString(e.name).insert(1, ' '));
|
||||
ROW(l1Space);
|
||||
ROW(u16Space);
|
||||
ROW(QStringView(u16Space));
|
||||
#undef ROW
|
||||
}
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue