diff --git a/Telegram/SourceFiles/intro/intro_step.cpp b/Telegram/SourceFiles/intro/intro_step.cpp index 151951b49..681a5020a 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 c53826622..c51db5e42 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 078c43f3e..6b2bd5c32 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()); }