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(+)

diff --git a/src/tools/generate-symbolic-dark.cpp b/src/tools/generate-symbolic-dark.cpp
index 365c5ea0..62fb8400 100644
--- a/src/tools/generate-symbolic-dark.cpp
+++ b/src/tools/generate-symbolic-dark.cpp
@@ -109,6 +109,7 @@ int main(int argc, char **argv)
     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()) {
@@ -121,6 +122,11 @@ int main(int argc, char **argv)
                 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)));
@@ -149,11 +155,18 @@ int main(int argc, char **argv)
                 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);
@@ -161,9 +174,32 @@ int main(int argc, char **argv)
             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;
                 }
@@ -175,6 +211,10 @@ int main(int argc, char **argv)
                 writer.writeCharacters(convertStylesheet(reader.text().toString()));
             }
 
+            if (!currentColorUsed) {
+                continue;
+            }
+
             if (reader.hasError()) {
                 xmlReadErrorFiles.append("\""_L1 + inputFile.fileName() + "\": "_L1 + reader.errorString());
             }
@@ -182,6 +222,11 @@ int main(int argc, char **argv)
                 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;
-- 
2.49.0

openSUSE Build Service is sponsored by