From 8a6b1677f4ce2b6cda2796a365ae87ebaa36f20e Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Mon, 27 May 2024 16:28:03 +0300 Subject: [PATCH] Added userpic views to headers of forwarded messages. --- .../history/history_item_components.cpp | 41 +++++++++++++------ .../history/history_item_components.h | 4 +- .../history/view/history_view_message.cpp | 2 +- .../history/view/media/history_view_gif.cpp | 2 +- .../media/history_view_media_unwrapped.cpp | 2 +- Telegram/SourceFiles/ui/chat/chat.style | 1 + 6 files changed, 36 insertions(+), 16 deletions(-) diff --git a/Telegram/SourceFiles/history/history_item_components.cpp b/Telegram/SourceFiles/history/history_item_components.cpp index b8a64263bc41f..dc4a38c7a0d6a 100644 --- a/Telegram/SourceFiles/history/history_item_components.cpp +++ b/Telegram/SourceFiles/history/history_item_components.cpp @@ -183,8 +183,11 @@ bool HiddenSenderInfo::paintCustomUserpic( return valid; } -void HistoryMessageForwarded::create(const HistoryMessageVia *via) const { +void HistoryMessageForwarded::create( + const HistoryMessageVia *via, + not_null item) const { auto phrase = TextWithEntities(); + auto context = Core::MarkedTextContext{}; const auto fromChannel = originalSender && originalSender->isChannel() && !originalSender->isMegagroup(); @@ -193,16 +196,27 @@ void HistoryMessageForwarded::create(const HistoryMessageVia *via) const { ? originalSender->name() : originalHiddenSenderInfo->name) }; + if (originalSender) { + context.session = &originalSender->owner().session(); + context.customEmojiRepaint = [=] { + originalSender->owner().requestItemRepaint(item); + }; + phrase = Ui::Text::SingleCustomEmoji( + context.session->data().customEmojiManager().peerUserpicEmojiData( + originalSender, + st::fwdTextUserpicPadding)); + } if (!originalPostAuthor.isEmpty()) { - phrase = tr::lng_forwarded_signed( - tr::now, - lt_channel, - name, - lt_user, - { .text = originalPostAuthor }, - Ui::Text::WithEntities); + phrase.append( + tr::lng_forwarded_signed( + tr::now, + lt_channel, + name, + lt_user, + { .text = originalPostAuthor }, + Ui::Text::WithEntities)); } else { - phrase = name; + phrase.append(name); } if (story) { phrase = tr::lng_forwarded_story( @@ -248,18 +262,21 @@ void HistoryMessageForwarded::create(const HistoryMessageVia *via) const { : tr::lng_forwarded_psa_default)( tr::now, lt_channel, - Ui::Text::Link(phrase.text, QString()), // Link 1. + Ui::Text::Wrapped( + phrase, + EntityType::CustomUrl, + QString()), // Link 1. Ui::Text::WithEntities); } } else { phrase = tr::lng_forwarded( tr::now, lt_user, - Ui::Text::Link(phrase.text, QString()), // Link 1. + Ui::Text::Wrapped(phrase, EntityType::CustomUrl, QString()), // Link 1. Ui::Text::WithEntities); } } - text.setMarkedText(st::fwdTextStyle, phrase); + text.setMarkedText(st::fwdTextStyle, phrase, kMarkupTextOptions, context); text.setLink(1, fromChannel ? JumpToMessageClickHandler(originalSender, originalId) diff --git a/Telegram/SourceFiles/history/history_item_components.h b/Telegram/SourceFiles/history/history_item_components.h index e35a804a2a448..44f31f3cd1b40 100644 --- a/Telegram/SourceFiles/history/history_item_components.h +++ b/Telegram/SourceFiles/history/history_item_components.h @@ -125,7 +125,9 @@ class HiddenSenderInfo { }; struct HistoryMessageForwarded : public RuntimeComponent { - void create(const HistoryMessageVia *via) const; + void create( + const HistoryMessageVia *via, + not_null item) const; [[nodiscard]] bool forwardOfForward() const { return savedFromSender || savedFromHiddenSenderInfo; diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index cc0b4aec747d6..96cbc4648a27a 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -714,7 +714,7 @@ QSize Message::performCountOptimalSize() { const auto via = item->Get(); const auto entry = logEntryOriginal(); if (forwarded) { - forwarded->create(via); + forwarded->create(via, item); } auto mediaDisplayed = false; diff --git a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp index 2097ca1b564b6..7dbee04160075 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp @@ -293,7 +293,7 @@ QSize Gif::countOptimalSize() { auto reply = _parent->Get(); auto forwarded = item->Get(); if (forwarded) { - forwarded->create(via); + forwarded->create(via, item); } maxWidth += additionalWidth(reply, via, forwarded); accumulate_max(maxWidth, _parent->reactionsOptimalWidth()); diff --git a/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp b/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp index 4c9e3277c9fb8..beee98df14b0c 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_media_unwrapped.cpp @@ -59,7 +59,7 @@ QSize UnwrappedMedia::countOptimalSize() { const auto topic = _parent->displayedTopicButton(); const auto forwarded = getDisplayedForwardedInfo(); if (forwarded) { - forwarded->create(via); + forwarded->create(via, item); } maxWidth += additionalWidth(topic, reply, via, forwarded); accumulate_max(maxWidth, _parent->reactionsOptimalWidth()); diff --git a/Telegram/SourceFiles/ui/chat/chat.style b/Telegram/SourceFiles/ui/chat/chat.style index 8bba17e8770b4..91ba60a37c7da 100644 --- a/Telegram/SourceFiles/ui/chat/chat.style +++ b/Telegram/SourceFiles/ui/chat/chat.style @@ -125,6 +125,7 @@ outTextPaletteSelected: TextPalette(outTextPalette) { monoFg: msgOutMonoFgSelected; spoilerFg: msgOutDateFgSelected; } +fwdTextUserpicPadding: margins(0px, 1px, 3px, 0px); fwdTextStyle: TextStyle(semiboldTextStyle) { linkUnderline: kLinkUnderlineNever; }