port itembackground to new animation api.

svn path=/trunk/KDE/kdelibs/; revision=1078255
This commit is contained in:
Igor Trindade Oliveira 2010-01-21 21:53:01 +00:00
parent eb8c97dcae
commit 79db16ac7b
2 changed files with 33 additions and 14 deletions

View File

@ -23,6 +23,8 @@
#include <QTimer>
#include <QStyleOptionGraphicsItem>
#include <QPropertyAnimation>
#include <kdebug.h>
#include <plasma/framesvg.h>
@ -49,7 +51,7 @@ public:
Plasma::FrameSvg *frameSvg;
QRectF oldGeometry;
QRectF newGeometry;
int animId;
QPropertyAnimation *anim;
qreal opacity;
bool fading;
bool fadeIn;
@ -66,7 +68,9 @@ ItemBackground::ItemBackground(QGraphicsWidget *parent)
setFlag(ItemIsFocusable, false);
d->frameSvg = new Plasma::FrameSvg(this);
d->animId = 0;
d->anim = new QPropertyAnimation(this, "animationUpdate", this);
d->anim->setStartValue(0);
d->anim->setEndValue(1);
d->opacity = 1;
d->fading = false;
d->fadeIn = false;
@ -116,12 +120,11 @@ void ItemBackground::setTarget(const QRectF &newGeometry)
d->newGeometry = d->newGeometry.intersected(QRectF(QPointF(0,0), pw->size()));
}
if (d->animId != 0) {
Plasma::Animator::self()->stopCustomAnimation(d->animId);
if (d->anim->state() != QAbstractAnimation::Stopped) {
d->anim->stop();
}
if (d->target && d->target->isVisible() && !isVisible()) {
//draw behind the target
setZValue(d->target->zValue()-1);
setGeometry(newGeometry);
d->oldGeometry = newGeometry;
@ -129,9 +132,9 @@ void ItemBackground::setTarget(const QRectF &newGeometry)
} else {
d->fading = false;
d->opacity = 1;
d->animId = Plasma::Animator::self()->customAnimation(
15, 250, Plasma::Animator::EaseInOutCurve, this, "animationUpdate");
d->anim->start();
}
}
void ItemBackground::setTargetItem(QGraphicsItem *target)
@ -236,19 +239,21 @@ QVariant ItemBackground::itemChange(GraphicsItemChange change, const QVariant &v
if (change == ItemVisibleChange) {
bool visible = value.toBool();
bool retVisible = visible;
if (visible == isVisible() || d->animId == 0) {
if (visible == isVisible() || d->anim->state() == QAbstractAnimation::Stopped) {
retVisible = true;
}
d->fading = true;
d->fadeIn = visible;
if (d->animId != 0) {
Plasma::Animator::self()->stopCustomAnimation(d->animId);
if (d->anim->state() != QAbstractAnimation::Stopped) {
d->anim->stop();
}
d->animId = Plasma::Animator::self()->customAnimation(
10, 250, Plasma::Animator::EaseInCurve, this, "animationUpdate");
d->anim->setDuration(250);
d->anim->start();
return retVisible;
}
return value;
}
@ -271,10 +276,19 @@ void ItemBackground::paint(QPainter *painter, const QStyleOptionGraphicsItem *op
}
}
void ItemBackground::setAnimationUpdate(qreal progress)
{
d->animationUpdate(progress);
}
qreal ItemBackground::animationUpdate() const
{
return d->opacity;
}
void ItemBackgroundPrivate::animationUpdate(qreal progress)
{
if (progress == 1) {
animId = 0;
if ((!fading) || (fadeIn)) {
emit q->targetReached(newGeometry);
if (target) {

View File

@ -43,6 +43,8 @@ class PLASMA_EXPORT ItemBackground : public QGraphicsWidget
Q_PROPERTY(QRectF target READ target WRITE setTarget)
Q_PROPERTY(QGraphicsItem* targetItem READ targetItem WRITE setTargetItem)
Q_PROPERTY(qreal animationUpdate READ animationUpdate WRITE setAnimationUpdate)
public:
ItemBackground(QGraphicsWidget *parent = 0);
~ItemBackground();
@ -120,7 +122,10 @@ protected:
void resizeEvent(QGraphicsSceneResizeEvent *);
private:
Q_PRIVATE_SLOT(d, void animationUpdate(qreal progress))
void setAnimationUpdate(qreal progress);
qreal animationUpdate() const;
private:
Q_PRIVATE_SLOT(d, void targetDestroyed(QObject*))
Q_PRIVATE_SLOT(d, void frameSvgChanged())
Q_PRIVATE_SLOT(d, void refreshCurrentTarget())