Improvements to catpack

Signed-off-by: Trial97 <alexandru.tripon97@gmail.com>
This commit is contained in:
Trial97 2023-11-09 21:38:38 +02:00
parent a30292009a
commit 7532a41043
No known key found for this signature in database
GPG Key ID: 55EF5DA53DB36318
5 changed files with 31 additions and 12 deletions

View File

@ -465,7 +465,7 @@ void InstanceView::paintEvent([[maybe_unused]] QPaintEvent* event)
widWidth = m_catPixmap.width(); widWidth = m_catPixmap.width();
if (m_catPixmap.height() < widHeight) if (m_catPixmap.height() < widHeight)
widHeight = m_catPixmap.height(); widHeight = m_catPixmap.height();
auto pixmap = m_catPixmap.scaled(widWidth, widHeight, Qt::KeepAspectRatio); auto pixmap = m_catPixmap.scaled(widWidth, widHeight, Qt::KeepAspectRatio, Qt::SmoothTransformation);
QRect rectOfPixmap = pixmap.rect(); QRect rectOfPixmap = pixmap.rect();
rectOfPixmap.moveBottomRight(this->viewport()->rect().bottomRight()); rectOfPixmap.moveBottomRight(this->viewport()->rect().bottomRight());
painter.drawPixmap(rectOfPixmap.topLeft(), pixmap); painter.drawPixmap(rectOfPixmap.topLeft(), pixmap);

View File

@ -36,7 +36,10 @@
#include "ui/themes/CatPack.h" #include "ui/themes/CatPack.h"
#include <QDate> #include <QDate>
#include <QDir> #include <QDir>
#include <QDirIterator>
#include <QFileInfo> #include <QFileInfo>
#include <QImageReader>
#include <QRandomGenerator>
#include "FileSystem.h" #include "FileSystem.h"
#include "Json.h" #include "Json.h"
@ -79,7 +82,7 @@ JsonCatPack::JsonCatPack(QFileInfo& manifestInfo) : BasicCatPack(manifestInfo.di
auto doc = Json::requireDocument(manifestInfo.absoluteFilePath(), "CatPack JSON file"); auto doc = Json::requireDocument(manifestInfo.absoluteFilePath(), "CatPack JSON file");
const auto root = doc.object(); const auto root = doc.object();
m_name = Json::requireString(root, "name", "Catpack name"); m_name = Json::requireString(root, "name", "Catpack name");
m_defaultPath = FS::PathCombine(path, Json::requireString(root, "default", "Default Cat")); m_default_path = FS::PathCombine(path, Json::requireString(root, "default", "Default Cat"));
auto variants = Json::ensureArray(root, "variants", QJsonArray(), "Catpack Variants"); auto variants = Json::ensureArray(root, "variants", QJsonArray(), "Catpack Variants");
for (auto v : variants) { for (auto v : variants) {
auto variant = Json::ensureObject(v, QJsonObject(), "Cat variant"); auto variant = Json::ensureObject(v, QJsonObject(), "Cat variant");
@ -117,5 +120,21 @@ QString JsonCatPack::path(QDate now)
if (startDate <= now && now <= endDate) if (startDate <= now && now <= endDate)
return var.path; return var.path;
} }
return m_defaultPath; auto dInfo = QFileInfo(m_default_path);
if (!dInfo.isDir())
return m_default_path;
QStringList supportedImageFormats;
for (auto format : QImageReader::supportedImageFormats()) {
supportedImageFormats.append("*." + format);
}
auto files = QDir(m_default_path).entryInfoList(supportedImageFormats, QDir::Files, QDir::Name);
if (files.length() == 0)
return "";
auto idx = now.dayOfYear() % files.length();
auto isRandom = dInfo.fileName().compare("random", Qt::CaseInsensitive) == 0;
if (isRandom)
idx = QRandomGenerator::global()->bounded(0, files.length());
return files[idx].absoluteFilePath();
} }

View File

@ -87,6 +87,6 @@ class JsonCatPack : public BasicCatPack {
QString path(QDate now); QString path(QDate now);
private: private:
QString m_defaultPath; QString m_default_path;
QList<Variant> m_variants; QList<Variant> m_variants;
}; };

View File

@ -178,8 +178,8 @@ QList<ITheme*> ThemeManager::getValidApplicationThemes()
QList<CatPack*> ThemeManager::getValidCatPacks() QList<CatPack*> ThemeManager::getValidCatPacks()
{ {
QList<CatPack*> ret; QList<CatPack*> ret;
ret.reserve(m_catPacks.size()); ret.reserve(m_cat_packs.size());
for (auto&& [id, theme] : m_catPacks) { for (auto&& [id, theme] : m_cat_packs) {
ret.append(theme.get()); ret.append(theme.get());
} }
return ret; return ret;
@ -244,8 +244,8 @@ void ThemeManager::applyCurrentlySelectedTheme(bool initial)
QString ThemeManager::getCatPack(QString catName) QString ThemeManager::getCatPack(QString catName)
{ {
auto catIter = m_catPacks.find(!catName.isEmpty() ? catName : APPLICATION->settings()->get("BackgroundCat").toString()); auto catIter = m_cat_packs.find(!catName.isEmpty() ? catName : APPLICATION->settings()->get("BackgroundCat").toString());
if (catIter != m_catPacks.end()) { if (catIter != m_cat_packs.end()) {
auto& catPack = catIter->second; auto& catPack = catIter->second;
themeDebugLog() << "applying catpack" << catPack->id(); themeDebugLog() << "applying catpack" << catPack->id();
return catPack->path(); return catPack->path();
@ -253,14 +253,14 @@ QString ThemeManager::getCatPack(QString catName)
themeWarningLog() << "Tried to get invalid catPack:" << catName; themeWarningLog() << "Tried to get invalid catPack:" << catName;
} }
return m_catPacks.begin()->second->path(); return m_cat_packs.begin()->second->path();
} }
QString ThemeManager::addCatPack(std::unique_ptr<CatPack> catPack) QString ThemeManager::addCatPack(std::unique_ptr<CatPack> catPack)
{ {
QString id = catPack->id(); QString id = catPack->id();
if (m_catPacks.find(id) == m_catPacks.end()) if (m_cat_packs.find(id) == m_cat_packs.end())
m_catPacks.emplace(id, std::move(catPack)); m_cat_packs.emplace(id, std::move(catPack));
else else
themeWarningLog() << "CatPack(" << id << ") not added to prevent id duplication"; themeWarningLog() << "CatPack(" << id << ") not added to prevent id duplication";
return id; return id;

View File

@ -61,7 +61,7 @@ class ThemeManager {
QDir m_iconThemeFolder{ "iconthemes" }; QDir m_iconThemeFolder{ "iconthemes" };
QDir m_applicationThemeFolder{ "themes" }; QDir m_applicationThemeFolder{ "themes" };
QDir m_catPacksFolder{ "catpacks" }; QDir m_catPacksFolder{ "catpacks" };
std::map<QString, std::unique_ptr<CatPack>> m_catPacks; std::map<QString, std::unique_ptr<CatPack>> m_cat_packs;
void initializeThemes(); void initializeThemes();
void initializeCatPacks(); void initializeCatPacks();