From f120dd4abcf7d771a1748f3353f89b74a80d952d Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 12 Aug 2026 06:56:55 +0300 Subject: [PATCH] [ttl-media] Added single view badge to covered bubbles. --- .../history/view/media/history_view_gif.cpp | 1 + .../view/media/history_view_media_common.cpp | 25 +++++++++++++++++++ .../view/media/history_view_media_common.h | 6 +++++ .../history/view/media/history_view_photo.cpp | 2 ++ 4 files changed, 34 insertions(+) diff --git a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp index d899fd60ce..584f688f15 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp @@ -805,6 +805,7 @@ void Gif::draw(Painter &p, const PaintContext &context) const { st::msgFileRadialLine, sti->historyFileThumbRadialFg, context.paused); + PaintTtlSingleViewBadge(p, inner, _realParent, context); } else if (icon) { icon->paintInCenter(p, inner); } diff --git a/Telegram/SourceFiles/history/view/media/history_view_media_common.cpp b/Telegram/SourceFiles/history/view/media/history_view_media_common.cpp index a0db18172b..49f1e0b080 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_common.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media_common.cpp @@ -184,6 +184,31 @@ void PaintTtlLabel( p.drawTextLeft(left, top, outerWidth, text, width - 2 * padding.x()); } +void PaintTtlSingleViewBadge( + QPainter &p, + QRect inner, + not_null item, + const Ui::ChatPaintContext &context) { + const auto media = item->media(); + if (!media || !media->ttlSecondsSingleView()) { + return; + } + const auto sti = context.imageStyle(); + const auto &icon = sti->historyVideoMessageTtlIcon; + const auto rect = QRect( + rect::right(inner) - (icon.width() * 3 / 4), + rect::bottom(inner) - (icon.height() * 3 / 4), + icon.width(), + icon.height()); + { + auto hq = PainterHighQualityEnabler(p); + p.setPen(Qt::NoPen); + p.setBrush(sti->msgDateImgBg); + p.drawEllipse(rect); + } + icon.paintInCenter(p, rect); +} + std::unique_ptr CreateAttach( not_null parent, DocumentData *document, diff --git a/Telegram/SourceFiles/history/view/media/history_view_media_common.h b/Telegram/SourceFiles/history/view/media/history_view_media_common.h index 67bb67fb73..e2cd40c349 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_common.h +++ b/Telegram/SourceFiles/history/view/media/history_view_media_common.h @@ -63,6 +63,12 @@ void PaintTtlLabel( not_null item, const Ui::ChatPaintContext &context); +void PaintTtlSingleViewBadge( + QPainter &p, + QRect inner, + not_null item, + const Ui::ChatPaintContext &context); + [[nodiscard]] std::unique_ptr CreateAttach( not_null parent, DocumentData *document, diff --git a/Telegram/SourceFiles/history/view/media/history_view_photo.cpp b/Telegram/SourceFiles/history/view/media/history_view_photo.cpp index 5057eebba3..79e85568f5 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_photo.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_photo.cpp @@ -439,6 +439,7 @@ void Photo::draw(Painter &p, const PaintContext &context) const { sti->historyFileThumbCancel.paintInCenter(p, inner); } else if (ttlCovered) { paintTtlFire(p, inner); + PaintTtlSingleViewBadge(p, inner, _realParent, context); } else { sti->historyFileThumbDownload.paintInCenter(p, inner); } @@ -919,6 +920,7 @@ void Photo::drawGrouped( && !_data->waitingForAlbum(); if (ttlIdle) { paintTtlFire(p, inner); + PaintTtlSingleViewBadge(p, inner, _realParent, context); } else if (previous && radialOpacity > 0. && radialOpacity < 1.) { PaintInterpolatedIcon(p, icon, *previous, radialOpacity, inner); } else {