Skip to content

Commit e8d6c04

Browse files
deepin-ci-robotmhduiy
authored andcommitted
sync: from linuxdeepin/dtkgui
Synchronize source files from linuxdeepin/dtkgui. Source-pull-request: linuxdeepin/dtkgui#348
1 parent 4e55683 commit e8d6c04

1 file changed

Lines changed: 40 additions & 9 deletions

File tree

tools/dci-icon-theme/main.cpp

Lines changed: 40 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,37 @@ static inline void dciChecker(bool result, std::function<const QString()> cb) {
4343
}
4444
}
4545

46+
// TODO 应该使用xdg图标查找规范解析index.theme来查找尺寸
47+
static uint foundSize(const QFileInfo &fileInfo) {
48+
QDir dir = fileInfo.absoluteDir();
49+
50+
// 解析尺寸
51+
auto parseSize = [](const QString &dirName) -> uint {
52+
bool ok;
53+
if (int size = dirName.toUInt(&ok); ok) {
54+
return size;
55+
}
56+
57+
if (dirName.contains('x') && dirName.split('x').size() == 2) {
58+
if (int size = dirName.split('x').first().toUInt(&ok); ok) {
59+
return size;
60+
}
61+
}
62+
63+
return 0;
64+
};
65+
66+
if (uint size = parseSize(dir.dirName())) {
67+
return size;
68+
}
69+
70+
// 尝试找上一级目录
71+
if (!dir.cdUp())
72+
return 0;
73+
74+
return parseSize(dir.dirName());
75+
}
76+
4677
static inline QByteArray webpImageData(const QImage &image, int quality) {
4778
QByteArray data;
4879
QBuffer buffer(&data);
@@ -293,10 +324,6 @@ int main(int argc, char *argv[])
293324
#endif
294325
QStringList qualityList = cp.value(scaleQuality).split(":", behavior);
295326

296-
#ifdef QT_DEBUG
297-
surfix = cp.value(scaleQuality).prepend("-");
298-
#endif
299-
300327
for (const QString &kv : qualityList) {
301328
auto sq = kv.split("=");
302329
if (sq.size() != 2) {
@@ -418,10 +445,9 @@ int main(int argc, char *argv[])
418445

419446
for (const QFileInfo &file : files) {
420447
QString dirName = file.absoluteDir().dirName();
421-
bool isNum = false;
422-
dirName.toInt(&isNum);
423-
dirName.prepend("/");
424-
448+
uint iconSize = foundSize(file);
449+
dirName = iconSize > 0 ? QString("/%1").arg(iconSize) : dirName.prepend("/");
450+
425451
// Initialize DCI file once per icon group
426452
if (dciFile.isNull()) {
427453
if (QFileInfo::exists(dciFilePath)) {
@@ -438,10 +464,15 @@ int main(int argc, char *argv[])
438464

439465
qInfo() << "Writing to dci file:" << file.absoluteFilePath() << "==>" << dciFilePath;
440466

441-
QString sizeDir = isNum ? dirName : "/256"; // "/256"
467+
QString sizeDir = iconSize > 0 ? dirName : "/256"; // "/256" as default
442468
QString normalLight = sizeDir + "/normal.light"; // "/256/normal.light"
443469
QString normalDark = sizeDir + "/normal.dark"; // "/256/normal.dark"
444470

471+
if (dciFile->exists(sizeDir)) {
472+
qWarning() << "Skip exists dci file:" << dciFilePath << sizeDir << dciFile->list(sizeDir);
473+
continue;
474+
}
475+
445476
dciChecker(dciFile->mkdir(sizeDir), [&]{return dciFile->lastErrorString();});
446477
dciChecker(dciFile->mkdir(normalLight), [&]{return dciFile->lastErrorString();});
447478
if (!writeImage(*dciFile, file.filePath(), normalLight))

0 commit comments

Comments
 (0)