diff --git a/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp b/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp index 3f0be49737..d07915ce41 100644 --- a/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp +++ b/Telegram/SourceFiles/ui/boxes/peer_qr_box.cpp @@ -196,7 +196,7 @@ void Paint( not_null PrepareQrWidget( not_null container, - not_null topWidget, + std::shared_ptr userpicMedia, rpl::producer fontSizeValue, rpl::producer userpicToggled, rpl::producer backgroundToggled, @@ -223,10 +223,11 @@ not_null PrepareQrWidget( bool backgroundToggled = false; }; const auto result = Ui::CreateChild(divider); - topWidget->setParent(result); - topWidget->setAttribute(Qt::WA_TransparentForMouseEvents); const auto state = result->lifetime().make_state( [=] { result->update(); }); + userpicMedia->subscribeToUpdates(crl::guard(result, [=] { + result->update(); + })); const auto qrMaxSize = st::boxWideWidth - rect::m::sum::h(st::boxRowPadding) - rect::m::sum::h(st::profileQrBackgroundMargins); @@ -309,9 +310,6 @@ not_null PrepareQrWidget( divider->resize(container->width(), result->height()); result->moveToLeft((container->width() - result->width()) / 2, 0); - topWidget->setVisible(userpicToggled); - topWidget->moveToLeft(0, std::numeric_limits::min()); - topWidget->raise(); aboutLabel->raise(); aboutLabel->moveToLeft( @@ -349,14 +347,14 @@ not_null PrepareQrWidget( return; } const auto photoSize = state->photoSize; - const auto top = Ui::GrabWidget( - topWidget, - QRect(), - Qt::transparent).scaled( - Size(photoSize * style::DevicePixelRatio()), - Qt::IgnoreAspectRatio, - Qt::SmoothTransformation); - p.drawPixmap((result->width() - photoSize) / 2, -photoSize / 2, top); + const auto pixelSize = photoSize * style::DevicePixelRatio(); + p.drawImage( + QRect( + (result->width() - photoSize) / 2, + -photoSize / 2, + photoSize, + photoSize), + userpicMedia->image(pixelSize)); }, result->lifetime()); return result; } @@ -471,18 +469,9 @@ void FillPeerQrBox( : (rpl::single(QString()) | rpl::type_erased); }; - 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( - crl::guard(userpic, [=] { userpic->update(); })); - userpic->paintRequest() | rpl::on_next([=] { - auto p = QPainter(userpic); - p.drawImage(0, 0, userpicMedia->image(userpicSize)); - }, userpic->lifetime()); linkValue() | rpl::on_next([=](const QString &link) { if (link.isEmpty()) { @@ -493,10 +482,9 @@ void FillPeerQrBox( } }, box->lifetime()); - userpic->setVisible(peer != nullptr); PrepareQrWidget( box->verticalLayout(), - userpic, + userpicMedia, state->fontSizeValue.value(), state->userpicToggled.value(), state->backgroundToggled.value(),