mirror of
https://github.com/jkriege2/JKQtPlotter.git
synced 2024-12-26 10:31:39 +08:00
implemented complex syntax in JKQTPColorDerivationMode::fromString()
This commit is contained in:
parent
ed8b23d7cf
commit
b188d95c01
@ -19,7 +19,6 @@
|
|||||||
|
|
||||||
|
|
||||||
#include "jkqtplotter/jkqtptools.h"
|
#include "jkqtplotter/jkqtptools.h"
|
||||||
#include "jkqtcommon/jkqtpenhancedpainter.h"
|
|
||||||
#include <cmath>
|
#include <cmath>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
@ -602,6 +601,10 @@ QString JKQTPColorDerivationMode::toString() const
|
|||||||
case ColorChangeMode::InvertColor:
|
case ColorChangeMode::InvertColor:
|
||||||
name="inverted_color";
|
name="inverted_color";
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
qDebug()<<"unknown colorModification="<<colorModification<<" in JKQTPColorDerivationMode::toString()";
|
||||||
|
name="same_color";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
// alpha=0: transparent, alpha=1: ppaque
|
// alpha=0: transparent, alpha=1: ppaque
|
||||||
@ -617,6 +620,9 @@ QString JKQTPColorDerivationMode::toString() const
|
|||||||
case TransparencyChangeMode::LessTransparent:
|
case TransparencyChangeMode::LessTransparent:
|
||||||
name+=",less_transparent("+QString::number(transparencyModficationStrength,'f',3)+")";
|
name+=",less_transparent("+QString::number(transparencyModficationStrength,'f',3)+")";
|
||||||
break;
|
break;
|
||||||
|
default:
|
||||||
|
qDebug()<<"unknown transparencyModification="<<transparencyModification<<" in JKQTPColorDerivationMode::toString()";
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return name;
|
return name;
|
||||||
}
|
}
|
||||||
@ -624,10 +630,11 @@ QString JKQTPColorDerivationMode::toString() const
|
|||||||
JKQTPColorDerivationMode JKQTPColorDerivationMode::fromString(const QString &mode)
|
JKQTPColorDerivationMode JKQTPColorDerivationMode::fromString(const QString &mode)
|
||||||
{
|
{
|
||||||
const QString m=mode.trimmed().toLower();
|
const QString m=mode.trimmed().toLower();
|
||||||
|
//qDebug()<<"JKQTPColorDerivationMode::fromString("<<m<<")";
|
||||||
|
|
||||||
// legacy strings
|
// legacy strings
|
||||||
if (m=="transparent" || m=="no_color" || m=="none") return JKQTPColorDerivationMode(JKQTPFFCMFullyTransparentColor);
|
if (m=="transparent" || m=="no_color" || m=="none") return JKQTPColorDerivationMode(JKQTPFFCMFullyTransparentColor);
|
||||||
if (m=="same"||m=="same_color") return JKQTPColorDerivationMode(JKQTPFFCMSameColor);
|
if (m=="same"||m=="same_color"||m.isEmpty()) return JKQTPColorDerivationMode(JKQTPFFCMSameColor);
|
||||||
if (m=="black") return JKQTPColorDerivationMode(JKQTPFFCMBlack);
|
if (m=="black") return JKQTPColorDerivationMode(JKQTPFFCMBlack);
|
||||||
if (m=="white") return JKQTPColorDerivationMode(JKQTPFFCMWhite);
|
if (m=="white") return JKQTPColorDerivationMode(JKQTPFFCMWhite);
|
||||||
if (m=="grey25") return JKQTPColorDerivationMode(JKQTPFFCMGrey25);
|
if (m=="grey25") return JKQTPColorDerivationMode(JKQTPFFCMGrey25);
|
||||||
@ -660,9 +667,68 @@ JKQTPColorDerivationMode JKQTPColorDerivationMode::fromString(const QString &mod
|
|||||||
if (m=="same_non_transparent" || m=="non_transparent") return JKQTPColorDerivationMode(JKQTPFFCMSameNonTransparentColor);
|
if (m=="same_non_transparent" || m=="non_transparent") return JKQTPColorDerivationMode(JKQTPFFCMSameNonTransparentColor);
|
||||||
|
|
||||||
// cleanly analyze string
|
// cleanly analyze string
|
||||||
|
JKQTPColorDerivationMode res;
|
||||||
|
const QStringList parts=mode.split(',');
|
||||||
|
#if (QT_VERSION>=QT_VERSION_CHECK(6, 0, 0))
|
||||||
|
static QRegularExpression rx1arg("(transparency|more_transparent|less_transparent|replace_color_not_transparency|replace_color_and_transparency|darker_color|lighter_color)\\((.*)\\)", QRegularExpression::CaseInsensitiveOption|QRegularExpression::InvertedGreedinessOption);
|
||||||
|
#else
|
||||||
|
const QRegExp rx1arg=[](){ QRegExp rx4("(transparency|more_transparent|less_transparent|replace_color_not_transparency|replace_color_and_transparency|darker_color|lighter_color)\\((.*)\\)", Qt::CaseInsensitive);
|
||||||
|
rx4.setMinimal(false);
|
||||||
|
return rx4;
|
||||||
|
}();
|
||||||
|
#endif
|
||||||
|
for (QString p: parts) {
|
||||||
|
p=p.removeIf([](QChar c) { return c.isSpace()||c=='\t';}).trimmed();
|
||||||
|
if (p=="same_color") res.colorModification=ColorChangeMode::SameColor;
|
||||||
|
else if (p=="invert"||p=="inverted"||p=="inverted_color") res.colorModification=ColorChangeMode::InvertColor;
|
||||||
|
else if (p=="invert"||p=="inverted"||p=="inverted_color") res.colorModification=ColorChangeMode::InvertColor;
|
||||||
|
else if (p=="more_transparent") { res.transparencyModification=TransparencyChangeMode::MoreTransparent; res.transparencyModficationStrength=0.3; }
|
||||||
|
else if (p=="non_transparent" || p=="opaque") { res.transparencyModification=TransparencyChangeMode::ReplaceTransparency; res.targetTransparency=0; }
|
||||||
|
else if (p=="transparent") { res.transparencyModification=TransparencyChangeMode::ReplaceTransparency; res.targetTransparency=1; }
|
||||||
|
else if (p=="less_transpatransparentrent") { res.transparencyModification=TransparencyChangeMode::LessTransparent; res.transparencyModficationStrength=0.3; }
|
||||||
|
else if (p=="same_transparency") { res.transparencyModification=TransparencyChangeMode::SameTransparency; }
|
||||||
|
else {
|
||||||
|
#if (QT_VERSION>=QT_VERSION_CHECK(6, 0, 0))
|
||||||
|
const auto m1arg=rx1arg.match(p);
|
||||||
|
if (m1arg.hasMatch()) {
|
||||||
|
const QString instr=m1arg.captured(1).trimmed();
|
||||||
|
const QString arg1=m1arg.captured(2).trimmed();
|
||||||
|
#else
|
||||||
|
if (rx1arg.indexIn(slt[i])>=0) {
|
||||||
|
const QString instr=rx1arg.cap(1).trimmed();
|
||||||
|
const QString arg1=rx1arg.cap(2).trimmed();
|
||||||
|
#endif
|
||||||
|
bool arg1f_ok=false;
|
||||||
|
const float arg1f=arg1.toFloat(&arg1f_ok);
|
||||||
|
if (instr=="transparency" && arg1f_ok) {
|
||||||
|
res.transparencyModification=TransparencyChangeMode::ReplaceTransparency;
|
||||||
|
res.targetTransparency=arg1f;
|
||||||
|
} else if (instr=="more_transparent" && arg1f_ok) {
|
||||||
|
res.transparencyModification=TransparencyChangeMode::MoreTransparent;
|
||||||
|
res.transparencyModficationStrength=arg1f;
|
||||||
|
} else if (instr=="less_transparent" && arg1f_ok) {
|
||||||
|
res.transparencyModification=TransparencyChangeMode::LessTransparent;
|
||||||
|
res.transparencyModficationStrength=arg1f;
|
||||||
|
} else if (instr=="darker_color" && arg1f_ok) {
|
||||||
|
res.colorModification=ColorChangeMode::DarkerColor;
|
||||||
|
res.colorModificationStrength=arg1f;
|
||||||
|
} else if (instr=="lighter_color" && arg1f_ok) {
|
||||||
|
res.colorModification=ColorChangeMode::LighterColor;
|
||||||
|
res.colorModificationStrength=arg1f;
|
||||||
|
} else if (instr=="replace_color_not_transparency") {
|
||||||
|
const QColor arg1c=jkqtp_String2QColor(arg1);
|
||||||
|
res.colorModification=ColorChangeMode::ReplaceColorNotTransparency;
|
||||||
|
res.targetColor=arg1c;
|
||||||
|
} else if (instr=="replace_color_and_transparency") {
|
||||||
|
const QColor arg1c=jkqtp_String2QColor(arg1);
|
||||||
|
res.colorModification=ColorChangeMode::ReplaceColorAndTransparency;
|
||||||
|
res.targetColor=arg1c;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return res;
|
||||||
return JKQTPColorDerivationMode();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QColor JKQTPColorDerivationMode::apply(const QColor& basecolor) const
|
QColor JKQTPColorDerivationMode::apply(const QColor& basecolor) const
|
||||||
|
Loading…
Reference in New Issue
Block a user