summary refs log tree commit diff
path: root/src/ui
diff options
context:
space:
mode:
Diffstat (limited to 'src/ui')
-rw-r--r--src/ui/Avatar.cpp168
-rw-r--r--src/ui/Avatar.h48
-rw-r--r--src/ui/InfoMessage.cpp15
-rw-r--r--src/ui/NhekoGlobalObject.cpp7
-rw-r--r--src/ui/NhekoGlobalObject.h8
-rw-r--r--src/ui/Painter.h5
-rw-r--r--src/ui/RoomSettings.cpp13
-rw-r--r--src/ui/RoomSettings.h6
8 files changed, 18 insertions, 252 deletions
diff --git a/src/ui/Avatar.cpp b/src/ui/Avatar.cpp
deleted file mode 100644
index 154a0e2c..00000000
--- a/src/ui/Avatar.cpp
+++ /dev/null
@@ -1,168 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Nheko Contributors
-//
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#include <QPainter>
-#include <QPainterPath>
-#include <QSettings>
-
-#include "AvatarProvider.h"
-#include "Utils.h"
-#include "ui/Avatar.h"
-
-Avatar::Avatar(QWidget *parent, int size)
-  : QWidget(parent)
-  , size_(size)
-{
-        type_   = ui::AvatarType::Letter;
-        letter_ = "A";
-
-        QFont _font(font());
-        _font.setPointSizeF(ui::FontSize);
-        setFont(_font);
-
-        QSizePolicy policy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);
-        setSizePolicy(policy);
-}
-
-QColor
-Avatar::textColor() const
-{
-        if (!text_color_.isValid())
-                return QColor("black");
-
-        return text_color_;
-}
-
-QColor
-Avatar::backgroundColor() const
-{
-        if (!text_color_.isValid())
-                return QColor("white");
-
-        return background_color_;
-}
-
-QSize
-Avatar::sizeHint() const
-{
-        return QSize(size_ + 2, size_ + 2);
-}
-
-void
-Avatar::setTextColor(const QColor &color)
-{
-        text_color_ = color;
-}
-
-void
-Avatar::setBackgroundColor(const QColor &color)
-{
-        background_color_ = color;
-}
-
-void
-Avatar::setLetter(const QString &letter)
-{
-        letter_ = letter;
-        type_   = ui::AvatarType::Letter;
-        update();
-}
-
-void
-Avatar::setImage(const QString &avatar_url)
-{
-        avatar_url_ = avatar_url;
-        AvatarProvider::resolve(avatar_url,
-                                static_cast<int>(size_ * pixmap_.devicePixelRatio()),
-                                this,
-                                [this, requestedRatio = pixmap_.devicePixelRatio()](QPixmap pm) {
-                                        if (pm.isNull())
-                                                return;
-                                        type_   = ui::AvatarType::Image;
-                                        pixmap_ = pm;
-                                        pixmap_.setDevicePixelRatio(requestedRatio);
-                                        update();
-                                });
-}
-
-void
-Avatar::setImage(const QString &room, const QString &user)
-{
-        room_ = room;
-        user_ = user;
-        AvatarProvider::resolve(room,
-                                user,
-                                static_cast<int>(size_ * pixmap_.devicePixelRatio()),
-                                this,
-                                [this, requestedRatio = pixmap_.devicePixelRatio()](QPixmap pm) {
-                                        if (pm.isNull())
-                                                return;
-                                        type_   = ui::AvatarType::Image;
-                                        pixmap_ = pm;
-                                        pixmap_.setDevicePixelRatio(requestedRatio);
-                                        update();
-                                });
-}
-
-void
-Avatar::setDevicePixelRatio(double ratio)
-{
-        if (type_ == ui::AvatarType::Image && abs(pixmap_.devicePixelRatio() - ratio) > 0.01) {
-                pixmap_ = pixmap_.scaled(QSize(size_, size_) * ratio);
-                pixmap_.setDevicePixelRatio(ratio);
-
-                if (!avatar_url_.isEmpty())
-                        setImage(avatar_url_);
-                else
-                        setImage(room_, user_);
-        }
-}
-
-void
-Avatar::paintEvent(QPaintEvent *)
-{
-        bool rounded = QSettings().value(QStringLiteral("user/avatar_circles"), true).toBool();
-
-        QPainter painter(this);
-
-        painter.setRenderHints(QPainter::Antialiasing | QPainter::SmoothPixmapTransform |
-                               QPainter::TextAntialiasing);
-
-        QRectF r     = rect();
-        const int hs = size_ / 2;
-
-        if (type_ != ui::AvatarType::Image) {
-                QBrush brush;
-                brush.setStyle(Qt::SolidPattern);
-                brush.setColor(backgroundColor());
-
-                painter.setPen(Qt::NoPen);
-                painter.setBrush(brush);
-                rounded ? painter.drawEllipse(r) : painter.drawRoundedRect(r, 3, 3);
-        } else if (painter.isActive()) {
-                setDevicePixelRatio(painter.device()->devicePixelRatioF());
-        }
-
-        switch (type_) {
-        case ui::AvatarType::Image: {
-                QPainterPath ppath;
-
-                rounded ? ppath.addEllipse(width() / 2 - hs, height() / 2 - hs, size_, size_)
-                        : ppath.addRoundedRect(r, 3, 3);
-
-                painter.setClipPath(ppath);
-                painter.drawPixmap(QRect(width() / 2 - hs, height() / 2 - hs, size_, size_),
-                                   pixmap_);
-                break;
-        }
-        case ui::AvatarType::Letter: {
-                painter.setPen(textColor());
-                painter.setBrush(Qt::NoBrush);
-                painter.drawText(r.translated(0, -1), Qt::AlignCenter, letter_);
-                break;
-        }
-        default:
-                break;
-        }
-}
diff --git a/src/ui/Avatar.h b/src/ui/Avatar.h
deleted file mode 100644
index bbf05be3..00000000
--- a/src/ui/Avatar.h
+++ /dev/null
@@ -1,48 +0,0 @@
-// SPDX-FileCopyrightText: 2021 Nheko Contributors
-//
-// SPDX-License-Identifier: GPL-3.0-or-later
-
-#pragma once
-
-#include <QImage>
-#include <QPixmap>
-#include <QWidget>
-
-#include "Theme.h"
-
-class Avatar : public QWidget
-{
-        Q_OBJECT
-
-        Q_PROPERTY(QColor textColor WRITE setTextColor READ textColor)
-        Q_PROPERTY(QColor backgroundColor WRITE setBackgroundColor READ backgroundColor)
-
-public:
-        explicit Avatar(QWidget *parent = nullptr, int size = ui::AvatarSize);
-
-        void setBackgroundColor(const QColor &color);
-        void setImage(const QString &avatar_url);
-        void setImage(const QString &room, const QString &user);
-        void setLetter(const QString &letter);
-        void setTextColor(const QColor &color);
-        void setDevicePixelRatio(double ratio);
-
-        QColor backgroundColor() const;
-        QColor textColor() const;
-
-        QSize sizeHint() const override;
-
-protected:
-        void paintEvent(QPaintEvent *event) override;
-
-private:
-        void init();
-
-        ui::AvatarType type_;
-        QString letter_;
-        QString avatar_url_, room_, user_;
-        QColor background_color_;
-        QColor text_color_;
-        QPixmap pixmap_;
-        int size_;
-};
diff --git a/src/ui/InfoMessage.cpp b/src/ui/InfoMessage.cpp
index fb3b306a..ebe0e63f 100644
--- a/src/ui/InfoMessage.cpp
+++ b/src/ui/InfoMessage.cpp
@@ -29,13 +29,7 @@ InfoMessage::InfoMessage(QString msg, QWidget *parent)
         initFont();
 
         QFontMetrics fm{font()};
-#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
-        // width deprecated in 5.13
-        width_ = fm.width(msg_) + HPadding * 2;
-#else
-        width_ = fm.horizontalAdvance(msg_) + HPadding * 2;
-#endif
-
+        width_  = fm.horizontalAdvance(msg_) + HPadding * 2;
         height_ = fm.ascent() + 2 * VPadding;
 
         setFixedHeight(height_ + 2 * HMargin);
@@ -77,12 +71,7 @@ DateSeparator::DateSeparator(QDateTime datetime, QWidget *parent)
         msg_ = datetime.date().toString(fmt);
 
         QFontMetrics fm{font()};
-#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
-        // width deprecated in 5.13
-        width_ = fm.width(msg_) + HPadding * 2;
-#else
-        width_ = fm.horizontalAdvance(msg_) + HPadding * 2;
-#endif
+        width_  = fm.horizontalAdvance(msg_) + HPadding * 2;
         height_ = fm.ascent() + 2 * VPadding;
 
         setFixedHeight(height_ + 2 * HMargin);
diff --git a/src/ui/NhekoGlobalObject.cpp b/src/ui/NhekoGlobalObject.cpp
index fea10839..9e0d706b 100644
--- a/src/ui/NhekoGlobalObject.cpp
+++ b/src/ui/NhekoGlobalObject.cpp
@@ -6,6 +6,7 @@
 
 #include <QDesktopServices>
 #include <QUrl>
+#include <QWindow>
 
 #include "Cache_p.h"
 #include "ChatPage.h"
@@ -140,3 +141,9 @@ Nheko::openJoinRoomDialog() const
         MainWindow::instance()->openJoinRoomDialog(
           [](const QString &room_id) { ChatPage::instance()->joinRoom(room_id); });
 }
+
+void
+Nheko::reparent(QWindow *win) const
+{
+        win->setTransientParent(MainWindow::instance()->windowHandle());
+}
diff --git a/src/ui/NhekoGlobalObject.h b/src/ui/NhekoGlobalObject.h
index 14135fd1..d4d119dc 100644
--- a/src/ui/NhekoGlobalObject.h
+++ b/src/ui/NhekoGlobalObject.h
@@ -4,12 +4,15 @@
 
 #pragma once
 
+#include <QFontDatabase>
 #include <QObject>
 #include <QPalette>
 
 #include "Theme.h"
 #include "UserProfile.h"
 
+class QWindow;
+
 class Nheko : public QObject
 {
         Q_OBJECT
@@ -38,12 +41,17 @@ public:
         int paddingLarge() const { return 20; }
         UserProfile *currentUser() const;
 
+        Q_INVOKABLE QFont monospaceFont() const
+        {
+                return QFontDatabase::systemFont(QFontDatabase::FixedFont);
+        }
         Q_INVOKABLE void openLink(QString link) const;
         Q_INVOKABLE void setStatusMessage(QString msg) const;
         Q_INVOKABLE void showUserSettingsPage() const;
         Q_INVOKABLE void openLogoutDialog() const;
         Q_INVOKABLE void openCreateRoomDialog() const;
         Q_INVOKABLE void openJoinRoomDialog() const;
+        Q_INVOKABLE void reparent(QWindow *win) const;
 
 public slots:
         void updateUserProfile();
diff --git a/src/ui/Painter.h b/src/ui/Painter.h
index 3353f0c7..9f974116 100644
--- a/src/ui/Painter.h
+++ b/src/ui/Painter.h
@@ -27,12 +27,7 @@ public:
         {
                 QFontMetrics m(fontMetrics());
                 if (textWidth < 0) {
-#if QT_VERSION < QT_VERSION_CHECK(5, 11, 0)
-                        // deprecated in 5.13:
-                        textWidth = m.width(text);
-#else
                         textWidth = m.horizontalAdvance(text);
-#endif
                 }
                 drawText((outerw - x - textWidth), y + m.ascent(), text);
         }
diff --git a/src/ui/RoomSettings.cpp b/src/ui/RoomSettings.cpp
index f78ef09b..fcba8205 100644
--- a/src/ui/RoomSettings.cpp
+++ b/src/ui/RoomSettings.cpp
@@ -291,19 +291,6 @@ RoomSettings::accessJoinRules()
         return accessRules_;
 }
 
-bool
-RoomSettings::respondsToKeyRequests()
-{
-        return usesEncryption_ && utils::respondsToKeyRequests(roomid_);
-}
-
-void
-RoomSettings::changeKeyRequestsPreference(bool isOn)
-{
-        utils::setKeyRequestsPreference(roomid_, isOn);
-        emit keyRequestsChanged();
-}
-
 void
 RoomSettings::enableEncryption()
 {
diff --git a/src/ui/RoomSettings.h b/src/ui/RoomSettings.h
index 367f3111..1c8b47d6 100644
--- a/src/ui/RoomSettings.h
+++ b/src/ui/RoomSettings.h
@@ -78,7 +78,6 @@ class RoomSettings : public QObject
         Q_PROPERTY(bool canChangeJoinRules READ canChangeJoinRules CONSTANT)
         Q_PROPERTY(bool canChangeNameAndTopic READ canChangeNameAndTopic CONSTANT)
         Q_PROPERTY(bool isEncryptionEnabled READ isEncryptionEnabled NOTIFY encryptionChanged)
-        Q_PROPERTY(bool respondsToKeyRequests READ respondsToKeyRequests NOTIFY keyRequestsChanged)
 
 public:
         RoomSettings(QString roomid, QObject *parent = nullptr);
@@ -91,7 +90,6 @@ public:
         int memberCount() const;
         int notifications();
         int accessJoinRules();
-        bool respondsToKeyRequests();
         bool isLoading() const;
         //! Whether the user has enough power level to send m.room.join_rules events.
         bool canChangeJoinRules() const;
@@ -106,7 +104,6 @@ public:
         Q_INVOKABLE void openEditModal();
         Q_INVOKABLE void changeAccessRules(int index);
         Q_INVOKABLE void changeNotifications(int currentIndex);
-        Q_INVOKABLE void changeKeyRequestsPreference(bool isOn);
 
 signals:
         void loadingChanged();
@@ -114,7 +111,6 @@ signals:
         void roomTopicChanged();
         void avatarUrlChanged();
         void encryptionChanged();
-        void keyRequestsChanged();
         void notificationsChanged();
         void accessJoinRulesChanged();
         void displayError(const QString &errorMessage);
@@ -136,4 +132,4 @@ private:
         RoomInfo info_;
         int notifications_ = 0;
         int accessRules_   = 0;
-};
\ No newline at end of file
+};