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();
}
|