From 32b95f0d9ab809f944c34312ae4c2ac0280c570f Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 11 Feb 2025 19:24:24 +0400 Subject: [PATCH] Improve forum outlines in stories/folders. --- Telegram/SourceFiles/boxes/peer_list_box.cpp | 8 +++++++- Telegram/SourceFiles/dialogs/dialogs_row.cpp | 8 +++++++- .../SourceFiles/ui/effects/outline_segments.cpp | 16 ++++++++++++++++ .../SourceFiles/ui/effects/outline_segments.h | 6 ++++++ 4 files changed, 36 insertions(+), 2 deletions(-) diff --git a/Telegram/SourceFiles/boxes/peer_list_box.cpp b/Telegram/SourceFiles/boxes/peer_list_box.cpp index 69d304a14..8d4b60b1d 100644 --- a/Telegram/SourceFiles/boxes/peer_list_box.cpp +++ b/Telegram/SourceFiles/boxes/peer_list_box.cpp @@ -912,7 +912,13 @@ void PeerListRow::paintDisabledCheckUserpic( p.setPen(userpicBorderPen); p.setBrush(Qt::NoBrush); - p.drawEllipse(userpicEllipse); + if (peer()->forum()) { + const auto radius = userpicDiameter + * Ui::ForumUserpicRadiusMultiplier(); + p.drawRoundedRect(userpicEllipse, radius, radius); + } else { + p.drawEllipse(userpicEllipse); + } p.setPen(iconBorderPen); p.setBrush(st.disabledCheckFg); diff --git a/Telegram/SourceFiles/dialogs/dialogs_row.cpp b/Telegram/SourceFiles/dialogs/dialogs_row.cpp index a9dae4d96..c39133e52 100644 --- a/Telegram/SourceFiles/dialogs/dialogs_row.cpp +++ b/Telegram/SourceFiles/dialogs/dialogs_row.cpp @@ -466,7 +466,13 @@ void Row::PaintCornerBadgeFrame( for (auto i = 0; i != storiesUnreadCount; ++i) { segments.push_back({ storiesUnreadBrush, storiesUnread }); } - Ui::PaintOutlineSegments(q, outline, segments); + if (peer && peer->forum()) { + const auto radius = context.st->photoSize + * Ui::ForumUserpicRadiusMultiplier(); + Ui::PaintOutlineSegments(q, outline, radius, segments); + } else { + Ui::PaintOutlineSegments(q, outline, segments); + } } if (subscribed) { diff --git a/Telegram/SourceFiles/ui/effects/outline_segments.cpp b/Telegram/SourceFiles/ui/effects/outline_segments.cpp index 7d4dd47fa..6dc330c66 100644 --- a/Telegram/SourceFiles/ui/effects/outline_segments.cpp +++ b/Telegram/SourceFiles/ui/effects/outline_segments.cpp @@ -69,6 +69,22 @@ void PaintOutlineSegments( } } +void PaintOutlineSegments( + QPainter &p, + QRectF rect, + float64 radius, + const std::vector &segments) { + Expects(!segments.empty()); + + p.setBrush(Qt::NoBrush); + const auto count = std::min(int(segments.size()), kOutlineSegmentsMax); + if (count == 1 || true) { + p.setPen(QPen(segments.back().brush, segments.back().width)); + p.drawRoundedRect(rect, radius, radius); + return; + } +} + QLinearGradient UnreadStoryOutlineGradient(QRectF rect) { auto result = QLinearGradient(rect.topRight(), rect.bottomLeft()); result.setStops({ diff --git a/Telegram/SourceFiles/ui/effects/outline_segments.h b/Telegram/SourceFiles/ui/effects/outline_segments.h index 9a38cf9ce..8149c5905 100644 --- a/Telegram/SourceFiles/ui/effects/outline_segments.h +++ b/Telegram/SourceFiles/ui/effects/outline_segments.h @@ -22,6 +22,12 @@ void PaintOutlineSegments( const std::vector &segments, float64 fromFullProgress = 1.); +void PaintOutlineSegments( + QPainter &p, + QRectF rect, + float64 radius, + const std::vector &segments); + [[nodiscard]] QLinearGradient UnreadStoryOutlineGradient(QRectF rect = {}); } // namespace Ui