diff --git a/animations/rotationstacked.cpp b/animations/rotationstacked.cpp index b2f199330..9b2d86aaa 100644 --- a/animations/rotationstacked.cpp +++ b/animations/rotationstacked.cpp @@ -34,12 +34,12 @@ RotationStackedAnimation::RotationStackedAnimation(QObject *parent) { m_backRotation = new QGraphicsRotation(this); m_frontRotation = new QGraphicsRotation(this); - m_sLayout = new StackedLayout; + m_wLayout = new StackedLayout; } RotationStackedAnimation::~RotationStackedAnimation() { - delete m_sLayout; + delete m_wLayout.data(); } void RotationStackedAnimation::setMovementDirection(const qint8 &direction) @@ -147,15 +147,17 @@ void RotationStackedAnimation::setBackWidget(QGraphicsWidget *backWidget) { m_backWidget = backWidget; - if(targetWidget()) { - m_sLayout->addWidget(targetWidget()); - m_sLayout->addWidget(m_backWidget.data()); + StackedLayout *layout = m_wLayout.data(); + + if(targetWidget() && backWidget && layout) { + layout->addWidget(targetWidget()); + layout->addWidget(backWidget); } } QGraphicsLayoutItem *RotationStackedAnimation::layout() { - return m_sLayout; + return m_wLayout.data(); } void RotationStackedAnimation::updateState(QAbstractAnimation::State newState, @@ -172,14 +174,19 @@ void RotationStackedAnimation::updateCurrentTime(int currentTime) return; } + StackedLayout *layout = m_wLayout.data(); + if (!layout) { + return; + } + qreal delta; if (currentTime <= duration()/2) { - m_sLayout->setCurrentWidgetIndex(0); + layout->setCurrentWidgetIndex(0); delta = easingCurve().valueForProgress((currentTime*2) / qreal(duration())); delta *= sideAngle; m_frontRotation->setAngle(delta); } else { - m_sLayout->setCurrentWidgetIndex(1); + layout->setCurrentWidgetIndex(1); delta = 1 - easingCurve().valueForProgress(((currentTime*2) - duration()) / qreal(duration())); delta = -delta; delta *= sideAngle; diff --git a/animations/rotationstacked_p.h b/animations/rotationstacked_p.h index 2fb357ffe..a37b0b6be 100644 --- a/animations/rotationstacked_p.h +++ b/animations/rotationstacked_p.h @@ -112,13 +112,12 @@ private: MovementDirection m_animDirection; /** Object the animation(s) should act upon. */ QWeakPointer m_backWidget; + /** Layout where widget would be added */ + QWeakPointer m_wLayout; /** Back Widget Rotation transform object */ QGraphicsRotation *m_backRotation; /** Front Widget Rotation transform object */ QGraphicsRotation *m_frontRotation; - /** rotation stacked layout where the widget would be added */ - StackedLayout *m_sLayout; - }; } // Plasma diff --git a/animations/stackedlayout.cpp b/animations/stackedlayout.cpp index ee32d9752..2641de211 100644 --- a/animations/stackedlayout.cpp +++ b/animations/stackedlayout.cpp @@ -21,7 +21,7 @@ #include StackedLayout::StackedLayout(QGraphicsLayoutItem *parent) - : QGraphicsLayout(parent), m_currentWidgetIndex(-1) + : QObject(0), m_currentWidgetIndex(-1), QGraphicsLayout(parent) { } diff --git a/animations/stackedlayout.h b/animations/stackedlayout.h index 01f156cf9..9a0d534f8 100644 --- a/animations/stackedlayout.h +++ b/animations/stackedlayout.h @@ -20,8 +20,11 @@ #include #include +#include -class StackedLayout : public QGraphicsLayout { +class StackedLayout : public QObject, public QGraphicsLayout +{ +Q_OBJECT public: explicit StackedLayout(QGraphicsLayoutItem *parent = 0); ~StackedLayout();