From bbdd5feaa4841b832dfcb6487d17de42e1557b09 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Tue, 28 Jan 2025 09:58:42 +0300 Subject: [PATCH] Fixed display of video userpic in short box on Retina. --- .../SourceFiles/boxes/peers/peer_short_info_box.cpp | 13 ++++++++----- .../SourceFiles/boxes/peers/peer_short_info_box.h | 1 + 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peers/peer_short_info_box.cpp b/Telegram/SourceFiles/boxes/peers/peer_short_info_box.cpp index 0275358f0..12fab358c 100644 --- a/Telegram/SourceFiles/boxes/peers/peer_short_info_box.cpp +++ b/Telegram/SourceFiles/boxes/peers/peer_short_info_box.cpp @@ -106,6 +106,8 @@ PeerShortInfoCover::PeerShortInfoCover( , _statusStyle(std::make_unique(_st.status)) , _status(_widget.get(), std::move(status), _statusStyle->st) , _roundMask(Images::CornersMask(_st.radius)) +, _roundMaskRetina( + Images::CornersMask(_st.radius / style::DevicePixelRatio())) , _videoPaused(std::move(videoPaused)) { _widget->setCursor(_cursor); @@ -190,7 +192,7 @@ void PeerShortInfoCover::paint(QPainter &p) { if (!frame.isNull()) { frame = Images::Round( std::move(frame), - _roundMask, + _roundMaskRetina, RectPart::TopLeft | RectPart::TopRight); } else if (_userpicImage.isNull()) { auto image = QImage( @@ -226,10 +228,11 @@ void PeerShortInfoCover::paintCoverImage(QPainter &p, const QImage &image) { const auto top = _widget->height() - fill; const auto factor = style::DevicePixelRatio(); if (fill > 0) { + const auto t = roundedHeight + _scrollTop; p.drawImage( - QRect(0, top, roundedWidth, fill), + QRect(0, t, roundedWidth * factor, (roundedWidth - t) * factor), image, - QRect(0, top * factor, roundedWidth * factor, fill * factor)); + QRect(0, t, roundedWidth * factor, (roundedWidth - t) * factor)); } if (covered <= 0) { return; @@ -238,9 +241,9 @@ void PeerShortInfoCover::paintCoverImage(QPainter &p, const QImage &image) { const auto from = top - rounded; auto q = QPainter(&_roundedTopImage); q.drawImage( - QRect(0, 0, roundedWidth, rounded), + QRect(0, 0, roundedWidth * factor, rounded * factor), image, - QRect(0, from * factor, roundedWidth * factor, rounded * factor)); + QRect(0, _scrollTop, roundedWidth * factor, rounded * factor)); q.end(); _roundedTopImage = Images::Round( std::move(_roundedTopImage), diff --git a/Telegram/SourceFiles/boxes/peers/peer_short_info_box.h b/Telegram/SourceFiles/boxes/peers/peer_short_info_box.h index 271e1826c..f6baf8c74 100644 --- a/Telegram/SourceFiles/boxes/peers/peer_short_info_box.h +++ b/Telegram/SourceFiles/boxes/peers/peer_short_info_box.h @@ -123,6 +123,7 @@ private: object_ptr _additionalStatus = { nullptr }; std::array _roundMask; + std::array _roundMaskRetina; QImage _userpicImage; QImage _roundedTopImage; QImage _barSmall;