From 87cc2ab8166be5ce23cf48d531ae27b6f286fde1 Mon Sep 17 00:00:00 2001 From: Ivailo Monev Date: Thu, 30 May 2019 10:24:22 +0000 Subject: [PATCH] another take on QWidgetAnimator Signed-off-by: Ivailo Monev --- src/gui/widgets/qwidgetanimator.cpp | 20 +++++++++++--------- src/gui/widgets/qwidgetanimator_p.h | 2 -- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/src/gui/widgets/qwidgetanimator.cpp b/src/gui/widgets/qwidgetanimator.cpp index cfebcaf5e..9cbf59070 100644 --- a/src/gui/widgets/qwidgetanimator.cpp +++ b/src/gui/widgets/qwidgetanimator.cpp @@ -60,13 +60,11 @@ QWidgetAnimator::QWidgetAnimator(QMainWindowLayout *layout) void QWidgetAnimator::abort(QWidget *w) { #ifndef QT_NO_ANIMATION - QMutexLocker locker(&m_mutex); QPropertyAnimation *anim = m_animation_map.take(w); if (anim) { anim->stop(); anim->deleteLater(); } - locker.unlock(); #ifndef QT_NO_MAINWINDOW m_mainWindowLayout->animationFinished(w); #endif @@ -95,20 +93,24 @@ void QWidgetAnimator::animate(QWidget *widget, const QRect &_final_geometry, boo const QRect final_geometry = _final_geometry.isValid() || widget->isWindow() ? _final_geometry : QRect(QPoint(-500 - widget->width(), -500 - widget->height()), widget->size()); + if (!animate) { + widget->setGeometry(final_geometry); + m_mainWindowLayout->animationFinished(widget); + return; + } + #ifndef QT_NO_ANIMATION - QMutexLocker locker(&m_mutex); - QPropertyAnimation* it = m_animation_map.value(widget); - if (it && it->endValue().toRect() == final_geometry) + QPropertyAnimation* anim = m_animation_map.value(widget); + if (anim && anim->endValue().toRect() == final_geometry) return; - QPropertyAnimation *anim = new QPropertyAnimation(widget, "geometry", widget); - anim->setDuration(animate ? 200 : 0); + anim = new QPropertyAnimation(widget, "geometry", widget); + anim->setDuration(200); anim->setEasingCurve(QEasingCurve::InOutQuad); anim->setEndValue(final_geometry); m_animation_map.insert(widget, anim); - locker.unlock(); connect(anim, SIGNAL(finished()), this, SLOT(animationFinished())); - anim->start(QPropertyAnimation::DeleteWhenStopped); + anim->start(); #else //we do it in one shot widget->setGeometry(final_geometry); diff --git a/src/gui/widgets/qwidgetanimator_p.h b/src/gui/widgets/qwidgetanimator_p.h index ca4f447fa..d748ba29f 100644 --- a/src/gui/widgets/qwidgetanimator_p.h +++ b/src/gui/widgets/qwidgetanimator_p.h @@ -55,7 +55,6 @@ #include #include -#include QT_BEGIN_NAMESPACE @@ -83,7 +82,6 @@ private: typedef QMap AnimationMap; AnimationMap m_animation_map; QMainWindowLayout *m_mainWindowLayout; - QMutex m_mutex; }; QT_END_NAMESPACE -- 2.11.0