File kf6-breeze-icons-skip-unused.patch of Package kf6-breeze-icons
From 0ba3967bf1cb94e6b6b610f7d01e7474db5aeaeb Mon Sep 17 00:00:00 2001
From: Mykola Krachkovsky <w01dnick@gmail.com>
Date: Fri, 14 Jun 2024 20:11:00 +0000
Subject: [PATCH] skip unneeded icons while generation dark theme icons for
decrease size of package
References: boo#1226207
---
src/tools/generate-symbolic-dark.cpp | 45 ++++++++++++++++++++++++++++
1 file changed, 45 insertions(+)
Index: breeze-icons-6.11.0git.20251003T163202~571fb303/src/tools/generate-symbolic-dark.cpp
===================================================================
--- breeze-icons-6.11.0git.20251003T163202~571fb303.orig/src/tools/generate-symbolic-dark.cpp 2025-10-03 16:32:02.000000000 +0200
+++ breeze-icons-6.11.0git.20251003T163202~571fb303/src/tools/generate-symbolic-dark.cpp 2025-10-04 09:05:47.229367936 +0200
@@ -109,6 +109,7 @@
QStringList unwrittenFiles;
QStringList xmlReadErrorFiles;
QStringList xmlWriteErrorFiles;
+ QRE recolorUsage(u"class=\"(?:[^\"]+\\s)?ColorScheme-(?:Text|Background)[\\s\"]"_s);
for (auto &inputDir : std::as_const(inputDirs)) {
QDirIterator dirIt(inputDir, QDirIterator::Subdirectories);
while (dirIt.hasNext()) {
@@ -120,6 +121,11 @@
continue;
}
+ // Skip applets (used by Plasma and recolored at run-time)
+ if (inputFilePath.contains("/applets/256/"_L1)) {
+ continue;
+ }
+
// create dir, might be needed for symlink
QDir outputDir = outputDirInfo.absoluteFilePath();
const auto outputFilePath = outputDir.absoluteFilePath(QString{inputFilePath}.remove(QRE(u".*/icons/"_s)));
@@ -148,11 +154,18 @@
continue;
}
+ // Skip any icons that don't have class `ColorScheme-Text|Background` usage
+ if (!recolorUsage.match(QString::fromUtf8(inputData)).hasMatch()) {
+ continue;
+ }
+
QFile outputFile(outputFilePath);
+ /*
if (!outputFile.open(QIODevice::WriteOnly)) {
unwrittenFiles.append("\""_L1 + outputFile.fileName() + "\": "_L1 + outputFile.errorString());
continue;
}
+ */
QXmlStreamReader reader(inputData);
reader.setNamespaceProcessing(false);
@@ -160,9 +173,32 @@
QXmlStreamWriter writer(&outputData);
writer.setAutoFormatting(true);
+ bool currentColorUsed = false;
while (!reader.atEnd() && !reader.hasError() && !writer.hasError()) {
reader.readNext();
writer.writeCurrentToken(reader);
+ if (!currentColorUsed && reader.isStartElement()) {
+ const auto classAttr = reader.attributes().value("class"_L1);
+ if (classAttr == "ColorScheme-Text"_L1 || classAttr == "ColorScheme-Background"_L1) {
+ const auto styleAttr = reader.attributes().value("style"_L1);
+ if (!styleAttr.isEmpty()) {
+ bool fillCurrentColor = false;
+ bool directColor = false;
+ for (const auto style : styleAttr.split(';'_L1)) {
+ const auto prop = style.split(':'_L1);
+ const auto propName = prop[0].trimmed();
+ const auto propValue = prop[1].trimmed();
+ if ((propName == "fill"_L1 || propName == "stroke"_L1) && propValue == "currentColor"_L1) {
+ fillCurrentColor = true;
+ }
+ if (propName == "color"_L1 && propValue != "currentColor"_L1) {
+ directColor = true;
+ }
+ }
+ currentColorUsed = fillCurrentColor && !directColor;
+ }
+ }
+ }
if (!reader.isStartElement() || reader.qualifiedName() != "style"_L1 || reader.attributes().value("id"_L1) != "current-color-scheme"_L1) {
continue;
}
@@ -174,6 +210,10 @@
writer.writeCharacters(convertStylesheet(reader.text().toString()));
}
+ if (!currentColorUsed) {
+ continue;
+ }
+
if (reader.hasError()) {
xmlReadErrorFiles.append("\""_L1 + inputFile.fileName() + "\": "_L1 + reader.errorString());
}
@@ -181,6 +221,11 @@
xmlWriteErrorFiles.append("\""_L1 + outputFile.fileName() + "\""_L1);
}
+ if (!outputFile.open(QIODevice::WriteOnly)) {
+ unwrittenFiles.append("\""_L1 + outputFile.fileName() + "\": "_L1 + outputFile.errorString());
+ continue;
+ }
+
auto bytesWritten = outputFile.write(outputData);
outputFile.close();
wasAnyFileWritten |= bytesWritten > 0;