mirror of
https://github.com/telegramdesktop/tdesktop
synced 2025-09-04 08:25:38 +00:00
Added ability to unload not visible GIFs as heavy parts in overview.
This commit is contained in:
@@ -934,6 +934,15 @@ void ListWidget::unregisterHeavyItem(not_null<const BaseLayout*> item) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool ListWidget::itemVisible(not_null<const BaseLayout*> 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<PhotoData*> photo, FullMsgId id) {
|
void ListWidget::openPhoto(not_null<PhotoData*> photo, FullMsgId id) {
|
||||||
_controller->parentController()->openPhoto(photo, id);
|
_controller->parentController()->openPhoto(photo, id);
|
||||||
}
|
}
|
||||||
|
@@ -80,6 +80,7 @@ public:
|
|||||||
void registerHeavyItem(not_null<const BaseLayout*> item) override;
|
void registerHeavyItem(not_null<const BaseLayout*> item) override;
|
||||||
void unregisterHeavyItem(not_null<const BaseLayout*> item) override;
|
void unregisterHeavyItem(not_null<const BaseLayout*> item) override;
|
||||||
void repaintItem(not_null<const BaseLayout*> item) override;
|
void repaintItem(not_null<const BaseLayout*> item) override;
|
||||||
|
bool itemVisible(not_null<const BaseLayout*> item) override;
|
||||||
|
|
||||||
void openPhoto(not_null<PhotoData*> photo, FullMsgId id) override;
|
void openPhoto(not_null<PhotoData*> photo, FullMsgId id) override;
|
||||||
void openDocument(
|
void openDocument(
|
||||||
|
@@ -1895,7 +1895,8 @@ void Gif::clipCallback(Media::Clip::Notification notification) {
|
|||||||
height,
|
height,
|
||||||
ImageRoundRadius::None, RectPart::None);
|
ImageRoundRadius::None, RectPart::None);
|
||||||
}
|
}
|
||||||
} else if (_gif->autoPausedGif()/* && !context()->inlineItemVisible(this)*/) {
|
} else if (_gif->autoPausedGif()
|
||||||
|
&& !delegate()->itemVisible(this)) {
|
||||||
clearHeavyPart();
|
clearHeavyPart();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -2057,9 +2058,17 @@ void Gif::ensureDataMediaCreated() const {
|
|||||||
}
|
}
|
||||||
|
|
||||||
void Gif::clearHeavyPart() {
|
void Gif::clearHeavyPart() {
|
||||||
|
_gif.reset();
|
||||||
_dataMedia = nullptr;
|
_dataMedia = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Gif::setPosition(int32 position) {
|
||||||
|
ItemBase::setPosition(position);
|
||||||
|
if (position < 0) {
|
||||||
|
_gif.reset();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
float64 Gif::dataProgress() const {
|
float64 Gif::dataProgress() const {
|
||||||
ensureDataMediaCreated();
|
ensureDataMediaCreated();
|
||||||
return _dataMedia->progress();
|
return _dataMedia->progress();
|
||||||
|
@@ -225,6 +225,7 @@ public:
|
|||||||
StateRequest request) const override;
|
StateRequest request) const override;
|
||||||
|
|
||||||
void clearHeavyPart() override;
|
void clearHeavyPart() override;
|
||||||
|
void setPosition(int32 position);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
float64 dataProgress() const override;
|
float64 dataProgress() const override;
|
||||||
|
@@ -17,6 +17,7 @@ public:
|
|||||||
virtual void registerHeavyItem(not_null<const ItemBase*> item) = 0;
|
virtual void registerHeavyItem(not_null<const ItemBase*> item) = 0;
|
||||||
virtual void unregisterHeavyItem(not_null<const ItemBase*> item) = 0;
|
virtual void unregisterHeavyItem(not_null<const ItemBase*> item) = 0;
|
||||||
virtual void repaintItem(not_null<const ItemBase*> item) = 0;
|
virtual void repaintItem(not_null<const ItemBase*> item) = 0;
|
||||||
|
virtual bool itemVisible(not_null<const ItemBase*> item) = 0;
|
||||||
|
|
||||||
virtual void openPhoto(not_null<PhotoData*> photo, FullMsgId id) = 0;
|
virtual void openPhoto(not_null<PhotoData*> photo, FullMsgId id) = 0;
|
||||||
virtual void openDocument(
|
virtual void openDocument(
|
||||||
|
Reference in New Issue
Block a user