diff options
author | Petr Mrázek <peterix@gmail.com> | 2019-05-31 21:52:58 +0200 |
---|---|---|
committer | Petr Mrázek <peterix@gmail.com> | 2019-05-31 21:53:58 +0200 |
commit | 3470a3df966100d4f1ea6488892ac048118a3131 (patch) | |
tree | fc0f649f4bba0859f7f38d2b81876fd52a8266a2 /application | |
parent | 61913daaf3b21960de13340a6069bc3daca8744a (diff) | |
download | MultiMC-3470a3df966100d4f1ea6488892ac048118a3131.tar MultiMC-3470a3df966100d4f1ea6488892ac048118a3131.tar.gz MultiMC-3470a3df966100d4f1ea6488892ac048118a3131.tar.lz MultiMC-3470a3df966100d4f1ea6488892ac048118a3131.tar.xz MultiMC-3470a3df966100d4f1ea6488892ac048118a3131.zip |
NOISSUE improve icon handling while importing and exporting instances
Now it handles formats other than png.
Diffstat (limited to 'application')
-rw-r--r-- | application/dialogs/ExportInstanceDialog.cpp | 60 | ||||
-rw-r--r-- | application/dialogs/IconPickerDialog.cpp | 5 |
2 files changed, 30 insertions, 35 deletions
diff --git a/application/dialogs/ExportInstanceDialog.cpp b/application/dialogs/ExportInstanceDialog.cpp index 5419b000..49c082e9 100644 --- a/application/dialogs/ExportInstanceDialog.cpp +++ b/application/dialogs/ExportInstanceDialog.cpp @@ -343,43 +343,37 @@ void SaveIcon(InstancePtr m_instance) auto iconKey = m_instance->iconKey(); auto iconList = MMC->icons(); auto mmcIcon = iconList->icon(iconKey); - if(mmcIcon) + if(!mmcIcon || mmcIcon->isBuiltIn()) { + return; + } + auto path = mmcIcon->getFilePath(); + if(!path.isNull()) { + QFileInfo inInfo (path); + FS::copy(path, FS::PathCombine(m_instance->instanceRoot(), inInfo.fileName())) (); + return; + } + auto & image = mmcIcon->m_images[mmcIcon->type()]; + auto & icon = image.icon; + auto sizes = icon.availableSizes(); + if(sizes.size() == 0) { - bool saveIcon = false; - switch(mmcIcon->type()) - { - case IconType::FileBased: - case IconType::Transient: - saveIcon = true; - default: - break; - } - if(saveIcon) + return; + } + auto areaOf = [](QSize size) + { + return size.width() * size.height(); + }; + QSize largest = sizes[0]; + // find variant with largest area + for(auto size: sizes) + { + if(areaOf(largest) < areaOf(size)) { - auto & image = mmcIcon->m_images[mmcIcon->type()]; - auto & icon = image.icon; - auto sizes = icon.availableSizes(); - if(sizes.size() == 0) - { - return; - } - auto areaOf = [](QSize size) - { - return size.width() * size.height(); - }; - QSize largest = sizes[0]; - // find variant with largest area - for(auto size: sizes) - { - if(areaOf(largest) < areaOf(size)) - { - largest = size; - } - } - auto pixmap = icon.pixmap(largest); - pixmap.save(FS::PathCombine(m_instance->instanceRoot(), iconKey + ".png")); + largest = size; } } + auto pixmap = icon.pixmap(largest); + pixmap.save(FS::PathCombine(m_instance->instanceRoot(), iconKey + ".png")); } bool ExportInstanceDialog::doExport() diff --git a/application/dialogs/IconPickerDialog.cpp b/application/dialogs/IconPickerDialog.cpp index 7727aa49..7f930717 100644 --- a/application/dialogs/IconPickerDialog.cpp +++ b/application/dialogs/IconPickerDialog.cpp @@ -25,6 +25,7 @@ #include "groupview/InstanceDelegate.h" #include "icons/IconList.h" +#include "icons/IconUtils.h" #include <DesktopServices.h> IconPickerDialog::IconPickerDialog(QWidget *parent) @@ -103,8 +104,8 @@ void IconPickerDialog::addNewIcon() //: The title of the select icons open file dialog QString selectIcons = tr("Select Icons"); //: The type of icon files - QStringList fileNames = QFileDialog::getOpenFileNames(this, selectIcons, QString(), - tr("Icons") + "(*.png *.jpg *.jpeg *.ico *.svg *.gif)"); + auto filter = IconUtils::getIconFilter(); + QStringList fileNames = QFileDialog::getOpenFileNames(this, selectIcons, QString(), tr("Icons %1").arg(filter)); MMC->icons()->installIcons(fileNames); } |