From a153059b38131f86dc97a79e6390ec6cac5e0515 Mon Sep 17 00:00:00 2001 From: 23rd <23rd@vivaldi.net> Date: Thu, 22 Jul 2021 20:57:48 +0300 Subject: [PATCH] Added ability to unload not visible GIFs as heavy parts in overview. --- .../SourceFiles/info/media/info_media_list_widget.cpp | 9 +++++++++ .../SourceFiles/info/media/info_media_list_widget.h | 1 + Telegram/SourceFiles/overview/overview_layout.cpp | 11 ++++++++++- Telegram/SourceFiles/overview/overview_layout.h | 1 + .../SourceFiles/overview/overview_layout_delegate.h | 1 + 5 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp index 669d03e95..7495f8d95 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_widget.cpp +++ b/Telegram/SourceFiles/info/media/info_media_list_widget.cpp @@ -934,6 +934,15 @@ void ListWidget::unregisterHeavyItem(not_null item) { } } +bool ListWidget::itemVisible(not_null item) { + if (const auto &found = findItemById(GetUniversalId(item))) { + const auto geometry = found->geometry; + return (geometry.top() < _visibleBottom) + && (geometry.top() + geometry.height() > _visibleTop); + } + return true; +} + void ListWidget::openPhoto(not_null photo, FullMsgId id) { _controller->parentController()->openPhoto(photo, id); } diff --git a/Telegram/SourceFiles/info/media/info_media_list_widget.h b/Telegram/SourceFiles/info/media/info_media_list_widget.h index 2a9a678ad..6498c062e 100644 --- a/Telegram/SourceFiles/info/media/info_media_list_widget.h +++ b/Telegram/SourceFiles/info/media/info_media_list_widget.h @@ -80,6 +80,7 @@ public: void registerHeavyItem(not_null item) override; void unregisterHeavyItem(not_null item) override; void repaintItem(not_null item) override; + bool itemVisible(not_null item) override; void openPhoto(not_null photo, FullMsgId id) override; void openDocument( diff --git a/Telegram/SourceFiles/overview/overview_layout.cpp b/Telegram/SourceFiles/overview/overview_layout.cpp index bad2a68b4..ff34a9370 100644 --- a/Telegram/SourceFiles/overview/overview_layout.cpp +++ b/Telegram/SourceFiles/overview/overview_layout.cpp @@ -1895,7 +1895,8 @@ void Gif::clipCallback(Media::Clip::Notification notification) { height, ImageRoundRadius::None, RectPart::None); } - } else if (_gif->autoPausedGif()/* && !context()->inlineItemVisible(this)*/) { + } else if (_gif->autoPausedGif() + && !delegate()->itemVisible(this)) { clearHeavyPart(); } } @@ -2057,9 +2058,17 @@ void Gif::ensureDataMediaCreated() const { } void Gif::clearHeavyPart() { + _gif.reset(); _dataMedia = nullptr; } +void Gif::setPosition(int32 position) { + ItemBase::setPosition(position); + if (position < 0) { + _gif.reset(); + } +} + float64 Gif::dataProgress() const { ensureDataMediaCreated(); return _dataMedia->progress(); diff --git a/Telegram/SourceFiles/overview/overview_layout.h b/Telegram/SourceFiles/overview/overview_layout.h index 65682f38e..aff7292d7 100644 --- a/Telegram/SourceFiles/overview/overview_layout.h +++ b/Telegram/SourceFiles/overview/overview_layout.h @@ -225,6 +225,7 @@ public: StateRequest request) const override; void clearHeavyPart() override; + void setPosition(int32 position); protected: float64 dataProgress() const override; diff --git a/Telegram/SourceFiles/overview/overview_layout_delegate.h b/Telegram/SourceFiles/overview/overview_layout_delegate.h index a1dcfe5e5..e2fc7717d 100644 --- a/Telegram/SourceFiles/overview/overview_layout_delegate.h +++ b/Telegram/SourceFiles/overview/overview_layout_delegate.h @@ -17,6 +17,7 @@ public: virtual void registerHeavyItem(not_null item) = 0; virtual void unregisterHeavyItem(not_null item) = 0; virtual void repaintItem(not_null item) = 0; + virtual bool itemVisible(not_null item) = 0; virtual void openPhoto(not_null photo, FullMsgId id) = 0; virtual void openDocument(