aboutsummaryrefslogtreecommitdiff
path: root/launcher
diff options
context:
space:
mode:
Diffstat (limited to 'launcher')
-rw-r--r--launcher/Application.cpp6
-rw-r--r--launcher/CMakeLists.txt5
-rw-r--r--launcher/FileSystem.cpp2
-rw-r--r--launcher/InstanceImportTask.cpp45
-rw-r--r--launcher/InstanceImportTask.h6
-rw-r--r--launcher/InstanceList.cpp17
-rw-r--r--launcher/InstanceList.h2
-rw-r--r--launcher/InstancePageProvider.h2
-rw-r--r--launcher/InstanceTask.cpp23
-rw-r--r--launcher/InstanceTask.h17
-rw-r--r--launcher/MTPixmapCache.h95
-rw-r--r--launcher/minecraft/mod/ResourcePack.cpp14
-rw-r--r--launcher/modplatform/flame/FlameInstanceCreationTask.cpp58
-rw-r--r--launcher/modplatform/flame/FlameInstanceCreationTask.h16
-rw-r--r--launcher/modplatform/modpacksch/FTBPackInstallTask.cpp3
-rw-r--r--launcher/modplatform/modrinth/ModrinthInstanceCreationTask.cpp60
-rw-r--r--launcher/modplatform/modrinth/ModrinthInstanceCreationTask.h16
-rw-r--r--launcher/modplatform/modrinth/ModrinthPackManifest.cpp1
-rw-r--r--launcher/modplatform/modrinth/ModrinthPackManifest.h1
-rw-r--r--launcher/resources/breeze_dark/breeze_dark.qrc1
-rw-r--r--launcher/resources/breeze_dark/scalable/discord.svg2
-rw-r--r--launcher/resources/breeze_dark/scalable/new.svg15
-rw-r--r--launcher/resources/breeze_light/breeze_light.qrc1
-rw-r--r--launcher/resources/breeze_light/scalable/centralmods.svg2
-rw-r--r--launcher/resources/breeze_light/scalable/coremods.svg2
-rw-r--r--launcher/resources/breeze_light/scalable/discord.svg2
-rw-r--r--launcher/resources/breeze_light/scalable/jarmods.svg2
-rw-r--r--launcher/resources/breeze_light/scalable/new.svg15
-rw-r--r--launcher/ui/InstanceWindow.cpp6
-rw-r--r--launcher/ui/MainWindow.cpp23
-rw-r--r--launcher/ui/dialogs/BlockedModsDialog.cpp10
-rw-r--r--launcher/ui/dialogs/BlockedModsDialog.h1
-rw-r--r--launcher/ui/pages/BasePageContainer.h3
-rw-r--r--launcher/ui/pages/instance/ExternalResourcesPage.cpp10
-rw-r--r--launcher/ui/pages/instance/ExternalResourcesPage.h3
-rw-r--r--launcher/ui/pages/instance/ManagedPackPage.cpp432
-rw-r--r--launcher/ui/pages/instance/ManagedPackPage.h152
-rw-r--r--launcher/ui/pages/instance/ManagedPackPage.ui193
-rw-r--r--launcher/ui/pages/instance/ScreenshotsPage.cpp13
-rw-r--r--launcher/ui/pages/instance/ScreenshotsPage.h7
-rw-r--r--launcher/ui/pages/instance/ServersPage.cpp10
-rw-r--r--launcher/ui/pages/instance/ServersPage.h4
-rw-r--r--launcher/ui/pages/instance/VersionPage.cpp15
-rw-r--r--launcher/ui/pages/instance/VersionPage.h5
-rw-r--r--launcher/ui/pages/instance/WorldListPage.cpp10
-rw-r--r--launcher/ui/pages/instance/WorldListPage.h4
-rw-r--r--launcher/ui/pages/modplatform/flame/FlamePage.cpp23
-rw-r--r--launcher/ui/pages/modplatform/flame/FlamePage.h2
-rw-r--r--launcher/ui/pages/modplatform/modrinth/ModrinthPage.cpp6
-rw-r--r--launcher/ui/widgets/PageContainer.cpp5
-rw-r--r--launcher/ui/widgets/PageContainer.h1
-rw-r--r--launcher/ui/widgets/WideBar.cpp250
-rw-r--r--launcher/ui/widgets/WideBar.h30
53 files changed, 1430 insertions, 219 deletions
diff --git a/launcher/Application.cpp b/launcher/Application.cpp
index 8447083c..3f313ee4 100644
--- a/launcher/Application.cpp
+++ b/launcher/Application.cpp
@@ -97,6 +97,7 @@
#include <QIcon>
#include "InstanceList.h"
+#include "MTPixmapCache.h"
#include <minecraft/auth/AccountList.h>
#include "icons/IconList.h"
@@ -142,6 +143,8 @@
static const QLatin1String liveCheckFile("live.check");
+PixmapCache* PixmapCache::s_instance = nullptr;
+
namespace {
void appDebugOutput(QtMsgType type, const QMessageLogContext &context, const QString &msg)
{
@@ -694,6 +697,9 @@ Application::Application(int &argc, char **argv) : QApplication(argc, argv)
m_globalSettingsProvider->addPage<AccountListPage>();
m_globalSettingsProvider->addPage<APIPage>();
}
+
+ PixmapCache::setInstance(new PixmapCache(this));
+
qDebug() << "<> Settings loaded.";
}
diff --git a/launcher/CMakeLists.txt b/launcher/CMakeLists.txt
index 879c3157..439feb44 100644
--- a/launcher/CMakeLists.txt
+++ b/launcher/CMakeLists.txt
@@ -89,6 +89,8 @@ set(CORE_SOURCES
# Time
MMCTime.h
MMCTime.cpp
+
+ MTPixmapCache.h
)
if (UNIX AND NOT CYGWIN AND NOT APPLE)
set(CORE_SOURCES
@@ -689,6 +691,8 @@ SET(LAUNCHER_SOURCES
ui/pages/instance/GameOptionsPage.h
ui/pages/instance/VersionPage.cpp
ui/pages/instance/VersionPage.h
+ ui/pages/instance/ManagedPackPage.cpp
+ ui/pages/instance/ManagedPackPage.h
ui/pages/instance/TexturePackPage.h
ui/pages/instance/ResourcePackPage.h
ui/pages/instance/ShaderPackPage.h
@@ -928,6 +932,7 @@ qt_wrap_ui(LAUNCHER_UI
ui/pages/instance/OtherLogsPage.ui
ui/pages/instance/InstanceSettingsPage.ui
ui/pages/instance/VersionPage.ui
+ ui/pages/instance/ManagedPackPage.ui
ui/pages/instance/WorldListPage.ui
ui/pages/instance/ScreenshotsPage.ui
ui/pages/modplatform/atlauncher/AtlOptionalModDialog.ui
diff --git a/launcher/FileSystem.cpp b/launcher/FileSystem.cpp
index 1da50e21..3e8e10a5 100644
--- a/launcher/FileSystem.cpp
+++ b/launcher/FileSystem.cpp
@@ -372,8 +372,6 @@ bool createShortcut(QString destination, QString target, QStringList args, QStri
return true;
#elif defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) || defined(Q_OS_OPENBSD)
- destination += ".desktop";
-
QFile f(destination);
f.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream stream(&f);
diff --git a/launcher/InstanceImportTask.cpp b/launcher/InstanceImportTask.cpp
index 5f459649..b97870da 100644
--- a/launcher/InstanceImportTask.cpp
+++ b/launcher/InstanceImportTask.cpp
@@ -55,11 +55,9 @@
#include <quazip/quazipdir.h>
-InstanceImportTask::InstanceImportTask(const QUrl sourceUrl, QWidget* parent)
-{
- m_sourceUrl = sourceUrl;
- m_parent = parent;
-}
+InstanceImportTask::InstanceImportTask(const QUrl sourceUrl, QWidget* parent, QMap<QString, QString>&& extra_info)
+ : m_sourceUrl(sourceUrl), m_extra_info(extra_info), m_parent(parent)
+{}
bool InstanceImportTask::abort()
{
@@ -259,14 +257,28 @@ void InstanceImportTask::extractAborted()
void InstanceImportTask::processFlame()
{
- auto* inst_creation_task = new FlameCreationTask(m_stagingPath, m_globalSettings, m_parent);
+ auto pack_id_it = m_extra_info.constFind("pack_id");
+ Q_ASSERT(pack_id_it != m_extra_info.constEnd());
+ auto pack_id = pack_id_it.value();
+
+ auto pack_version_id_it = m_extra_info.constFind("pack_version_id");
+ Q_ASSERT(pack_version_id_it != m_extra_info.constEnd());
+ auto pack_version_id = pack_version_id_it.value();
+
+ QString original_instance_id;
+ auto original_instance_id_it = m_extra_info.constFind("original_instance_id");
+ if (original_instance_id_it != m_extra_info.constEnd())
+ original_instance_id = original_instance_id_it.value();
+
+ auto* inst_creation_task = new FlameCreationTask(m_stagingPath, m_globalSettings, m_parent, pack_id, pack_version_id, original_instance_id);
inst_creation_task->setName(*this);
inst_creation_task->setIcon(m_instIcon);
inst_creation_task->setGroup(m_instGroup);
+ inst_creation_task->setConfirmUpdate(shouldConfirmUpdate());
connect(inst_creation_task, &Task::succeeded, this, [this, inst_creation_task] {
- setOverride(inst_creation_task->shouldOverride());
+ setOverride(inst_creation_task->shouldOverride(), inst_creation_task->originalInstanceID());
emitSucceeded();
});
connect(inst_creation_task, &Task::failed, this, &InstanceImportTask::emitFailed);
@@ -323,14 +335,29 @@ void InstanceImportTask::processMultiMC()
void InstanceImportTask::processModrinth()
{
- auto* inst_creation_task = new ModrinthCreationTask(m_stagingPath, m_globalSettings, m_parent, m_sourceUrl.toString());
+ auto pack_id_it = m_extra_info.constFind("pack_id");
+ Q_ASSERT(pack_id_it != m_extra_info.constEnd());
+ auto pack_id = pack_id_it.value();
+
+ QString pack_version_id;
+ auto pack_version_id_it = m_extra_info.constFind("pack_version_id");
+ if (pack_version_id_it != m_extra_info.constEnd())
+ pack_version_id = pack_version_id_it.value();
+
+ QString original_instance_id;
+ auto original_instance_id_it = m_extra_info.constFind("original_instance_id");
+ if (original_instance_id_it != m_extra_info.constEnd())
+ original_instance_id = original_instance_id_it.value();
+
+ auto* inst_creation_task = new ModrinthCreationTask(m_stagingPath, m_globalSettings, m_parent, pack_id, pack_version_id, original_instance_id);
inst_creation_task->setName(*this);
inst_creation_task->setIcon(m_instIcon);
inst_creation_task->setGroup(m_instGroup);
+ inst_creation_task->setConfirmUpdate(shouldConfirmUpdate());
connect(inst_creation_task, &Task::succeeded, this, [this, inst_creation_task] {
- setOverride(inst_creation_task->shouldOverride());
+ setOverride(inst_creation_task->shouldOverride(), inst_creation_task->originalInstanceID());
emitSucceeded();
});
connect(inst_creation_task, &Task::failed, this, &InstanceImportTask::emitFailed);
diff --git a/launcher/InstanceImportTask.h b/launcher/InstanceImportTask.h
index ef70c819..6b8ac966 100644
--- a/launcher/InstanceImportTask.h
+++ b/launcher/InstanceImportTask.h
@@ -56,7 +56,7 @@ class InstanceImportTask : public InstanceTask
{
Q_OBJECT
public:
- explicit InstanceImportTask(const QUrl sourceUrl, QWidget* parent = nullptr);
+ explicit InstanceImportTask(const QUrl sourceUrl, QWidget* parent = nullptr, QMap<QString, QString>&& extra_info = {});
bool abort() override;
const QVector<Flame::File> &getBlockedFiles() const
@@ -101,6 +101,10 @@ private: /* data */
Modrinth,
} m_modpackType = ModpackType::Unknown;
+ // Extra info we might need, that's available before, but can't be derived from
+ // the source URL / the resource it points to alone.
+ QMap<QString, QString> m_extra_info;
+
//FIXME: nuke
QWidget* m_parent;
};
diff --git a/launcher/InstanceList.cpp b/launcher/InstanceList.cpp
index cebd70d7..68e3e92c 100644
--- a/launcher/InstanceList.cpp
+++ b/launcher/InstanceList.cpp
@@ -816,7 +816,7 @@ class InstanceStaging : public Task {
void childSucceded()
{
unsigned sleepTime = backoff();
- if (m_parent->commitStagedInstance(m_stagingPath, m_instance_name, m_groupName, m_child->shouldOverride()))
+ if (m_parent->commitStagedInstance(m_stagingPath, m_instance_name, m_groupName, *m_child.get()))
{
emitSucceeded();
return;
@@ -880,25 +880,22 @@ QString InstanceList::getStagedInstancePath()
return path;
}
-bool InstanceList::commitStagedInstance(const QString& path, InstanceName const& instanceName, const QString& groupName, bool should_override)
+bool InstanceList::commitStagedInstance(const QString& path, InstanceName const& instanceName, const QString& groupName, InstanceTask const& commiting)
{
QDir dir;
QString instID;
InstancePtr inst;
+ auto should_override = commiting.shouldOverride();
+
if (should_override) {
- // This is to avoid problems when the instance folder gets manually renamed
- if ((inst = getInstanceByManagedName(instanceName.originalName()))) {
- instID = QFileInfo(inst->instanceRoot()).fileName();
- } else if ((inst = getInstanceByManagedName(instanceName.modifiedName()))) {
- instID = QFileInfo(inst->instanceRoot()).fileName();
- } else {
- instID = FS::RemoveInvalidFilenameChars(instanceName.modifiedName(), '-');
- }
+ instID = commiting.originalInstanceID();
} else {
instID = FS::DirNameFromString(instanceName.modifiedName(), m_instDir);
}
+ Q_ASSERT(!instID.isEmpty());
+
{
WatchLock lock(m_watcher, m_instDir);
QString destination = FS::PathCombine(m_instDir, instID);
diff --git a/launcher/InstanceList.h b/launcher/InstanceList.h
index 3673298f..edacba3c 100644
--- a/launcher/InstanceList.h
+++ b/launcher/InstanceList.h
@@ -133,7 +133,7 @@ public:
* should_override is used when another similar instance already exists, and we want to override it
* - for instance, when updating it.
*/
- bool commitStagedInstance(const QString& keyPath, const InstanceName& instanceName, const QString& groupName, bool should_override);
+ bool commitStagedInstance(const QString& keyPath, const InstanceName& instanceName, const QString& groupName, const InstanceTask&);
/**
* Destroy a previously created staging area given by @keyPath - used when creation fails.
diff --git a/launcher/InstancePageProvider.h b/launcher/InstancePageProvider.h
index bf29377d..5d8beca9 100644
--- a/launcher/InstancePageProvider.h
+++ b/launcher/InstancePageProvider.h
@@ -5,6 +5,7 @@
#include "ui/pages/BasePageProvider.h"
#include "ui/pages/instance/LogPage.h"
#include "ui/pages/instance/VersionPage.h"
+#include "ui/pages/instance/ManagedPackPage.h"
#include "ui/pages/instance/ModFolderPage.h"
#include "ui/pages/instance/ResourcePackPage.h"
#include "ui/pages/instance/TexturePackPage.h"
@@ -33,6 +34,7 @@ public:
values.append(new LogPage(inst));
std::shared_ptr<MinecraftInstance> onesix = std::dynamic_pointer_cast<MinecraftInstance>(inst);
values.append(new VersionPage(onesix.get()));
+ values.append(ManagedPackPage::createPage(onesix.get()));
auto modsPage = new ModFolderPage(onesix.get(), onesix->loaderModList());
modsPage->setFilter("%1 (*.zip *.jar *.litemod)");
values.append(modsPage);
diff --git a/launcher/InstanceTask.cpp b/launcher/InstanceTask.cpp
index 55a44fd3..06682782 100644
--- a/launcher/InstanceTask.cpp
+++ b/launcher/InstanceTask.cpp
@@ -18,6 +18,29 @@ InstanceNameChange askForChangingInstanceName(QWidget* parent, const QString& ol
return InstanceNameChange::ShouldKeep;
}
+ShouldUpdate askIfShouldUpdate(QWidget *parent, QString original_version_name)
+{
+ auto info = CustomMessageBox::selectable(
+ parent, QObject::tr("Similar modpack was found!"),
+ QObject::tr("One or more of your instances are from this same modpack%1. Do you want to create a "
+ "separate instance, or update the existing one?\n\nNOTE: Make sure you made a backup of your important instance data before "
+ "updating, as worlds can be corrupted and some configuration may be lost (due to pack overrides).")
+ .arg(original_version_name),
+ QMessageBox::Information, QMessageBox::Ok | QMessageBox::Reset | QMessageBox::Abort);
+ info->setButtonText(QMessageBox::Ok, QObject::tr("Update existing instance"));
+ info->setButtonText(QMessageBox::Abort, QObject::tr("Create new instance"));
+ info->setButtonText(QMessageBox::Reset, QObject::tr("Cancel"));
+
+ info->exec();
+
+ if (info->clickedButton() == info->button(QMessageBox::Ok))
+ return ShouldUpdate::Update;
+ if (info->clickedButton() == info->button(QMessageBox::Abort))
+ return ShouldUpdate::SkipUpdating;
+ return ShouldUpdate::Cancel;
+
+}
+
QString InstanceName::name() const
{
if (!m_modified_name.isEmpty())
diff --git a/launcher/InstanceTask.h b/launcher/InstanceTask.h
index e35533fc..7c02160a 100644
--- a/launcher/InstanceTask.h
+++ b/launcher/InstanceTask.h
@@ -6,6 +6,8 @@
/* Helpers */
enum class InstanceNameChange { ShouldChange, ShouldKeep };
[[nodiscard]] InstanceNameChange askForChangingInstanceName(QWidget* parent, const QString& old_name, const QString& new_name);
+enum class ShouldUpdate { Update, SkipUpdating, Cancel };
+[[nodiscard]] ShouldUpdate askIfShouldUpdate(QWidget* parent, QString original_version_name);
struct InstanceName {
public:
@@ -42,10 +44,20 @@ class InstanceTask : public Task, public InstanceName {
void setGroup(const QString& group) { m_instGroup = group; }
QString group() const { return m_instGroup; }
+ [[nodiscard]] bool shouldConfirmUpdate() const { return m_confirm_update; }
+ void setConfirmUpdate(bool confirm) { m_confirm_update = confirm; }
+
bool shouldOverride() const { return m_override_existing; }
+ [[nodiscard]] QString originalInstanceID() const { return m_original_instance_id; };
+
protected:
- void setOverride(bool override) { m_override_existing = override; }
+ void setOverride(bool override, QString instance_id_to_override = {})
+ {
+ m_override_existing = override;
+ if (!instance_id_to_override.isEmpty())
+ m_original_instance_id = instance_id_to_override;
+ }
protected: /* data */
SettingsObjectPtr m_globalSettings;
@@ -54,4 +66,7 @@ class InstanceTask : public Task, public InstanceName {
QString m_stagingPath;
bool m_override_existing = false;
+ bool m_confirm_update = true;
+
+ QString m_original_instance_id;
};
diff --git a/launcher/MTPixmapCache.h b/launcher/MTPixmapCache.h
new file mode 100644
index 00000000..57847a0e
--- /dev/null
+++ b/launcher/MTPixmapCache.h
@@ -0,0 +1,95 @@
+#pragma once
+
+#include <QCoreApplication>
+#include <QPixmapCache>
+#include <QThread>
+
+#define GET_TYPE() \
+ Qt::ConnectionType type; \
+ if (QThread::currentThread() != QCoreApplication::instance()->thread()) \
+ type = Qt::BlockingQueuedConnection; \
+ else \
+ type = Qt::DirectConnection;
+
+#define DEFINE_FUNC_NO_PARAM(NAME, RET_TYPE) \
+ static RET_TYPE NAME() \
+ { \
+ RET_TYPE ret; \
+ GET_TYPE() \
+ QMetaObject::invokeMethod(s_instance, "_" #NAME, type, Q_RETURN_ARG(RET_TYPE, ret)); \
+ return ret; \
+ }
+#define DEFINE_FUNC_ONE_PARAM(NAME, RET_TYPE, PARAM_1_TYPE) \
+ static RET_TYPE NAME(PARAM_1_TYPE p1) \
+ { \
+ RET_TYPE ret; \
+ GET_TYPE() \
+ QMetaObject::invokeMethod(s_instance, "_" #NAME, type, Q_RETURN_ARG(RET_TYPE, ret), Q_ARG(PARAM_1_TYPE, p1)); \
+ return ret; \
+ }
+#define DEFINE_FUNC_TWO_PARAM(NAME, RET_TYPE, PARAM_1_TYPE, PARAM_2_TYPE) \
+ static RET_TYPE NAME(PARAM_1_TYPE p1, PARAM_2_TYPE p2) \
+ { \
+ RET_TYPE ret; \
+ GET_TYPE() \
+ QMetaObject::invokeMethod(s_instance, "_" #NAME, type, Q_RETURN_ARG(RET_TYPE, ret), Q_ARG(PARAM_1_TYPE, p1), \
+ Q_ARG(PARAM_2_TYPE, p2)); \
+ return ret; \
+ }
+
+/** A wrapper around QPixmapCache with thread affinity with the main thread.
+ */
+class PixmapCache final : public QObject {
+ Q_OBJECT
+
+ public:
+ PixmapCache(QObject* parent) : QObject(parent) {}
+ ~PixmapCache() override = default;
+
+ static PixmapCache& instance() { return *s_instance; }
+ static void setInstance(PixmapCache* i) { s_instance = i; }
+
+ public:
+ DEFINE_FUNC_NO_PARAM(cacheLimit, int)
+ DEFINE_FUNC_NO_PARAM(clear, bool)
+ DEFINE_FUNC_TWO_PARAM(find, bool, const QString&, QPixmap*)
+ DEFINE_FUNC_TWO_PARAM(find, bool, const QPixmapCache::Key&, QPixmap*)
+ DEFINE_FUNC_TWO_PARAM(insert, bool, const QString&, const QPixmap&)
+ DEFINE_FUNC_ONE_PARAM(insert, QPixmapCache::Key, const QPixmap&)
+ DEFINE_FUNC_ONE_PARAM(remove, bool, const QString&)
+ DEFINE_FUNC_ONE_PARAM(remove, bool, const QPixmapCache::Key&)
+ DEFINE_FUNC_TWO_PARAM(replace, bool, const QPixmapCache::Key&, const QPixmap&)
+ DEFINE_FUNC_ONE_PARAM(setCacheLimit, bool, int)
+
+ // NOTE: Every function returns something non-void to simplify the macros.
+ private slots:
+ int _cacheLimit() { return QPixmapCache::cacheLimit(); }
+ bool _clear()
+ {
+ QPixmapCache::clear();
+ return true;
+ }
+ bool _find(const QString& key, QPixmap* pixmap) { return QPixmapCache::find(key, pixmap); }
+ bool _find(const QPixmapCache::Key& key, QPixmap* pixmap) { return QPixmapCache::find(key, pixmap); }
+ bool _insert(const QString& key, const QPixmap& pixmap) { return QPixmapCache::insert(key, pixmap); }
+ QPixmapCache::Key _insert(const QPixmap& pixmap) { return QPixmapCache::insert(pixmap); }
+ bool _remove(const QString& key)
+ {
+ QPixmapCache::remove(key);
+ return true;
+ }
+ bool _remove(const QPixmapCache::Key& key)
+ {
+ QPixmapCache::remove(key);
+ return true;
+ }
+ bool _replace(const QPixmapCache::Key& key, const QPixmap& pixmap) { return QPixmapCache::replace(key, pixmap); }
+ bool _setCacheLimit(int n)
+ {
+ QPixmapCache::setCacheLimit(n);
+ return true;
+ }
+
+ private:
+ static PixmapCache* s_instance;
+};
diff --git a/launcher/minecraft/mod/ResourcePack.cpp b/launcher/minecraft/mod/ResourcePack.cpp
index 4a9ad21b..3a2fd771 100644
--- a/launcher/minecraft/mod/ResourcePack.cpp
+++ b/launcher/minecraft/mod/ResourcePack.cpp
@@ -1,9 +1,11 @@
#include "ResourcePack.h"
+#include <QCoreApplication>
#include <QDebug>
#include <QMap>
#include <QRegularExpression>
+#include "MTPixmapCache.h"
#include "Version.h"
#include "minecraft/mod/tasks/LocalResourcePackParseTask.h"
@@ -43,16 +45,22 @@ void ResourcePack::setImage(QImage new_image)
Q_ASSERT(!new_image.isNull());
if (m_pack_image_cache_key.key.isValid())
- QPixmapCache::remove(m_pack_image_cache_key.key);
+ PixmapCache::instance().remove(m_pack_image_cache_key.key);
- m_pack_image_cache_key.key = QPixmapCache::insert(QPixmap::fromImage(new_image));
+ m_pack_image_cache_key.key = PixmapCache::instance().insert(QPixmap::fromImage(new_image));
m_pack_image_cache_key.was_ever_used = true;
+
+ // This can happen if the pixmap is too big to fit in the cache :c
+ if (!m_pack_image_cache_key.key.isValid()) {
+ qWarning() << "Could not insert a image cache entry! Ignoring it.";
+ m_pack_image_cache_key.was_ever_used = false;
+ }
}
QPixmap ResourcePack::image(QSize size)