Removed workaround in peer QR box by drawing content directly.

This commit is contained in:
23rd
2026-05-13 11:12:39 +03:00
parent fe34e21a9f
commit 61ef7455e2
+13 -25
View File
@@ -196,7 +196,7 @@ void Paint(
not_null<Ui::RpWidget*> PrepareQrWidget(
not_null<Ui::VerticalLayout*> container,
not_null<Ui::RpWidget*> topWidget,
std::shared_ptr<Ui::DynamicImage> userpicMedia,
rpl::producer<int> fontSizeValue,
rpl::producer<bool> userpicToggled,
rpl::producer<bool> backgroundToggled,
@@ -223,10 +223,11 @@ not_null<Ui::RpWidget*> PrepareQrWidget(
bool backgroundToggled = false;
};
const auto result = Ui::CreateChild<Ui::RpWidget>(divider);
topWidget->setParent(result);
topWidget->setAttribute(Qt::WA_TransparentForMouseEvents);
const auto state = result->lifetime().make_state<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<Ui::RpWidget*> PrepareQrWidget(
divider->resize(container->width(), result->height());
result->moveToLeft((container->width() - result->width()) / 2, 0);
topWidget->setVisible(userpicToggled);
topWidget->moveToLeft(0, std::numeric_limits<int>::min());
topWidget->raise();
aboutLabel->raise();
aboutLabel->moveToLeft(
@@ -349,14 +347,14 @@ not_null<Ui::RpWidget*> 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<Ui::RpWidget>(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(),