From 8369dbdcc060270f73e79732eb27612423bc131f Mon Sep 17 00:00:00 2001 From: janrupf Date: Tue, 18 Jun 2019 14:13:53 +0200 Subject: [PATCH] GH-2584, GH-1663 Limit icon size to 512x512 --- api/gui/icons/IconList.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/api/gui/icons/IconList.cpp b/api/gui/icons/IconList.cpp index 72edb46f..86ac24a1 100644 --- a/api/gui/icons/IconList.cpp +++ b/api/gui/icons/IconList.cpp @@ -254,17 +254,7 @@ void IconList::installIcons(const QStringList &iconFiles) { for (QString file : iconFiles) { - QFileInfo fileinfo(file); - if (!fileinfo.isReadable() || !fileinfo.isFile()) - continue; - QString target = FS::PathCombine(m_dir.dirName(), fileinfo.fileName()); - - QString suffix = fileinfo.suffix(); - if (suffix != "jpeg" && suffix != "png" && suffix != "jpg" && suffix != "ico" && suffix != "svg" && suffix != "gif") - continue; - - if (!QFile::copy(file, target)) - continue; + installIcon(file, QFileInfo(file).fileName()); } } @@ -272,11 +262,24 @@ void IconList::installIcon(const QString &file, const QString &name) { QFileInfo fileinfo(file); if(!fileinfo.isReadable() || !fileinfo.isFile()) + { + qWarning() << "Failed to install icon" << fileinfo.absoluteFilePath(); return; + } QString target = FS::PathCombine(m_dir.dirName(), name); - QFile::copy(file, target); + QPixmap icon(fileinfo.absoluteFilePath()); + if(icon.isNull()) + { + qWarning() << "Icon " << fileinfo.absoluteFilePath() << "is null"; + return; + } + + auto currentSize = icon.size(); + auto targetedWidth = qMin(currentSize.width(), 512); + auto targetedHeight = qMin(currentSize.height(), 512); + icon.scaled(targetedWidth, targetedHeight).save(target); } bool IconList::iconFileExists(const QString &key) const