From 524d64a46214956cadf7eaf08d854c2747d30de9 Mon Sep 17 00:00:00 2001 From: John Preston Date: Fri, 29 Nov 2019 16:42:42 +0300 Subject: [PATCH] Clip intro animation by Next button. --- Telegram/SourceFiles/intro/intro_step.cpp | 7 +++++++ Telegram/SourceFiles/intro/intro_step.h | 3 +++ Telegram/SourceFiles/intro/intro_widget.cpp | 3 +++ 3 files changed, 13 insertions(+) diff --git a/Telegram/SourceFiles/intro/intro_step.cpp b/Telegram/SourceFiles/intro/intro_step.cpp index 151951b49b..681a5020a6 100644 --- a/Telegram/SourceFiles/intro/intro_step.cpp +++ b/Telegram/SourceFiles/intro/intro_step.cpp @@ -233,6 +233,9 @@ bool Step::paintAnimated(Painter &p, QRect clip) { } return false; } + if (!_coverAnimation.clipping.isEmpty()) { + p.setClipRect(_coverAnimation.clipping); + } auto progress = (hasCover() ? anim::easeOutCirc(1., dt) : anim::linear(1., dt)); auto arrivingAlpha = progress; @@ -451,6 +454,10 @@ void Step::showAnimated(Direction direction) { } } +void Step::setShowAnimationClipping(QRect clipping) { + _coverAnimation.clipping = clipping; +} + void Step::setGoCallback(Fn callback) { _goCallback = std::move(callback); } diff --git a/Telegram/SourceFiles/intro/intro_step.h b/Telegram/SourceFiles/intro/intro_step.h index c538266225..c51db5e420 100644 --- a/Telegram/SourceFiles/intro/intro_step.h +++ b/Telegram/SourceFiles/intro/intro_step.h @@ -64,6 +64,7 @@ public: void showAnimated(Direction direction); void showFast(); [[nodiscard]] bool animating() const; + void setShowAnimationClipping(QRect clipping); [[nodiscard]] bool hasCover() const; [[nodiscard]] virtual bool hasBack() const; @@ -142,6 +143,8 @@ private: // From content top till the next button top. QPixmap contentSnapshotWas; QPixmap contentSnapshotNow; + + QRect clipping; }; void updateLabelsPosition(); void paintContentSnapshot( diff --git a/Telegram/SourceFiles/intro/intro_widget.cpp b/Telegram/SourceFiles/intro/intro_widget.cpp index 078c43f3e1..6b2bd5c323 100644 --- a/Telegram/SourceFiles/intro/intro_widget.cpp +++ b/Telegram/SourceFiles/intro/intro_widget.cpp @@ -639,6 +639,9 @@ void Widget::updateControlsGeometry() { nextTop, shownAmount); _next->moveToLeft((width() - _next->width()) / 2, realNextTop); + getStep()->setShowAnimationClipping(shownAmount > 0 + ? QRect(0, 0, width(), realNextTop) + : QRect()); if (_changeLanguage) { _changeLanguage->moveToLeft((width() - _changeLanguage->width()) / 2, _next->y() + _next->height() + _changeLanguage->height()); }