From 8bd0ff7925d8befaab4b339959a0d2dec855b04a Mon Sep 17 00:00:00 2001 From: John Preston Date: Sun, 18 Sep 2022 16:52:19 +0400 Subject: [PATCH] Opimize spoiler revealing. --- .../admin_log/history_admin_log_inner.cpp | 5 ---- .../admin_log/history_admin_log_inner.h | 3 --- .../history/history_inner_widget.cpp | 11 -------- .../history/history_inner_widget.h | 3 --- .../history/view/history_view_element.cpp | 3 --- .../history/view/history_view_element.h | 2 -- .../history/view/history_view_list_widget.cpp | 5 ---- .../history/view/history_view_list_widget.h | 4 --- .../history_view_spoiler_click_handler.cpp | 26 +++++++++---------- Telegram/lib_ui | 2 +- 10 files changed, 14 insertions(+), 50 deletions(-) diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp index d5d32b4da..2fb010c85 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.cpp @@ -682,11 +682,6 @@ void InnerWidget::elementStartPremium( void InnerWidget::elementCancelPremium(not_null view) { } -void InnerWidget::elementShowSpoilerAnimation() { - _spoilerOpacity.stop(); - _spoilerOpacity.start([=] { update(); }, 0., 1., st::fadeWrapDuration); -} - void InnerWidget::saveState(not_null memento) { memento->setFilter(std::move(_filter)); memento->setAdmins(std::move(_admins)); diff --git a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h index 5ce3e4dcc..04ecab2d8 100644 --- a/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h +++ b/Telegram/SourceFiles/history/admin_log/history_admin_log_inner.h @@ -143,7 +143,6 @@ public: HistoryView::Element *replacing) override; void elementCancelPremium( not_null view) override; - void elementShowSpoilerAnimation() override; ~InnerWidget(); @@ -327,8 +326,6 @@ private: QPoint _trippleClickPoint; base::Timer _trippleClickTimer; - Ui::Animations::Simple _spoilerOpacity; - FilterValue _filter; QString _searchQuery; std::vector> _admins; diff --git a/Telegram/SourceFiles/history/history_inner_widget.cpp b/Telegram/SourceFiles/history/history_inner_widget.cpp index 9a4e6687e..56c2d1b09 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.cpp +++ b/Telegram/SourceFiles/history/history_inner_widget.cpp @@ -273,12 +273,6 @@ public: } } - void elementShowSpoilerAnimation() override { - if (_widget) { - _widget->elementShowSpoilerAnimation(); - } - } - not_null delegate() override { return this; } @@ -3307,11 +3301,6 @@ void HistoryInner::elementCancelPremium(not_null view) { _emojiInteractions->cancelPremiumEffect(view); } -void HistoryInner::elementShowSpoilerAnimation() { - _spoilerOpacity.stop(); - _spoilerOpacity.start([=] { update(); }, 0., 1., st::fadeWrapDuration); -} - auto HistoryInner::getSelectionState() const -> HistoryView::TopBarWidget::SelectedState { auto result = HistoryView::TopBarWidget::SelectedState {}; diff --git a/Telegram/SourceFiles/history/history_inner_widget.h b/Telegram/SourceFiles/history/history_inner_widget.h index a8e359d8b..6b42c2156 100644 --- a/Telegram/SourceFiles/history/history_inner_widget.h +++ b/Telegram/SourceFiles/history/history_inner_widget.h @@ -158,7 +158,6 @@ public: not_null view, Element *replacing); void elementCancelPremium(not_null view); - void elementShowSpoilerAnimation(); void updateBotInfo(bool recount = true); @@ -503,8 +502,6 @@ private: crl::time _touchTime = 0; base::Timer _touchScrollTimer; - Ui::Animations::Simple _spoilerOpacity; - // _menu must be destroyed before _whoReactedMenuLifetime. rpl::lifetime _whoReactedMenuLifetime; base::unique_qptr _menu; diff --git a/Telegram/SourceFiles/history/view/history_view_element.cpp b/Telegram/SourceFiles/history/view/history_view_element.cpp index 082db4f41..a2ae6490f 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.cpp +++ b/Telegram/SourceFiles/history/view/history_view_element.cpp @@ -217,9 +217,6 @@ void SimpleElementDelegate::elementCancelPremium( not_null view) { } -void SimpleElementDelegate::elementShowSpoilerAnimation() { -} - TextSelection UnshiftItemSelection( TextSelection selection, uint16 byLength) { diff --git a/Telegram/SourceFiles/history/view/history_view_element.h b/Telegram/SourceFiles/history/view/history_view_element.h index df7aedc66..987206996 100644 --- a/Telegram/SourceFiles/history/view/history_view_element.h +++ b/Telegram/SourceFiles/history/view/history_view_element.h @@ -106,7 +106,6 @@ public: not_null view, Element *replacing) = 0; virtual void elementCancelPremium(not_null view) = 0; - virtual void elementShowSpoilerAnimation() = 0; virtual ~ElementDelegate() { } @@ -168,7 +167,6 @@ public: not_null view, Element *replacing) override; void elementCancelPremium(not_null view) override; - void elementShowSpoilerAnimation() override; protected: [[nodiscard]] not_null controller() const { diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp index ff662d760..b106625c6 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.cpp +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.cpp @@ -1506,11 +1506,6 @@ void ListWidget::elementCancelPremium(not_null view) { _emojiInteractions->cancelPremiumEffect(view); } -void ListWidget::elementShowSpoilerAnimation() { - _spoilerOpacity.stop(); - _spoilerOpacity.start([=] { update(); }, 0., 1., st::fadeWrapDuration); -} - void ListWidget::saveState(not_null memento) { memento->setAroundPosition(_aroundPosition); auto state = countScrollState(); diff --git a/Telegram/SourceFiles/history/view/history_view_list_widget.h b/Telegram/SourceFiles/history/view/history_view_list_widget.h index 8457534d2..673c3c8b0 100644 --- a/Telegram/SourceFiles/history/view/history_view_list_widget.h +++ b/Telegram/SourceFiles/history/view/history_view_list_widget.h @@ -303,8 +303,6 @@ public: Element *replacing) override; void elementCancelPremium(not_null view) override; - void elementShowSpoilerAnimation() override; - void setEmptyInfoWidget(base::unique_qptr &&w); ~ListWidget(); @@ -647,8 +645,6 @@ private: ElementHighlighter _highlighter; - Ui::Animations::Simple _spoilerOpacity; - Ui::DraggingScrollManager _selectScroll; InfoTooltip _topToast; diff --git a/Telegram/SourceFiles/history/view/history_view_spoiler_click_handler.cpp b/Telegram/SourceFiles/history/view/history_view_spoiler_click_handler.cpp index 29184e792..82f13c8a4 100644 --- a/Telegram/SourceFiles/history/view/history_view_spoiler_click_handler.cpp +++ b/Telegram/SourceFiles/history/view/history_view_spoiler_click_handler.cpp @@ -12,17 +12,21 @@ https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL #include "history/view/history_view_element.h" #include "main/main_session.h" #include "window/window_session_controller.h" -#include "ui/spoiler_click_handler.h" namespace HistoryView { namespace { -class AnimatedSpoilerClickHandler final : public SpoilerClickHandler { +class AnimatedSpoilerClickHandler final : public ClickHandler { public: - AnimatedSpoilerClickHandler() = default; + explicit AnimatedSpoilerClickHandler(Ui::Text::String &text) + : _text(text) { + } void onClick(ClickContext context) const override; +private: + Ui::Text::String &_text; + }; void AnimatedSpoilerClickHandler::onClick(ClickContext context) const { @@ -32,11 +36,7 @@ void AnimatedSpoilerClickHandler::onClick(ClickContext context) const { } const auto my = context.other.value(); if (const auto d = my.elementDelegate ? my.elementDelegate() : nullptr) { - d->elementShowSpoilerAnimation(); - const auto nonconst = const_cast(this); - nonconst->setStartMs(crl::now()); - SpoilerClickHandler::onClick({}); - + _text.setSpoilerRevealed(true, anim::type::normal); if (const auto controller = my.sessionWindow.get()) { controller->session().data().registerShownSpoiler(my.itemId); } @@ -46,15 +46,15 @@ void AnimatedSpoilerClickHandler::onClick(ClickContext context) const { } // namespace void FillTextWithAnimatedSpoilers(Ui::Text::String &text) { - const auto link = std::make_shared(); - for (auto i = 0; i < text.spoilersCount(); i++) { - text.setSpoiler(i + 1, link); + if (text.hasSpoilers()) { + text.setSpoilerLink( + std::make_shared(text)); } } void HideSpoilers(Ui::Text::String &text) { - for (auto i = 0; i < text.spoilersCount(); i++) { - text.setSpoilerShown(i + 1, false); + if (text.hasSpoilers()) { + text.setSpoilerRevealed(false, anim::type::instant); } } diff --git a/Telegram/lib_ui b/Telegram/lib_ui index a60fe582a..1b429325e 160000 --- a/Telegram/lib_ui +++ b/Telegram/lib_ui @@ -1 +1 @@ -Subproject commit a60fe582ad9ab797ead0a18a9ed18e1892681c60 +Subproject commit 1b429325e4d315f030b71da4262c07f2961ca494