1 #include "omnianimation.h"
3 #include <QGraphicsWidget>
4 #include <QPropertyAnimation>
5 #include <QParallelAnimationGroup>
8 OmniAnimation::OmniAnimation(QObject
*parent
, QGraphicsWidget
*animatedObject
, QObject
*sender
)
9 : mParent( parent
), mAnimatedObject( animatedObject
), mSender( sender
),
10 mOmniGeometryAnimOne( 0 ), mOmniGeometryAnimTwo( 0 ), parallelAnim( 0 ),
16 OmniAnimation::~OmniAnimation()
18 delete mOmniGeometryAnimTwo
;
19 delete mOmniGeometryAnimOne
;
21 delete parallelAnimTwo
;
24 void OmniAnimation::create( QSizeF
*size
, qreal widthLayoutMargin
,
25 qreal xWidgetMargin
, qreal yWidgetMargin
)
28 // The states and animations.
29 /*( QObject * sender, const char * signal, QAbstractState * target ) */
31 mOmniGeometryAnimOne
= new QPropertyAnimation(mAnimatedObject
, "geometry");
32 mOmniGeometryAnimOne
->setEndValue(QRectF( (xWidgetMargin
+ widthLayoutMargin
),
33 size
->height() - 360 - (yWidgetMargin
+ widthLayoutMargin
) ,
34 size
->width() - (xWidgetMargin
+ widthLayoutMargin
)*2, 360));
35 mOmniGeometryAnimOne
->setStartValue(QRectF( xWidgetMargin
+ widthLayoutMargin
,
36 size
->height() - (yWidgetMargin
+ widthLayoutMargin
),
37 size
->width() - (xWidgetMargin
+ widthLayoutMargin
)*2, size
->height()));
38 mOmniGeometryAnimOne
->setDuration(600);
39 mOmniGeometryAnimOne
->setEasingCurve(QEasingCurve::InOutCubic
);
41 QPropertyAnimation
*paletteAnim
= new QPropertyAnimation(mParent
, "opacity");
42 paletteAnim
->setDuration(900);
43 paletteAnim
->setEasingCurve(QEasingCurve::InQuad
);
44 paletteAnim
->setStartValue(qreal(1));
45 paletteAnim
->setEndValue(qreal(0.05));
47 parallelAnim
= new QParallelAnimationGroup
;
48 parallelAnim
->addAnimation(mOmniGeometryAnimOne
);
49 parallelAnim
->addAnimation(paletteAnim
);
51 QObject::connect( mSender
, SIGNAL( clicked() ), parallelAnim
, SLOT( start() ) );
54 //second geometry animation
55 mOmniGeometryAnimTwo
= new QPropertyAnimation(mAnimatedObject
, "geometry");
56 mOmniGeometryAnimTwo
->setStartValue( mOmniGeometryAnimOne
->endValue() );
57 //mOmniGeometryAnimTwo->setEndValue( mOmniGeometryAnimOne->startValue() );
58 mOmniGeometryAnimTwo
->setEndValue( QRectF((xWidgetMargin
+ widthLayoutMargin
), -(size
->height() + 10), size
->width() - (xWidgetMargin
+ widthLayoutMargin
)*2, size
->height()));
59 mOmniGeometryAnimTwo
->setEasingCurve( QEasingCurve::InCubic
);
60 mOmniGeometryAnimTwo
->setDuration(400);
61 //second opacity animation
62 QPropertyAnimation
*secondOpacitty
= new QPropertyAnimation(mParent
, "opacity");
63 secondOpacitty
->setStartValue( qreal(0.05) );
64 secondOpacitty
->setEndValue( qreal(1) );
65 secondOpacitty
->setDuration(700);
67 parallelAnimTwo
= new QParallelAnimationGroup
;
68 parallelAnimTwo
->addAnimation(mOmniGeometryAnimTwo
);
69 parallelAnimTwo
->addAnimation(secondOpacitty
);
71 QObject::connect( mAnimatedObject
, SIGNAL( addItemClicked() ), parallelAnimTwo
, SLOT( start() ) );
74 void OmniAnimation::reset(QSizeF
*size
,
75 qreal widthLayoutMargin
, qreal xWidgetMargin
,
78 mOmniGeometryAnimOne
->setEndValue(QRectF( (xWidgetMargin
+ widthLayoutMargin
),
79 size
->height() - 360 - (yWidgetMargin
+ widthLayoutMargin
) ,
80 size
->width() - (xWidgetMargin
+ widthLayoutMargin
)*2, 360));
82 mOmniGeometryAnimOne
->setStartValue(QRectF( xWidgetMargin
+ widthLayoutMargin
,
83 size
->height() - (yWidgetMargin
+ widthLayoutMargin
),
84 size
->width() - (xWidgetMargin
+ widthLayoutMargin
)*2, size
->height()));
86 qDebug()<<"OmniAnimation::reset:"<<size
->width();
88 mOmniGeometryAnimTwo
->setStartValue( mOmniGeometryAnimOne
->endValue() );
89 mOmniGeometryAnimTwo
->setEndValue( QRectF((xWidgetMargin
+ widthLayoutMargin
),
90 -(size
->height() + 10), size
->width() - (xWidgetMargin
+ widthLayoutMargin
)*2, size
->height()));