fix: cache icons in settings

This commit is contained in:
bleizix 2025-07-28 17:44:53 +05:00 committed by AlexeyZavar
parent 64b824671a
commit 1dfe68e9f3
2 changed files with 15 additions and 4 deletions

View file

@ -37,6 +37,7 @@ const QVector<QString> icons{
AyuAssets::CHIBI2_ICON,
AyuAssets::EXTERA2_ICON,
};
std::unordered_map<QString, QImage> cachedIcons;
const auto rows = static_cast<int>(icons.size()) / 4 + std::min(1, static_cast<int>(icons.size()) % 4);
@ -83,6 +84,9 @@ IconPicker::IconPicker(QWidget *parent)
setMinimumSize(st::boxWidth, (st::cpIconSize + st::cpPadding) * rows - st::cpPadding);
}
IconPicker::~IconPicker() {
cachedIcons.clear();
}
void IconPicker::paintEvent(QPaintEvent *e) {
Painter p(this);
PainterHighQualityEnabler hq(p);
@ -98,10 +102,16 @@ void IconPicker::paintEvent(QPaintEvent *e) {
if (iconName.isEmpty()) {
continue;
}
auto icon = AyuAssets::loadPreview(iconName)
.scaled(st::cpIconSize, st::cpIconSize, Qt::KeepAspectRatio, Qt::SmoothTransformation);
QImage icon;
if (const auto cached = cachedIcons.find(iconName); cached != cachedIcons.end()) {
icon = cached->second;
} else {
icon = cachedIcons[iconName] = AyuAssets::loadPreview(iconName).scaled(
st::cpIconSize,
st::cpIconSize,
Qt::KeepAspectRatio,
Qt::SmoothTransformation);
}
auto opacity = 0.0f;
if (iconName == wasSelected) {
opacity = 1.0f - animation.value(1.0f);

View file

@ -13,6 +13,7 @@ class IconPicker : public Ui::RpWidget
{
public:
IconPicker(QWidget *parent);
~IconPicker();
protected:
void paintEvent(QPaintEvent *e) override;