summary refs log tree commit diff
diff options
context:
space:
mode:
authorKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-11 16:00:14 +0300
committerKonstantinos Sideris <sideris.konstantin@gmail.com>2018-05-11 16:00:14 +0300
commit18061f06002b349bdc0e5b439a84d54545b9c87e (patch)
treec58d47200c244c8005ac05e7f7f73c030943088d
parentMake explicit that MatrixClient & Cache are unique pointers (diff)
downloadnheko-18061f06002b349bdc0e5b439a84d54545b9c87e.tar.xz
Use the correct avatar size for HiDPI displays
-rw-r--r--include/CommunitiesListItem.h8
-rw-r--r--include/Utils.h4
-rw-r--r--include/dialogs/RoomSettings.hpp17
-rw-r--r--src/CommunitiesListItem.cc7
-rw-r--r--src/MatrixClient.cc6
-rw-r--r--src/RoomInfoListItem.cc3
-rw-r--r--src/Utils.cc11
-rw-r--r--src/dialogs/RoomSettings.cpp16
-rw-r--r--src/ui/Avatar.cc10
9 files changed, 48 insertions, 34 deletions
diff --git a/include/CommunitiesListItem.h b/include/CommunitiesListItem.h
index 9309d334..6055d732 100644
--- a/include/CommunitiesListItem.h
+++ b/include/CommunitiesListItem.h
@@ -84,11 +84,3 @@ private:
 
         RippleOverlay *rippleOverlay_;
 };
-
-inline void
-CommunitiesListItem::setAvatar(const QImage &img)
-{
-        communityAvatar_ = QPixmap::fromImage(
-          img.scaled(IconSize, IconSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
-        update();
-}
diff --git a/include/Utils.h b/include/Utils.h
index 6fea4962..ad8e2073 100644
--- a/include/Utils.h
+++ b/include/Utils.h
@@ -8,6 +8,7 @@
 #include "timeline/widgets/VideoItem.h"
 
 #include <QDateTime>
+#include <QPixmap>
 #include <mtx/events/collections.hpp>
 
 namespace utils {
@@ -168,4 +169,7 @@ message_body(const mtx::events::collections::TimelineEvents &event)
 //! Calculate the Levenshtein distance between two strings with character skipping.
 int
 levenshtein_distance(const std::string &s1, const std::string &s2);
+
+QPixmap
+scaleImageToPixmap(const QImage &img, int size);
 }
diff --git a/include/dialogs/RoomSettings.hpp b/include/dialogs/RoomSettings.hpp
index 2acbf4b1..df94fea3 100644
--- a/include/dialogs/RoomSettings.hpp
+++ b/include/dialogs/RoomSettings.hpp
@@ -22,21 +22,8 @@ class TopSection : public QWidget
         Q_PROPERTY(QColor textColor WRITE setTextColor READ textColor)
 
 public:
-        TopSection(const RoomInfo &info, const QImage &img, QWidget *parent = nullptr)
-          : QWidget{parent}
-          , info_{std::move(info)}
-        {
-                textColor_ = palette().color(QPalette::Text);
-                avatar_    = QPixmap::fromImage(img.scaled(
-                  AvatarSize, AvatarSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
-        }
-
-        QSize sizeHint() const override
-        {
-                QFont font;
-                font.setPixelSize(18);
-                return QSize(200, AvatarSize + QFontMetrics(font).ascent() + 6 * Padding);
-        }
+        TopSection(const RoomInfo &info, const QImage &img, QWidget *parent = nullptr);
+        QSize sizeHint() const override;
 
         QColor textColor() const { return textColor_; }
         void setTextColor(QColor &color) { textColor_ = color; }
diff --git a/src/CommunitiesListItem.cc b/src/CommunitiesListItem.cc
index 0650c0cf..e5127050 100644
--- a/src/CommunitiesListItem.cc
+++ b/src/CommunitiesListItem.cc
@@ -88,3 +88,10 @@ CommunitiesListItem::paintEvent(QPaintEvent *)
                 p.restore();
         }
 }
+
+void
+CommunitiesListItem::setAvatar(const QImage &img)
+{
+        communityAvatar_ = utils::scaleImageToPixmap(img, IconSize);
+        update();
+}
diff --git a/src/MatrixClient.cc b/src/MatrixClient.cc
index 6336a5cf..a9720d10 100644
--- a/src/MatrixClient.cc
+++ b/src/MatrixClient.cc
@@ -59,6 +59,8 @@ MatrixClient::MatrixClient(QObject *parent)
   , mediaApiUrl_{"/_matrix/media/r0"}
   , serverProtocol_{"https"}
 {
+        qRegisterMetaType<mtx::responses::Sync>();
+
         QSettings settings;
         txn_id_ = settings.value("client/transaction_id", 1).toInt();
 
@@ -344,8 +346,7 @@ MatrixClient::sync() noexcept
                 }
 
                 try {
-                        mtx::responses::Sync response = nlohmann::json::parse(data);
-                        emit syncCompleted(response);
+                        emit syncCompleted(nlohmann::json::parse(std::move(data)));
                 } catch (std::exception &e) {
                         qWarning() << "Sync error: " << e.what();
                 }
@@ -461,7 +462,6 @@ MatrixClient::initialSync() noexcept
                         return;
                 }
 
-                qRegisterMetaType<mtx::responses::Sync>();
                 QtConcurrent::run([data = reply->readAll(), this]() {
                         try {
                                 emit initialSyncCompleted(nlohmann::json::parse(std::move(data)));
diff --git a/src/RoomInfoListItem.cc b/src/RoomInfoListItem.cc
index a10ad619..f6f2e532 100644
--- a/src/RoomInfoListItem.cc
+++ b/src/RoomInfoListItem.cc
@@ -368,8 +368,7 @@ RoomInfoListItem::mousePressEvent(QMouseEvent *event)
 void
 RoomInfoListItem::setAvatar(const QImage &img)
 {
-        roomAvatar_ = QPixmap::fromImage(
-          img.scaled(IconSize, IconSize, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+        roomAvatar_ = utils::scaleImageToPixmap(img, IconSize);
         update();
 }
 
diff --git a/src/Utils.cc b/src/Utils.cc
index 14620145..f2e4b381 100644
--- a/src/Utils.cc
+++ b/src/Utils.cc
@@ -1,5 +1,8 @@
 #include "Utils.h"
 
+#include <QApplication>
+#include <QDesktopWidget>
+
 #include <variant.hpp>
 
 using TimelineEvent = mtx::events::collections::TimelineEvents;
@@ -138,3 +141,11 @@ utils::event_body(const mtx::events::collections::TimelineEvents &event)
 
         return QString();
 }
+
+QPixmap
+utils::scaleImageToPixmap(const QImage &img, int size)
+{
+        const int sz = QApplication::desktop()->screen()->devicePixelRatio() * size;
+        return QPixmap::fromImage(
+          img.scaled(sz, sz, Qt::IgnoreAspectRatio, Qt::SmoothTransformation));
+}
diff --git a/src/dialogs/RoomSettings.cpp b/src/dialogs/RoomSettings.cpp
index 976d2acc..b85971b0 100644
--- a/src/dialogs/RoomSettings.cpp
+++ b/src/dialogs/RoomSettings.cpp
@@ -15,6 +15,22 @@
 
 using namespace dialogs;
 
+TopSection::TopSection(const RoomInfo &info, const QImage &img, QWidget *parent)
+  : QWidget{parent}
+  , info_{std::move(info)}
+{
+        textColor_ = palette().color(QPalette::Text);
+        avatar_    = utils::scaleImageToPixmap(img, AvatarSize);
+}
+
+QSize
+TopSection::sizeHint() const
+{
+        QFont font;
+        font.setPixelSize(18);
+        return QSize(200, AvatarSize + QFontMetrics(font).ascent() + 6 * Padding);
+}
+
 RoomSettings::RoomSettings(const QString &room_id, QWidget *parent)
   : QFrame(parent)
   , room_id_{std::move(room_id)}
diff --git a/src/ui/Avatar.cc b/src/ui/Avatar.cc
index 81e6cbed..2f10db39 100644
--- a/src/ui/Avatar.cc
+++ b/src/ui/Avatar.cc
@@ -1,6 +1,7 @@
 #include <QPainter>
 
 #include "Avatar.h"
+#include "Utils.h"
 
 Avatar::Avatar(QWidget *parent)
   : QWidget(parent)
@@ -64,10 +65,8 @@ Avatar::setSize(int size)
 {
         size_ = size;
 
-        if (!image_.isNull()) {
-                pixmap_ = QPixmap::fromImage(
-                  image_.scaled(size_, size_, Qt::KeepAspectRatio, Qt::SmoothTransformation));
-        }
+        if (!image_.isNull())
+                pixmap_ = utils::scaleImageToPixmap(image_, size_);
 
         QFont _font(font());
         _font.setPointSizeF(size_ * (ui::FontSize) / 40);
@@ -89,8 +88,7 @@ Avatar::setImage(const QImage &image)
 {
         image_  = image;
         type_   = ui::AvatarType::Image;
-        pixmap_ = QPixmap::fromImage(
-          image_.scaled(size_, size_, Qt::KeepAspectRatio, Qt::SmoothTransformation));
+        pixmap_ = utils::scaleImageToPixmap(image_, size_);
         update();
 }