/* This file is part of Telegram Desktop, the official desktop application for the Telegram messaging service. For license and copyright information please follow this link: https://github.com/telegramdesktop/tdesktop/blob/master/LEGAL */ #pragma once #include "base/timer.h" #include "ui/effects/animations.h" class HistoryItem; namespace Data { class Session; } // namespace Data namespace HistoryView { class Element; class ElementHighlighter final { public: using ViewForItem = Fn; using RepaintView = Fn; ElementHighlighter( not_null data, ViewForItem viewForItem, RepaintView repaintView); void enqueue(not_null view); void highlight(FullMsgId itemId); void clear(); [[nodiscard]] float64 progress(not_null item) const; private: void checkNextHighlight(); void repaintHighlightedItem(not_null view); void updateMessage(); class AnimationManager final { public: AnimationManager(ElementHighlighter &parent); [[nodiscard]] bool animating() const; [[nodiscard]] float64 progress() const; void start(); void cancel(); private: ElementHighlighter &_parent; Ui::Animations::Simple _simple; std::optional _timer; }; const not_null _data; const ViewForItem _viewForItem; const RepaintView _repaintView; FullMsgId _highlightedMessageId; std::deque _queue; AnimationManager _animation; }; } // namespace HistoryView