diff --git a/Telegram/SourceFiles/history/view/history_view_message.cpp b/Telegram/SourceFiles/history/view/history_view_message.cpp index a1adc1b4f5..50fe1cbf8a 100644 --- a/Telegram/SourceFiles/history/view/history_view_message.cpp +++ b/Telegram/SourceFiles/history/view/history_view_message.cpp @@ -519,7 +519,7 @@ QSize Message::performCountOptimalSize() { if (_summarize) { const auto &summary = item->summaryEntry(); if (_summarize->loading() != summary.loading) { - _summarize->setLoading(summary.loading, [this] { repaint(); }); + _summarize->setLoading(summary.loading); } } validateText(); diff --git a/Telegram/SourceFiles/history/view/history_view_transcribe_button.cpp b/Telegram/SourceFiles/history/view/history_view_transcribe_button.cpp index aeb4605e35..ee7052334a 100644 --- a/Telegram/SourceFiles/history/view/history_view_transcribe_button.cpp +++ b/Telegram/SourceFiles/history/view/history_view_transcribe_button.cpp @@ -71,14 +71,23 @@ QSize TranscribeButton::size() const { return _size; } -void TranscribeButton::setLoading(bool loading, Fn update) { +void TranscribeButton::setLoading(bool loading) { if (_loading == loading) { return; } _loading = loading; if (_loading) { + const auto session = &_item->history()->session(); _animation = std::make_unique( - update, + [=, itemId = _item->fullId()] { + if (const auto item = session->data().message(itemId)) { + session->data().requestItemRepaint( + item, + _lastPaintedPoint.isNull() + ? QRect() + : QRect(_lastPaintedPoint, size())); + } + }, st::historyTranscribeRadialAnimation); _animation->start(); } else if (_animation) { diff --git a/Telegram/SourceFiles/history/view/history_view_transcribe_button.h b/Telegram/SourceFiles/history/view/history_view_transcribe_button.h index 8c2b2f1e2b..f6f431743b 100644 --- a/Telegram/SourceFiles/history/view/history_view_transcribe_button.h +++ b/Telegram/SourceFiles/history/view/history_view_transcribe_button.h @@ -31,7 +31,7 @@ public: [[nodiscard]] QSize size() const; void setOpened(bool opened, Fn update); - void setLoading(bool loading, Fn update); + void setLoading(bool loading); [[nodiscard]] bool loading() const; void paint(QPainter &p, int x, int y, const PaintContext &context); void addRipple(Fn callback); diff --git a/Telegram/SourceFiles/history/view/media/history_view_document.cpp b/Telegram/SourceFiles/history/view/media/history_view_document.cpp index 0a8d36f132..ac668c6b87 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_document.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_document.cpp @@ -440,8 +440,7 @@ QSize Document::countOptimalSize() { const auto &entry = transcribes->entry(_realParent); const auto update = [=] { repaint(); }; voice->transcribe->setLoading( - entry.shown && (entry.requestId || entry.pending), - update); + entry.shown && (entry.requestId || entry.pending)); const auto pending = entry.pending; auto descriptor = pending ? Lottie::IconDescriptor{ diff --git a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp index e60a1a2024..c30410c49c 100644 --- a/Telegram/SourceFiles/history/view/media/history_view_gif.cpp +++ b/Telegram/SourceFiles/history/view/media/history_view_gif.cpp @@ -268,8 +268,7 @@ QSize Gif::countOptimalSize() { const auto &entry = _data->session().api().transcribes().entry( _realParent); _transcribe->setLoading( - entry.shown && (entry.requestId || entry.pending), - [=] { repaint(); }); + entry.shown && (entry.requestId || entry.pending)); } const auto minWidth = std::clamp(