summary refs log tree commit diff
path: root/src/ui
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2019-08-26 01:24:56 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2019-08-26 08:51:56 +0200
commit52056a79fa94117ce0fc8f388458ceb48cc3be54 (patch)
tree3b9ff5a6466ffa6de1b88e49c9ced87d39df0c74 /src/ui
parentFix SIGNAL SLOT issue on mtx types (diff)
downloadnheko-52056a79fa94117ce0fc8f388458ceb48cc3be54.tar.xz
Try to reduce memory usage by reusing avatar pixmaps
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/Avatar.cpp39
-rw-r--r--src/ui/Avatar.h10
2 files changed, 24 insertions, 25 deletions
diff --git a/src/ui/Avatar.cpp b/src/ui/Avatar.cpp
index 4b4cd272..98bf21c6 100644
--- a/src/ui/Avatar.cpp
+++ b/src/ui/Avatar.cpp
@@ -1,12 +1,13 @@
 #include <QPainter>
 
+#include "AvatarProvider.h"
 #include "Utils.h"
 #include "ui/Avatar.h"
 
-Avatar::Avatar(QWidget *parent)
+Avatar::Avatar(QWidget *parent, int size)
   : QWidget(parent)
+  , size_(size)
 {
-        size_   = ui::AvatarSize;
         type_   = ui::AvatarType::Letter;
         letter_ = "A";
 
@@ -61,35 +62,31 @@ Avatar::setBackgroundColor(const QColor &color)
 }
 
 void
-Avatar::setSize(int size)
+Avatar::setLetter(const QString &letter)
 {
-        size_ = size;
-
-        if (!image_.isNull())
-                pixmap_ = utils::scaleImageToPixmap(image_, size_);
-
-        QFont _font(font());
-        _font.setPointSizeF(size_ * (ui::FontSize) / 40);
-
-        setFont(_font);
+        letter_ = letter;
+        type_   = ui::AvatarType::Letter;
         update();
 }
 
 void
-Avatar::setLetter(const QString &letter)
+Avatar::setImage(const QString &avatar_url)
 {
-        letter_ = letter;
-        type_   = ui::AvatarType::Letter;
-        update();
+        AvatarProvider::resolve(avatar_url, size_, this, [this](QPixmap pm) {
+                type_   = ui::AvatarType::Image;
+                pixmap_ = pm;
+                update();
+        });
 }
 
 void
-Avatar::setImage(const QImage &image)
+Avatar::setImage(const QString &room, const QString &user)
 {
-        image_  = image;
-        type_   = ui::AvatarType::Image;
-        pixmap_ = utils::scaleImageToPixmap(image_, size_);
-        update();
+        AvatarProvider::resolve(room, user, size_, this, [this](QPixmap pm) {
+                type_   = ui::AvatarType::Image;
+                pixmap_ = pm;
+                update();
+        });
 }
 
 void
diff --git a/src/ui/Avatar.h b/src/ui/Avatar.h
index 41967af5..b9225dd1 100644
--- a/src/ui/Avatar.h
+++ b/src/ui/Avatar.h
@@ -15,13 +15,14 @@ class Avatar : public QWidget
         Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor)
 
 public:
-        explicit Avatar(QWidget *parent = 0);
+        explicit Avatar(QWidget *parent = 0, int size = ui::AvatarSize);
 
         void setBackgroundColor(const QColor &color);
         void setIcon(const QIcon &icon);
-        void setImage(const QImage &image);
+        void setImage(const QString &avatar_url);
+        void setImage(const QString &room, const QString &user);
         void setLetter(const QString &letter);
-        void setSize(int size);
+        //        void setSize(int size);
         void setTextColor(const QColor &color);
 
         QColor backgroundColor() const;
@@ -41,7 +42,8 @@ private:
         QColor background_color_;
         QColor text_color_;
         QIcon icon_;
-        QImage image_;
         QPixmap pixmap_;
+        const std::string room;
+        const std::string user;
         int size_;
 };