From 70e298cfe49482b7897751a861c59ee266b79fbe Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Wed, 30 Aug 2023 15:17:39 +0300 Subject: [PATCH] Added icon for replies to stories in dialogs list. --- Telegram/Resources/icons/mini_reply_story.png | Bin 0 -> 563 bytes .../Resources/icons/mini_reply_story@2x.png | Bin 0 -> 1025 bytes .../Resources/icons/mini_reply_story@3x.png | Bin 0 -> 1438 bytes Telegram/SourceFiles/dialogs/dialogs.style | 7 ++++++- .../dialogs/ui/dialogs_message_view.cpp | 16 +++++++++------- .../dialogs/ui/dialogs_message_view.h | 3 ++- Telegram/SourceFiles/history/history_item.cpp | 13 +++++-------- .../history/view/history_view_item_preview.h | 8 ++++++-- 8 files changed, 28 insertions(+), 19 deletions(-) create mode 100644 Telegram/Resources/icons/mini_reply_story.png create mode 100644 Telegram/Resources/icons/mini_reply_story@2x.png create mode 100644 Telegram/Resources/icons/mini_reply_story@3x.png diff --git a/Telegram/Resources/icons/mini_reply_story.png b/Telegram/Resources/icons/mini_reply_story.png new file mode 100644 index 0000000000000000000000000000000000000000..bfcbc0c48a1fb238c1057d4f2a82d8802eaa1f48 GIT binary patch literal 563 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 literal 0 HcmV?d00001 diff --git a/Telegram/SourceFiles/dialogs/dialogs.style b/Telegram/SourceFiles/dialogs/dialogs.style index 6c5b4e68a..854faef97 100644 --- a/Telegram/SourceFiles/dialogs/dialogs.style +++ b/Telegram/SourceFiles/dialogs/dialogs.style @@ -467,7 +467,12 @@ dialogsMiniForwardIcon: ThreeStateIcon { over: icon {{ "mini_forward", dialogsTextFgOver, point(0px, 1px) }}; active: icon {{ "mini_forward", dialogsTextFgActive, point(0px, 1px) }}; } -dialogsMiniForwardIconSkip: 2px; +dialogsMiniIconSkip: 2px; +dialogsMiniReplyStoryIcon: ThreeStateIcon { + icon: icon {{ "mini_reply_story", dialogsTextFg, point(0px, 1px) }}; + over: icon {{ "mini_reply_story", dialogsTextFgOver, point(0px, 1px) }}; + active: icon {{ "mini_reply_story", dialogsTextFgActive, point(0px, 1px) }}; +} dialogsUnreadMention: ThreeStateIcon { icon: icon{{ "dialogs/dialogs_mention", dialogsUnreadFg }}; diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp index 85081ed0d..253bdc967 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.cpp @@ -159,7 +159,11 @@ void MessageView::prepare( options.ignoreTopic = true; options.spoilerLoginCode = true; auto preview = item->toPreview(options); - _displayMiniForwardIcon = preview.forwardedMessage; + _leftIcon = (preview.icon == ItemPreview::Icon::ForwardedMessage) + ? &st::dialogsMiniForwardIcon + : (preview.icon == ItemPreview::Icon::ReplyToStory) + ? &st::dialogsMiniReplyStoryIcon + : nullptr; const auto hasImages = !preview.images.empty(); const auto history = item->history(); const auto context = Core::MarkedTextContext{ @@ -170,7 +174,7 @@ void MessageView::prepare( const auto senderTill = (preview.arrowInTextPosition > 0) ? preview.arrowInTextPosition : preview.imagesInTextPosition; - if ((hasImages || _displayMiniForwardIcon) && senderTill > 0) { + if ((hasImages || _leftIcon) && senderTill > 0) { auto sender = Text::Mid(preview.text, 0, senderTill); TextUtilities::Trim(sender); _senderCache.setMarkedText( @@ -316,15 +320,13 @@ void MessageView::paint( } } - if (_displayMiniForwardIcon) { + if (_leftIcon) { const auto &icon = ThreeStateIcon( - st::dialogsMiniForwardIcon, + *_leftIcon, context.active, context.selected); icon.paint(p, rect.topLeft(), rect.width()); - rect.setLeft(rect.x() - + icon.width() - + st::dialogsMiniForwardIconSkip); + rect.setLeft(rect.x() + icon.width() + st::dialogsMiniIconSkip); } for (const auto &image : _imagesCache) { if (rect.width() < st::dialogsMiniPreview) { diff --git a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h index a23dbea49..14f677536 100644 --- a/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h +++ b/Telegram/SourceFiles/dialogs/ui/dialogs_message_view.h @@ -15,6 +15,7 @@ enum class ImageRoundRadius; namespace style { struct DialogRow; +struct ThreeStateIcon; } // namespace style namespace Ui { @@ -92,7 +93,7 @@ private: mutable std::vector _imagesCache; mutable std::unique_ptr _spoiler; mutable std::unique_ptr _loadingContext; - mutable bool _displayMiniForwardIcon = false; + mutable const style::ThreeStateIcon *_leftIcon = nullptr; }; diff --git a/Telegram/SourceFiles/history/history_item.cpp b/Telegram/SourceFiles/history/history_item.cpp index 3357ed3ba..ff5aa329b 100644 --- a/Telegram/SourceFiles/history/history_item.cpp +++ b/Telegram/SourceFiles/history/history_item.cpp @@ -15,17 +15,14 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/view/history_view_message.h" #include "history/view/history_view_service_message.h" #include "history/view/media/history_view_media_grouped.h" -#include "history/history_item.h" #include "history/history_item_components.h" #include "history/history_item_helpers.h" #include "history/history_unread_things.h" #include "history/history.h" #include "mtproto/mtproto_config.h" #include "media/clip/media_clip_reader.h" -#include "ui/effects/ripple_animation.h" #include "ui/text/format_values.h" #include "ui/text/text_isolated_emoji.h" -#include "ui/text/text_options.h" #include "ui/text/text_utilities.h" #include "storage/file_upload.h" #include "storage/storage_facade.h" @@ -41,7 +38,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "mainwindow.h" #include "window/window_controller.h" #include "window/window_session_controller.h" -#include "core/crash_reports.h" #include "core/click_handler_types.h" #include "base/unixtime.h" #include "base/timer_rpl.h" @@ -72,7 +68,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "chat_helpers/stickers_gift_box_pack.h" #include "payments/payments_checkout_process.h" // CheckoutProcess::Start. #include "styles/style_dialogs.h" -#include "styles/style_chat.h" namespace { @@ -2958,9 +2953,11 @@ ItemPreview HistoryItem::toPreview(ToPreviewOptions options) const { ? tr::lng_from_you(tr::now) : sender->shortName(); }; - if (!options.ignoreForwardedMessage) { - result.forwardedMessage = Get() != nullptr; - } + result.icon = (Get() != nullptr) + ? ItemPreview::Icon::ForwardedMessage + : replyToStory().valid() + ? ItemPreview::Icon::ReplyToStory + : ItemPreview::Icon::None; const auto fromForwarded = [&]() -> std::optional { if (const auto forwarded = Get()) { return forwarded->originalSender diff --git a/Telegram/SourceFiles/history/view/history_view_item_preview.h b/Telegram/SourceFiles/history/view/history_view_item_preview.h index cb15afb6e..f2304c49e 100644 --- a/Telegram/SourceFiles/history/view/history_view_item_preview.h +++ b/Telegram/SourceFiles/history/view/history_view_item_preview.h @@ -23,12 +23,17 @@ struct ItemPreviewImage { }; struct ItemPreview { + enum class Icon { + None, + ForwardedMessage, + ReplyToStory, + }; TextWithEntities text; std::vector images; int arrowInTextPosition = -1; int imagesInTextPosition = 0; std::any loadingContext; - bool forwardedMessage = false; + Icon icon = Icon::None; }; struct ToPreviewOptions { @@ -38,7 +43,6 @@ struct ToPreviewOptions { bool generateImages = true; bool ignoreGroup = false; bool ignoreTopic = true; - bool ignoreForwardedMessage = false; bool spoilerLoginCode = false; bool translated = false; };