QtPBFImagePlugin/src/color.cpp
2018-10-29 00:11:23 +01:00

49 lines
1.3 KiB
C++

#include <QDebug>
#include "color.h"
static qreal pval(const QString &str)
{
QString ts(str.trimmed());
ts.chop(1);
return ts.toFloat() / 100.0;
}
QColor Color::fromJsonString(const QString &str)
{
QColor ret;
if (str.startsWith('#'))
return QColor(str);
else if (str.startsWith("rgb(")) {
QStringList comp(str.mid(4, str.size() - 5).split(','));
if (comp.size() != 3)
return QColor();
ret = QColor(comp.at(0).toInt(), comp.at(1).toInt(),
comp.at(2).toInt());
} else if (str.startsWith("rgba(")) {
QStringList comp(str.mid(5, str.size() - 6).split(','));
if (comp.size() != 4)
return QColor();
ret = QColor(comp.at(0).toInt(), comp.at(1).toInt(),
comp.at(2).toInt(), (int)(comp.at(3).toFloat() * 255));
} else if (str.startsWith("hsl(")) {
QStringList comp(str.mid(4, str.size() - 5).split(','));
if (comp.size() != 3)
return QColor();
ret = QColor::fromHslF(comp.at(0).toFloat() / 360.0, pval(comp.at(1)),
pval(comp.at(2)));
} else if (str.startsWith("hsla(")) {
QStringList comp(str.mid(5, str.size() - 6).split(','));
if (comp.size() != 4)
return QColor();
ret = QColor::fromHslF(comp.at(0).toFloat() / 360.0, pval(comp.at(1)),
pval(comp.at(2)), comp.at(3).toFloat());
}
if (!ret.isValid())
qWarning() << str << ": invalid color";
return ret;
}