From 1e2e007d38d54d16618701e7e8cd6abe242917ef Mon Sep 17 00:00:00 2001 From: John Preston Date: Tue, 16 Aug 2022 20:57:40 +0300 Subject: [PATCH] Show custom emoji in private chat reactions. --- Telegram/CMakeLists.txt | 4 ++++ Telegram/SourceFiles/api/api_who_reacted.cpp | 2 +- .../SourceFiles/data/data_message_reactions.cpp | 11 +++++++++++ .../SourceFiles/data/data_message_reactions.h | 7 +++++++ .../history/view/history_view_bottom_info.cpp | 11 ++++++++++- .../history/view/history_view_bottom_info.h | 15 ++++++++++++++- .../history/view/history_view_element.h | 4 ---- .../history/view/history_view_react_button.cpp | 1 - .../history/view/history_view_react_button.h | 2 +- .../history/view/history_view_reactions.cpp | 1 + .../history/view/history_view_reactions.h | 3 ++- .../view/reactions/message_reactions_list.cpp | 2 +- .../view/reactions/message_reactions_selector.cpp | 2 +- .../SourceFiles/window/notifications_manager.cpp | 1 - .../SourceFiles/window/notifications_manager.h | 2 +- 15 files changed, 54 insertions(+), 14 deletions(-) diff --git a/Telegram/CMakeLists.txt b/Telegram/CMakeLists.txt index 0e151a5c90..42b249d155 100644 --- a/Telegram/CMakeLists.txt +++ b/Telegram/CMakeLists.txt @@ -488,6 +488,8 @@ PRIVATE data/data_media_types.h # data/data_messages.cpp # data/data_messages.h + data/data_message_reaction_id.cpp + data/data_message_reaction_id.h data/data_message_reactions.cpp data/data_message_reactions.h data/data_msg_id.h @@ -697,6 +699,8 @@ PRIVATE history/view/history_view_react_animation.h history/view/history_view_react_button.cpp history/view/history_view_react_button.h + history/view/history_view_react_selector.cpp + history/view/history_view_react_selector.h history/view/history_view_reactions.cpp history/view/history_view_reactions.h history/view/history_view_replies_section.cpp diff --git a/Telegram/SourceFiles/api/api_who_reacted.cpp b/Telegram/SourceFiles/api/api_who_reacted.cpp index b606c0d3e7..b52c82b23d 100644 --- a/Telegram/SourceFiles/api/api_who_reacted.cpp +++ b/Telegram/SourceFiles/api/api_who_reacted.cpp @@ -17,7 +17,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_changes.h" #include "data/data_session.h" #include "data/data_media_types.h" -#include "data/data_message_reactions.h" +#include "data/data_message_reaction_id.h" #include "main/main_app_config.h" #include "main/main_session.h" #include "main/main_account.h" diff --git a/Telegram/SourceFiles/data/data_message_reactions.cpp b/Telegram/SourceFiles/data/data_message_reactions.cpp index 001181edff..a5259c19c3 100644 --- a/Telegram/SourceFiles/data/data_message_reactions.cpp +++ b/Telegram/SourceFiles/data/data_message_reactions.cpp @@ -18,6 +18,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "data/data_changes.h" #include "data/data_document.h" #include "data/data_document_media.h" +#include "data/stickers/data_custom_emoji.h" #include "lottie/lottie_icon.h" #include "storage/localimageloader.h" #include "ui/image/image_location_factory.h" @@ -203,6 +204,16 @@ QImage Reactions::resolveImageFor( Unexpected("ImageSize in Reactions::resolveImageFor."); } +std::unique_ptr Reactions::resolveCustomFor( + const ReactionId &emoji, + ImageSize size) { + const auto custom = std::get_if(&emoji.data); + if (!custom) { + return nullptr; + } + return _owner->customEmojiManager().create(*custom, [] {}); +} + void Reactions::resolveImages() { for (auto &[id, set] : _images) { if (!set.bottomInfo.isNull() || set.icon || set.media) { diff --git a/Telegram/SourceFiles/data/data_message_reactions.h b/Telegram/SourceFiles/data/data_message_reactions.h index c018126dec..b47f72ac30 100644 --- a/Telegram/SourceFiles/data/data_message_reactions.h +++ b/Telegram/SourceFiles/data/data_message_reactions.h @@ -10,6 +10,10 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "base/timer.h" #include "data/data_message_reaction_id.h" +namespace Ui::Text { +class CustomEmoji; +} // namespace Ui::Text + namespace Lottie { class Icon; } // namespace Lottie @@ -62,6 +66,9 @@ public: [[nodiscard]] QImage resolveImageFor( const ReactionId &emoji, ImageSize size); + [[nodiscard]] std::unique_ptr resolveCustomFor( + const ReactionId &emoji, + ImageSize size); void send(not_null item, const ReactionId &chosen); [[nodiscard]] bool sending(not_null item) const; diff --git a/Telegram/SourceFiles/history/view/history_view_bottom_info.cpp b/Telegram/SourceFiles/history/view/history_view_bottom_info.cpp index 9ce17b3a94..b8800a865c 100644 --- a/Telegram/SourceFiles/history/view/history_view_bottom_info.cpp +++ b/Telegram/SourceFiles/history/view/history_view_bottom_info.cpp @@ -11,6 +11,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/chat/chat_style.h" #include "ui/text/text_options.h" #include "ui/text/text_utilities.h" +#include "ui/text/text_block.h" #include "lang/lang_keys.h" #include "history/history_item_components.h" #include "history/history_message.h" @@ -355,7 +356,12 @@ void BottomInfo::paintReactions( y += st::msgDateFont->height; widthLeft = availableWidth; } - if (reaction.image.isNull()) { + if (!reaction.custom && reaction.image.isNull()) { + reaction.custom = _reactionsOwner->resolveCustomFor( + reaction.id, + ::Data::Reactions::ImageSize::BottomInfo); + } + if (!reaction.custom && reaction.image.isNull()) { reaction.image = _reactionsOwner->resolveImageFor( reaction.id, ::Data::Reactions::ImageSize::BottomInfo); @@ -369,6 +375,9 @@ void BottomInfo::paintReactions( && (reaction.count < 2 || !reaction.animation->flying()); if (!reaction.image.isNull() && !skipImage) { p.drawImage(image.topLeft(), reaction.image); + } else if (reaction.custom && !skipImage) { + const auto size = Ui::Text::AdjustCustomEmojiSize(st::emojiSize); + reaction.custom->paint(p, x + (st::reactionInfoSize - size) / 2, y + (st::msgDateFont->height - size) / 2, crl::now(), Qt::white, false); } if (animating) { animations.push_back({ diff --git a/Telegram/SourceFiles/history/view/history_view_bottom_info.h b/Telegram/SourceFiles/history/view/history_view_bottom_info.h index b5a839eec8..7248b2353f 100644 --- a/Telegram/SourceFiles/history/view/history_view_bottom_info.h +++ b/Telegram/SourceFiles/history/view/history_view_bottom_info.h @@ -8,7 +8,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "history/view/history_view_object.h" -#include "data/data_message_reactions.h" +#include "data/data_message_reaction_id.h" #include "ui/text/text.h" #include "base/flags.h" @@ -16,6 +16,18 @@ namespace Ui { struct ChatPaintContext; } // namespace Ui +namespace Ui::Text { +class CustomEmoji; +} // namespace Ui::Text + +namespace Data { +class Reactions; +} // namespace Data + +namespace Lottie { +class Icon; +} // namespace Lottie + namespace HistoryView { namespace Reactions { class Animation; @@ -93,6 +105,7 @@ private: struct Reaction { mutable std::unique_ptr animation; mutable QImage image; + mutable std::unique_ptr custom; ReactionId id; QString countText; int count = 0; diff --git a/Telegram/SourceFiles/history/view/history_view_element.h b/Telegram/SourceFiles/history/view/history_view_element.h index 6aea91de25..595e0588b7 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.h +++ b/Telegram/SourceFiles/history/view/history_view_element.h @@ -34,10 +34,6 @@ struct ChatPaintContext; class ChatStyle; } // namespace Ui -namespace Lottie { -class Icon; -} // namespace Lottie - namespace HistoryView { enum class PointState : char; diff --git a/Telegram/SourceFiles/history/view/history_view_react_button.cpp b/Telegram/SourceFiles/history/view/history_view_react_button.cpp index 734936d5a9..8645ad056f 100644 --- a/Telegram/SourceFiles/history/view/history_view_react_button.cpp +++ b/Telegram/SourceFiles/history/view/history_view_react_button.cpp @@ -556,7 +556,6 @@ void Manager::updateButton(ButtonParameters parameters) { if (_button) { _button->applyState(ButtonState::Hidden); _buttonHiding.push_back(std::move(_button)); - _expandSelectorRequests.fire({ .expanded = false }); } _buttonShowTimer.cancel(); _scheduledParameters = std::nullopt; diff --git a/Telegram/SourceFiles/history/view/history_view_react_button.h b/Telegram/SourceFiles/history/view/history_view_react_button.h index 669b111a76..c2903b2b22 100644 --- a/Telegram/SourceFiles/history/view/history_view_react_button.h +++ b/Telegram/SourceFiles/history/view/history_view_react_button.h @@ -9,7 +9,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/effects/animations.h" #include "ui/widgets/scroll_area.h" -#include "data/data_message_reactions.h" +#include "data/data_message_reaction_id.h" #include "ui/chat/chat_style.h" namespace Ui { diff --git a/Telegram/SourceFiles/history/view/history_view_reactions.cpp b/Telegram/SourceFiles/history/view/history_view_reactions.cpp index 5a38a29f6f..52fb162b7a 100644 --- a/Telegram/SourceFiles/history/view/history_view_reactions.cpp +++ b/Telegram/SourceFiles/history/view/history_view_reactions.cpp @@ -14,6 +14,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/view/history_view_react_animation.h" #include "history/view/history_view_group_call_bar.h" #include "core/click_handler_types.h" +#include "data/data_message_reactions.h" #include "data/data_peer.h" #include "lang/lang_tag.h" #include "ui/chat/chat_style.h" diff --git a/Telegram/SourceFiles/history/view/history_view_reactions.h b/Telegram/SourceFiles/history/view/history_view_reactions.h index 54ebf3787d..a5881b88da 100644 --- a/Telegram/SourceFiles/history/view/history_view_reactions.h +++ b/Telegram/SourceFiles/history/view/history_view_reactions.h @@ -8,10 +8,11 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #pragma once #include "history/view/history_view_object.h" -#include "data/data_message_reactions.h" +#include "data/data_message_reaction_id.h" namespace Data { class CloudImageView; +class Reactions; } // namespace Data namespace Ui { diff --git a/Telegram/SourceFiles/history/view/reactions/message_reactions_list.cpp b/Telegram/SourceFiles/history/view/reactions/message_reactions_list.cpp index ffcd84e4e4..0a5be28d5f 100644 --- a/Telegram/SourceFiles/history/view/reactions/message_reactions_list.cpp +++ b/Telegram/SourceFiles/history/view/reactions/message_reactions_list.cpp @@ -15,7 +15,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/history.h" #include "api/api_who_reacted.h" #include "ui/controls/who_reacted_context_action.h" -#include "data/data_message_reactions.h" +#include "data/data_message_reaction_id.h" #include "main/main_session.h" #include "data/data_session.h" #include "data/data_peer.h" diff --git a/Telegram/SourceFiles/history/view/reactions/message_reactions_selector.cpp b/Telegram/SourceFiles/history/view/reactions/message_reactions_selector.cpp index b6f8905a7c..614b28ed66 100644 --- a/Telegram/SourceFiles/history/view/reactions/message_reactions_selector.cpp +++ b/Telegram/SourceFiles/history/view/reactions/message_reactions_selector.cpp @@ -10,7 +10,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "ui/rp_widget.h" #include "ui/abstract_button.h" #include "ui/controls/who_reacted_context_action.h" -#include "data/data_message_reactions.h" +#include "data/data_message_reaction_id.h" #include "styles/style_widgets.h" #include "styles/style_chat.h" diff --git a/Telegram/SourceFiles/window/notifications_manager.cpp b/Telegram/SourceFiles/window/notifications_manager.cpp index fdf3cf38f7..37751a9ca6 100644 --- a/Telegram/SourceFiles/window/notifications_manager.cpp +++ b/Telegram/SourceFiles/window/notifications_manager.cpp @@ -17,7 +17,6 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "lang/lang_keys.h" #include "data/notify/data_notify_settings.h" #include "data/stickers/data_custom_emoji.h" -#include "data/data_message_reactions.h" #include "data/data_document_media.h" #include "data/data_session.h" #include "data/data_channel.h" diff --git a/Telegram/SourceFiles/window/notifications_manager.h b/Telegram/SourceFiles/window/notifications_manager.h index e7dc8f3ad1..6c329713b7 100644 --- a/Telegram/SourceFiles/window/notifications_manager.h +++ b/Telegram/SourceFiles/window/notifications_manager.h @@ -7,7 +7,7 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once -#include "data/data_message_reactions.h" +#include "data/data_message_reaction_id.h" #include "base/observer.h" #include "base/timer.h"