aboutsummaryrefslogtreecommitdiff
path: root/launcher/minecraft/mod/TexturePack.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'launcher/minecraft/mod/TexturePack.cpp')
-rw-r--r--launcher/minecraft/mod/TexturePack.cpp45
1 files changed, 45 insertions, 0 deletions
diff --git a/launcher/minecraft/mod/TexturePack.cpp b/launcher/minecraft/mod/TexturePack.cpp
new file mode 100644
index 00000000..32f69fc7
--- /dev/null
+++ b/launcher/minecraft/mod/TexturePack.cpp
@@ -0,0 +1,45 @@
+#include "TexturePack.h"
+
+#include <QDebug>
+#include <QMap>
+#include <QRegularExpression>
+
+#include "minecraft/mod/tasks/LocalTexturePackParseTask.h"
+
+void TexturePack::setDescription(QString new_description)
+{
+ QMutexLocker locker(&m_data_lock);
+
+ m_description = new_description;
+}
+
+void TexturePack::setImage(QImage new_image)
+{
+ QMutexLocker locker(&m_data_lock);
+
+ Q_ASSERT(!new_image.isNull());
+
+ if (m_pack_image_cache_key.key.isValid())
+ QPixmapCache::remove(m_pack_image_cache_key.key);
+
+ m_pack_image_cache_key.key = QPixmapCache::insert(QPixmap::fromImage(new_image));
+ m_pack_image_cache_key.was_ever_used = true;
+}
+
+QPixmap TexturePack::image(QSize size)
+{
+ QPixmap cached_image;
+ if (QPixmapCache::find(m_pack_image_cache_key.key, &cached_image)) {
+ if (size.isNull())
+ return cached_image;
+ return cached_image.scaled(size);
+ }
+
+ // No valid image we can get
+ if (!m_pack_image_cache_key.was_ever_used)
+ return {};
+
+ // Imaged got evicted from the cache. Re-process it and retry.
+ TexturePackUtils::process(*this);
+ return image(size);
+}