mirror of
https://github.com/YACReader/yacreader
synced 2026-03-01 10:22:58 -05:00
92 lines
2.8 KiB
C++
92 lines
2.8 KiB
C++
#include "icon_utils.h"
|
|
|
|
#include "yacreader_global.h"
|
|
|
|
QString readSvg(const QString &resourcePath)
|
|
{
|
|
QFile in(resourcePath);
|
|
if (!in.open(QIODevice::ReadOnly | QIODevice::Text)) {
|
|
qWarning() << "Failed to open SVG resource:" << resourcePath;
|
|
return {};
|
|
}
|
|
|
|
QString svg = QString::fromUtf8(in.readAll());
|
|
in.close();
|
|
|
|
return svg;
|
|
}
|
|
|
|
QString writeSvg(const QString &svg, const QString &resourcePath, const QString &themeName, const QString &suffix = QString())
|
|
{
|
|
const QString basePath = YACReader::getSettingsPath() + "/themes/" + themeName;
|
|
|
|
QDir().mkpath(basePath);
|
|
|
|
QString fileName = QFileInfo(resourcePath).completeBaseName();
|
|
if (!suffix.isEmpty()) {
|
|
fileName += suffix;
|
|
}
|
|
fileName += "." + QFileInfo(resourcePath).suffix();
|
|
const QString outPath = basePath + "/" + fileName;
|
|
|
|
QFile out(outPath);
|
|
if (!out.open(QIODevice::WriteOnly | QIODevice::Text | QIODevice::Truncate)) {
|
|
qWarning() << "Failed to write SVG:" << outPath;
|
|
return {};
|
|
}
|
|
|
|
out.write(svg.toUtf8());
|
|
out.close();
|
|
|
|
return outPath;
|
|
}
|
|
|
|
QString recolorSvgXML(QString &svg,
|
|
const QString &placeHolder,
|
|
const QColor &color)
|
|
{
|
|
return svg.replace(placeHolder, color.name(QColor::HexRgb), Qt::CaseInsensitive);
|
|
}
|
|
|
|
QString recoloredSvgToThemeFile(const QString &resourcePath,
|
|
const QColor &color, // #f0f (magenta)
|
|
const QString &themeName,
|
|
const QString &suffix)
|
|
{
|
|
auto svg = readSvg(resourcePath);
|
|
|
|
recolorSvgXML(svg, "#f0f", color);
|
|
|
|
return writeSvg(svg, resourcePath, themeName, suffix);
|
|
}
|
|
|
|
QString recoloredSvgToThemeFile(const QString &resourcePath,
|
|
const QColor &color1, // #f0f (magenta)
|
|
const QColor &color2, // #0ff (cyan)
|
|
const QString &themeName,
|
|
const QString &suffix)
|
|
{
|
|
auto svg = readSvg(resourcePath);
|
|
|
|
recolorSvgXML(svg, "#f0f", color1);
|
|
recolorSvgXML(svg, "#0ff", color2);
|
|
|
|
return writeSvg(svg, resourcePath, themeName, suffix);
|
|
}
|
|
|
|
QString recoloredSvgToThemeFile(const QString &resourcePath,
|
|
const QColor &color1, // #f0f (magenta)
|
|
const QColor &color2, // #0ff (cyan)
|
|
const QColor &color3, // #ff0 (yellow)
|
|
const QString &themeName,
|
|
const QString &suffix)
|
|
{
|
|
auto svg = readSvg(resourcePath);
|
|
|
|
recolorSvgXML(svg, "#f0f", color1);
|
|
recolorSvgXML(svg, "#0ff", color2);
|
|
recolorSvgXML(svg, "#ff0", color3);
|
|
|
|
return writeSvg(svg, resourcePath, themeName, suffix);
|
|
}
|