Try to reduce memory usage by reusing avatar pixmaps
This commit is contained in:
parent
89015b9f18
commit
52056a79fa
27 changed files with 149 additions and 208 deletions
|
|
@ -9,7 +9,6 @@
|
|||
|
||||
#include "dialogs/MemberList.h"
|
||||
|
||||
#include "AvatarProvider.h"
|
||||
#include "Cache.h"
|
||||
#include "ChatPage.h"
|
||||
#include "Config.h"
|
||||
|
|
@ -28,17 +27,10 @@ MemberItem::MemberItem(const RoomMember &member, QWidget *parent)
|
|||
textLayout_->setMargin(0);
|
||||
textLayout_->setSpacing(0);
|
||||
|
||||
avatar_ = new Avatar(this);
|
||||
avatar_->setSize(44);
|
||||
avatar_ = new Avatar(this, 44);
|
||||
avatar_->setLetter(utils::firstChar(member.display_name));
|
||||
|
||||
if (!member.avatar.isNull())
|
||||
avatar_->setImage(member.avatar);
|
||||
else
|
||||
AvatarProvider::resolve(ChatPage::instance()->currentRoom(),
|
||||
member.user_id,
|
||||
this,
|
||||
[this](const QImage &img) { avatar_->setImage(img); });
|
||||
avatar_->setImage(ChatPage::instance()->currentRoom(), member.user_id);
|
||||
|
||||
QFont nameFont;
|
||||
nameFont.setPointSizeF(nameFont.pointSizeF() * 1.1);
|
||||
|
|
|
|||
|
|
@ -37,8 +37,7 @@ ReceiptItem::ReceiptItem(QWidget *parent,
|
|||
|
||||
auto displayName = Cache::displayName(room_id, user_id);
|
||||
|
||||
avatar_ = new Avatar(this);
|
||||
avatar_->setSize(44);
|
||||
avatar_ = new Avatar(this, 44);
|
||||
avatar_->setLetter(utils::firstChar(displayName));
|
||||
|
||||
// If it's a matrix id we use the second letter.
|
||||
|
|
@ -56,10 +55,7 @@ ReceiptItem::ReceiptItem(QWidget *parent,
|
|||
topLayout_->addWidget(avatar_);
|
||||
topLayout_->addLayout(textLayout_, 1);
|
||||
|
||||
AvatarProvider::resolve(ChatPage::instance()->currentRoom(),
|
||||
user_id,
|
||||
this,
|
||||
[this](const QImage &img) { avatar_->setImage(img); });
|
||||
avatar_->setImage(ChatPage::instance()->currentRoom(), user_id);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
|||
|
|
@ -350,12 +350,12 @@ RoomSettings::RoomSettings(const QString &room_id, QWidget *parent)
|
|||
keyRequestsToggle_->hide();
|
||||
}
|
||||
|
||||
avatar_ = new Avatar(this);
|
||||
avatar_->setSize(128);
|
||||
avatar_ = new Avatar(this, 128);
|
||||
if (avatarImg_.isNull())
|
||||
avatar_->setLetter(utils::firstChar(QString::fromStdString(info_.name)));
|
||||
else
|
||||
avatar_->setImage(avatarImg_);
|
||||
avatar_->setImage(room_id_,
|
||||
QString::fromStdString(http::client()->user_id().to_string()));
|
||||
|
||||
if (canChangeAvatar(room_id_.toStdString(), utils::localUser().toStdString())) {
|
||||
auto filter = new ClickableFilter(this);
|
||||
|
|
@ -487,7 +487,7 @@ RoomSettings::retrieveRoomInfo()
|
|||
try {
|
||||
usesEncryption_ = cache::client()->isRoomEncrypted(room_id_.toStdString());
|
||||
info_ = cache::client()->singleRoomInfo(room_id_.toStdString());
|
||||
setAvatar(QImage::fromData(cache::client()->image(info_.avatar_url)));
|
||||
setAvatar();
|
||||
} catch (const lmdb::error &e) {
|
||||
nhlog::db()->warn("failed to retrieve room info from cache: {}",
|
||||
room_id_.toStdString());
|
||||
|
|
@ -633,14 +633,13 @@ RoomSettings::displayErrorMessage(const QString &msg)
|
|||
}
|
||||
|
||||
void
|
||||
RoomSettings::setAvatar(const QImage &img)
|
||||
RoomSettings::setAvatar()
|
||||
{
|
||||
stopLoadingSpinner();
|
||||
|
||||
avatarImg_ = img;
|
||||
|
||||
if (avatar_)
|
||||
avatar_->setImage(img);
|
||||
avatar_->setImage(room_id_,
|
||||
QString::fromStdString(http::client()->user_id().to_string()));
|
||||
}
|
||||
|
||||
void
|
||||
|
|
@ -733,7 +732,7 @@ RoomSettings::updateAvatar()
|
|||
return;
|
||||
}
|
||||
|
||||
emit proxy->avatarChanged(QImage::fromData(content));
|
||||
emit proxy->avatarChanged();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
|
|
|||
|
|
@ -52,7 +52,7 @@ class ThreadProxy : public QObject
|
|||
|
||||
signals:
|
||||
void error(const QString &msg);
|
||||
void avatarChanged(const QImage &img);
|
||||
void avatarChanged();
|
||||
void nameEventSent(const QString &);
|
||||
void topicEventSent();
|
||||
};
|
||||
|
|
@ -140,7 +140,7 @@ private:
|
|||
void resetErrorLabel();
|
||||
void displayErrorMessage(const QString &msg);
|
||||
|
||||
void setAvatar(const QImage &img);
|
||||
void setAvatar();
|
||||
void setupEditButton();
|
||||
//! Retrieve the current room information from cache.
|
||||
void retrieveRoomInfo();
|
||||
|
|
|
|||
|
|
@ -114,9 +114,8 @@ UserProfile::UserProfile(QWidget *parent)
|
|||
btnLayout->setSpacing(8);
|
||||
btnLayout->setMargin(0);
|
||||
|
||||
avatar_ = new Avatar(this);
|
||||
avatar_ = new Avatar(this, 128);
|
||||
avatar_->setLetter("X");
|
||||
avatar_->setSize(128);
|
||||
|
||||
QFont font;
|
||||
font.setPointSizeF(font.pointSizeF() * 2);
|
||||
|
|
@ -210,8 +209,7 @@ UserProfile::init(const QString &userId, const QString &roomId)
|
|||
displayNameLabel_->setText(displayName);
|
||||
avatar_->setLetter(utils::firstChar(displayName));
|
||||
|
||||
AvatarProvider::resolve(
|
||||
roomId, userId, this, [this](const QImage &img) { avatar_->setImage(img); });
|
||||
avatar_->setImage(roomId, userId);
|
||||
|
||||
auto localUser = utils::localUser();
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue