Added animation pause in TopBar in Premium Settings for user.

This commit is contained in:
23rd 2022-08-25 01:36:26 +03:00 committed by John Preston
parent 638cf237c4
commit 857f56d5b4
1 changed files with 21 additions and 4 deletions

View File

@ -375,6 +375,7 @@ public:
QSizeF size); QSizeF size);
void setCenter(QPointF position); void setCenter(QPointF position);
void setPaused(bool paused);
void paint(QPainter &p); void paint(QPainter &p);
private: private:
@ -383,6 +384,7 @@ private:
QRectF _rect; QRectF _rect;
std::shared_ptr<Data::DocumentMedia> _media; std::shared_ptr<Data::DocumentMedia> _media;
std::unique_ptr<Lottie::SinglePlayer> _lottie; std::unique_ptr<Lottie::SinglePlayer> _lottie;
bool _paused = false;
rpl::lifetime _lifetime; rpl::lifetime _lifetime;
}; };
@ -430,6 +432,10 @@ void EmojiStatusTopBar::setCenter(QPointF position) {
_rect = QRectF(QPointF(position - shift), QPointF(position + shift)); _rect = QRectF(QPointF(position - shift), QPointF(position + shift));
} }
void EmojiStatusTopBar::setPaused(bool paused) {
_paused = paused;
}
QPixmap EmojiStatusTopBar::paintedPixmap(const QSize &size) const { QPixmap EmojiStatusTopBar::paintedPixmap(const QSize &size) const {
const auto good = _media->goodThumbnail(); const auto good = _media->goodThumbnail();
if (const auto image = _media->getStickerLarge()) { if (const auto image = _media->getStickerLarge()) {
@ -450,7 +456,9 @@ void EmojiStatusTopBar::paint(QPainter &p) {
}); });
p.drawImage(_rect, info.image); p.drawImage(_rect, info.image);
_lottie->markFrameShown(); if (!_paused) {
_lottie->markFrameShown();
}
} }
} else if (_media) { } else if (_media) {
p.drawPixmap(_rect, paintedPixmap(_rect.size().toSize()), _rect); p.drawPixmap(_rect, paintedPixmap(_rect.size().toSize()), _rect);
@ -475,7 +483,7 @@ private:
void updateTitle( void updateTitle(
DocumentData *document, DocumentData *document,
TextWithEntities name, TextWithEntities name,
not_null<Window::SessionController*> controller) const; not_null<Window::SessionController*> controller);
void updateAbout(DocumentData *document) const; void updateAbout(DocumentData *document) const;
object_ptr<Ui::RpWidget> _content; object_ptr<Ui::RpWidget> _content;
@ -662,7 +670,7 @@ TopBarUser::TopBarUser(
void TopBarUser::updateTitle( void TopBarUser::updateTitle(
DocumentData *document, DocumentData *document,
TextWithEntities name, TextWithEntities name,
not_null<Window::SessionController*> controller) const { not_null<Window::SessionController*> controller) {
if (!document) { if (!document) {
return _title->setMarkedText( return _title->setMarkedText(
tr::lng_premium_summary_user_title( tr::lng_premium_summary_user_title(
@ -705,12 +713,18 @@ void TopBarUser::updateTitle(
_title->setMarkedText(std::move(title), context); _title->setMarkedText(std::move(title), context);
auto link = std::make_shared<LambdaClickHandler>([=, auto link = std::make_shared<LambdaClickHandler>([=,
stickerSetIdentifier = stickerInfo->set] { stickerSetIdentifier = stickerInfo->set] {
controller->show( setPaused(true);
const auto box = controller->show(
Box<StickerSetBox>( Box<StickerSetBox>(
controller, controller,
stickerSetIdentifier, stickerSetIdentifier,
Data::StickersType::Emoji), Data::StickersType::Emoji),
Ui::LayerOption::KeepOther); Ui::LayerOption::KeepOther);
box->boxClosing(
) | rpl::start_with_next(crl::guard(this, [=] {
setPaused(false);
}), box->lifetime());
}); });
_title->setLink(linkIndex, std::move(link)); _title->setLink(linkIndex, std::move(link));
} }
@ -725,6 +739,9 @@ void TopBarUser::updateAbout(DocumentData *document) const {
void TopBarUser::setPaused(bool paused) { void TopBarUser::setPaused(bool paused) {
_ministars.setPaused(paused); _ministars.setPaused(paused);
if (_emojiStatus) {
_emojiStatus->setPaused(paused);
}
} }
void TopBarUser::setTextPosition(int x, int y) { void TopBarUser::setTextPosition(int x, int y) {