diff --git a/animations/rotationstacked.cpp b/animations/rotationstacked.cpp index 1c2acc168..918c0724e 100644 --- a/animations/rotationstacked.cpp +++ b/animations/rotationstacked.cpp @@ -32,12 +32,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) @@ -69,15 +69,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( @@ -141,19 +143,24 @@ void RotationStackedAnimation::updateState( void RotationStackedAnimation::updateCurrentTime(int currentTime) { -QGraphicsWidget *w = targetWidget(); -if(w) { - qreal delta; - if (currentTime <= duration()/2) { - delta = Animation::easingCurve().valueForProgress( - (currentTime * 2) / qreal(duration())); - m_sLayout->setCurrentWidgetIndex(0); - delta = m_frontEndAngle * delta; + StackedLayout *layout = m_wLayout.data(); + if (!layout) { + return; + } + + QGraphicsWidget *w = targetWidget(); + if (w) { + qreal delta; + if (currentTime <= duration()/2) { + delta = Animation::easingCurve().valueForProgress( + (currentTime * 2) / qreal(duration())); + layout->setCurrentWidgetIndex(0); + delta = m_frontEndAngle * delta; m_frontRotation->setAngle(delta); } else { delta = Animation::easingCurve().valueForProgress( (currentTime/2) / qreal(duration())); - m_sLayout->setCurrentWidgetIndex(1); + layout->setCurrentWidgetIndex(1); delta = m_backEndAngle * delta; m_backRotation->setAngle(delta); } diff --git a/animations/rotationstacked_p.h b/animations/rotationstacked_p.h index 61466597d..1bc70b076 100644 --- a/animations/rotationstacked_p.h +++ b/animations/rotationstacked_p.h @@ -115,13 +115,12 @@ private: int m_backEndAngle; /** 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 2f3a0bd0c..faf26f860 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();