From 9557f0c844c841b2c9dfc1e98644444668de5d96 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 8 Oct 2024 17:34:55 +0300 Subject: [PATCH] Improved quality of profile photo in share QR box. --- Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp | 31 ++++++++++--------- 1 file changed, 16 insertions(+), 15 deletions(-) diff --git a/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp b/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp index 579a1b8816..76e7996862 100644 --- a/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp +++ b/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp @@ -18,6 +18,8 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "main/main_session.h" #include "qr/qr_generate.h" #include "ui/controls/userpic_button.h" +#include "ui/dynamic_image.h" +#include "ui/dynamic_thumbnails.h" #include "ui/effects/animations.h" #include "ui/image/image_prepare.h" #include "ui/layers/generic_box.h" @@ -425,10 +427,18 @@ void FillPeerQrBox( : (rpl::single(QString()) | rpl::type_erased()); }; - const auto userpic = Ui::CreateChild( - box, - peer ? peer : controller->session().user().get(), - st::defaultUserpicButton); + const auto userpic = Ui::CreateChild(box); + const auto userpicSize = st::defaultUserpicButton.photoSize; + userpic->resize(Size(userpicSize)); + const auto userpicMedia = Ui::MakeUserpicThumbnail(peer + ? peer + : controller->session().user().get()); + userpicMedia->subscribeToUpdates([=] { userpic->update(); }); + userpic->paintRequest() | rpl::start_with_next([=] { + auto p = QPainter(userpic); + p.drawImage(0, 0, userpicMedia->image(userpicSize)); + }, userpic->lifetime()); + userpic->setVisible(peer != nullptr); PrepareQrWidget( box->verticalLayout(), @@ -781,10 +791,7 @@ void FillPeerQrBox( usernameValue()).current().toUpper(); const auto link = rpl::variable(linkValue()); const auto textWidth = font->width(username); - const auto top = Ui::GrabWidget( - userpic, - {}, - Qt::transparent); + const auto top = userpicMedia->image(photoSize); const auto weak = Ui::MakeWeak(box); crl::async([=] { @@ -837,13 +844,7 @@ void FillPeerQrBox( photoSize); if (userpicToggled) { - p.drawPixmap( - (resultSize.width() - photoSize) / 2, - 0, - top.scaled( - Size(photoSize * style::DevicePixelRatio()), - Qt::IgnoreAspectRatio, - Qt::SmoothTransformation)); + p.drawImage((resultSize.width() - photoSize) / 2, 0, top); } } crl::on_main(weak, [=] {