Added Plasma::PendulumCurve class plus make it work with RotationAnimation
svn path=/trunk/KDE/kdelibs/; revision=1117942
This commit is contained in:
parent
abd0dd20b5
commit
2375cd6ce8
@ -51,6 +51,7 @@ set(plasma_LIB_SRCS
|
|||||||
animator.cpp
|
animator.cpp
|
||||||
animations/animation.cpp
|
animations/animation.cpp
|
||||||
animations/easinganimation.cpp
|
animations/easinganimation.cpp
|
||||||
|
animations/pendulumcurve.cpp
|
||||||
animations/fade.cpp
|
animations/fade.cpp
|
||||||
animations/grow.cpp
|
animations/grow.cpp
|
||||||
animations/slide.cpp
|
animations/slide.cpp
|
||||||
@ -365,6 +366,7 @@ endif(PHONON_FOUND)
|
|||||||
|
|
||||||
install(FILES
|
install(FILES
|
||||||
animations/animation.h
|
animations/animation.h
|
||||||
|
animations/pendulumcurve.h
|
||||||
DESTINATION ${INCLUDE_INSTALL_DIR}/plasma/animations COMPONENT Devel)
|
DESTINATION ${INCLUDE_INSTALL_DIR}/plasma/animations COMPONENT Devel)
|
||||||
|
|
||||||
|
|
||||||
|
54
animations/pendulumcurve.cpp
Normal file
54
animations/pendulumcurve.cpp
Normal file
@ -0,0 +1,54 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 Bruno Abinader <bruno.abinader@indt.org.br>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "pendulumcurve.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* This static method is used to create a custom easing curve type.
|
||||||
|
* @param progress animation progress value
|
||||||
|
* @return pendulum easing curve progress value
|
||||||
|
*/
|
||||||
|
static qreal pendulumFunction(qreal progress)
|
||||||
|
{
|
||||||
|
if (progress <= 0.25) {
|
||||||
|
progress *= 4;
|
||||||
|
} else if (progress <= 0.50) {
|
||||||
|
progress -= 0.25;
|
||||||
|
progress *= 4;
|
||||||
|
progress = 1 - progress;
|
||||||
|
} else if (progress <= 0.75) {
|
||||||
|
progress -= 0.50;
|
||||||
|
progress *= -4;
|
||||||
|
} else {
|
||||||
|
progress -= 0.75;
|
||||||
|
progress *= 4;
|
||||||
|
progress = 1 - progress;
|
||||||
|
progress *= -1;
|
||||||
|
}
|
||||||
|
return progress;
|
||||||
|
}
|
||||||
|
|
||||||
|
namespace Plasma
|
||||||
|
{
|
||||||
|
|
||||||
|
PendulumCurve::PendulumCurve()
|
||||||
|
: QEasingCurve()
|
||||||
|
{
|
||||||
|
setCustomType(pendulumFunction);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace Plasma
|
46
animations/pendulumcurve.h
Normal file
46
animations/pendulumcurve.h
Normal file
@ -0,0 +1,46 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2010 Bruno Abinader <bruno.abinader@indt.org.br>
|
||||||
|
*
|
||||||
|
* This library is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU Lesser General Public
|
||||||
|
* License as published by the Free Software Foundation; either
|
||||||
|
* version 2.1 of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This library is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||||
|
* Lesser General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU Lesser General Public
|
||||||
|
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef PLASMA_ANIMATIONS_PENDULUMCURVE_H
|
||||||
|
#define PLASMA_ANIMATIONS_PENDULUMCURVE_H
|
||||||
|
|
||||||
|
#include <QtCore/QEasingCurve>
|
||||||
|
|
||||||
|
#include <plasma/plasma_export.h>
|
||||||
|
|
||||||
|
namespace Plasma
|
||||||
|
{
|
||||||
|
|
||||||
|
/*
|
||||||
|
* @class PendulumCurve plasma/animations/pendulumcurve.h
|
||||||
|
* @shot Pendulum Easing Curve
|
||||||
|
*
|
||||||
|
* This easing curve provides values which are split in 4 parts:
|
||||||
|
* from 0 to 1, from 1 to 0, from 0 to -1, and from -1 to 0, in a linear way.
|
||||||
|
*/
|
||||||
|
class PLASMA_EXPORT PendulumCurve : public QEasingCurve
|
||||||
|
{
|
||||||
|
public:
|
||||||
|
/**
|
||||||
|
* default constructor
|
||||||
|
*/
|
||||||
|
PendulumCurve();
|
||||||
|
};
|
||||||
|
|
||||||
|
} // namespace Plasma
|
||||||
|
|
||||||
|
#endif // PLASMA_ANIMATIONS_PENDULUMCURVE_H
|
@ -16,25 +16,24 @@
|
|||||||
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "rotation_p.h"
|
|
||||||
|
|
||||||
#include <QGraphicsRotation>
|
#include <QGraphicsRotation>
|
||||||
#include <QEasingCurve>
|
#include <QEasingCurve>
|
||||||
#include <QVector3D>
|
#include <QVector3D>
|
||||||
|
|
||||||
#include <kdebug.h>
|
#include "kdebug.h"
|
||||||
|
|
||||||
|
#include "rotation_p.h"
|
||||||
|
|
||||||
namespace Plasma
|
namespace Plasma
|
||||||
{
|
{
|
||||||
|
|
||||||
RotationAnimation::RotationAnimation(QObject *parent, qint8 reference, Qt::Axis axis, qreal angle)
|
RotationAnimation::RotationAnimation(QObject *parent, qint8 reference, Qt::Axis axis, qreal angle)
|
||||||
: EasingAnimation(parent)
|
: EasingAnimation(parent),
|
||||||
|
m_rotation(new QGraphicsRotation(this)),
|
||||||
|
m_angle(angle),
|
||||||
|
m_axis(axis),
|
||||||
|
m_reference(reference)
|
||||||
{
|
{
|
||||||
setAngle(angle);
|
|
||||||
setAxis(axis);
|
|
||||||
setReference(reference);
|
|
||||||
|
|
||||||
m_rotation = new QGraphicsRotation(this);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
RotationAnimation::~RotationAnimation()
|
RotationAnimation::~RotationAnimation()
|
||||||
@ -151,12 +150,6 @@ void RotationAnimation::updateState(QAbstractAnimation::State newState, QAbstrac
|
|||||||
QList<QGraphicsTransform *> transformation;
|
QList<QGraphicsTransform *> transformation;
|
||||||
transformation.append(m_rotation);
|
transformation.append(m_rotation);
|
||||||
m_object->setTransformations(transformation);
|
m_object->setTransformations(transformation);
|
||||||
|
|
||||||
if ((oldState == Stopped) && (newState == Running)) {
|
|
||||||
m_rotation->setAngle(direction() == Forward ? 0 : angle());
|
|
||||||
} else if (newState == Stopped) {
|
|
||||||
m_rotation->setAngle(direction() == Forward ? angle() : 0);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void RotationAnimation::updateEffectiveTime(int currentTime)
|
void RotationAnimation::updateEffectiveTime(int currentTime)
|
||||||
|
@ -45,7 +45,8 @@ class RotationAnimation : public EasingAnimation
|
|||||||
Q_PROPERTY(qreal angle READ angle WRITE setAngle)
|
Q_PROPERTY(qreal angle READ angle WRITE setAngle)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
/** Default constructor
|
/**
|
||||||
|
* Default constructor
|
||||||
*
|
*
|
||||||
* @param parent Animation object parent.
|
* @param parent Animation object parent.
|
||||||
* @param reference See \ref Animation::Reference.
|
* @param reference See \ref Animation::Reference.
|
||||||
@ -66,18 +67,30 @@ public:
|
|||||||
*/
|
*/
|
||||||
Qt::Axis axis() const;
|
Qt::Axis axis() const;
|
||||||
|
|
||||||
/**
|
|
||||||
* set animation rotation axis
|
|
||||||
* @arg axis Rotation (e.g. YAxis, ZAxis, XAxis)
|
|
||||||
*/
|
|
||||||
void setAxis(const Qt::Axis &axis);
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Rotation reference (e.g. Center, Up, Down, Left, Right) can
|
* Rotation reference (e.g. Center, Up, Down, Left, Right) can
|
||||||
* be combined (i.e. Center|Up)
|
* be combined (i.e. Center|Up)
|
||||||
*/
|
*/
|
||||||
qint8 reference() const;
|
qint8 reference() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Animation rotation angle (e.g. 45, 180, etc)
|
||||||
|
*/
|
||||||
|
qreal angle() const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Reimplemented from Plasma::Animation
|
||||||
|
* @arg curve Easing curve
|
||||||
|
*/
|
||||||
|
void setEasingCurve(const QEasingCurve &curve);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
/**
|
||||||
|
* set animation rotation axis
|
||||||
|
* @arg axis Rotation (e.g. YAxis, ZAxis, XAxis)
|
||||||
|
*/
|
||||||
|
void setAxis(const Qt::Axis &axis);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set rotation reference (e.g. Center, Up, Down, Left, Right) can
|
* Set rotation reference (e.g. Center, Up, Down, Left, Right) can
|
||||||
* be combined (i.e. Center|Up)
|
* be combined (i.e. Center|Up)
|
||||||
@ -85,11 +98,6 @@ public:
|
|||||||
*/
|
*/
|
||||||
void setReference(const qint8 &reference);
|
void setReference(const qint8 &reference);
|
||||||
|
|
||||||
/**
|
|
||||||
* Animation rotation angle (e.g. 45, 180, etc)
|
|
||||||
*/
|
|
||||||
qreal angle() const;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Set animation rotation angle (e.g. 45, 180, etc)
|
* Set animation rotation angle (e.g. 45, 180, etc)
|
||||||
* @arg angle The angle
|
* @arg angle The angle
|
||||||
|
Loading…
Reference in New Issue
Block a user