File: rotation_p.h

package info (click to toggle)
kde4libs 4%3A4.14.2-5
  • links: PTS, VCS
  • area: main
  • in suites: jessie-kfreebsd
  • size: 82,316 kB
  • sloc: cpp: 761,810; xml: 12,344; ansic: 6,295; java: 4,060; perl: 2,938; yacc: 2,507; python: 1,207; sh: 1,179; ruby: 337; lex: 278; makefile: 29
file content (123 lines) | stat: -rw-r--r-- 3,574 bytes parent folder | download | duplicates (5)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
/*
    Copyright (C) 2009 Igor Trindade Oliveira <igor.oliveira@indt.org.br>
    Copyright (C) 2009 Adenilson Cavalcanti <adenilson.silva@idnt.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/>.
*/

/**
 * @file This file contains the definition for the 2D Rotation effect.
 */

#ifndef PLASMA_ROTATION_P_H
#define PLASMA_ROTATION_P_H

#include <plasma/animations/easinganimation_p.h>

class QGraphicsRotation;

namespace Plasma {
/**
 * @class RotationAnimation plasma/animations/rotation_p.h
 * @short 2D rotation animation.
 *
 * This animation rotates a QGraphicsWidget in a axis (reference and
 * axis can be defined using properties). See also
 * \ref StackedRotationAnimation.
 */
class RotationAnimation : public EasingAnimation
{

    Q_OBJECT
    Q_PROPERTY(Qt::Axis axis READ axis WRITE setAxis)
    Q_PROPERTY(qint8 reference READ reference WRITE setReference)
    Q_PROPERTY(qreal angle READ angle WRITE setAngle)

public:
    /**
     * Default constructor
     *
     * @param parent Animation object parent.
     * @param reference See \ref Animation::Reference.
     * @param axis Which axis to rotate (XAxis, YAxis, ZAxis).
     * @param angle Rotation angle (0 to 360)
     *
     */
    explicit RotationAnimation(QObject *parent = 0,
                               qint8 reference = Center,
                               Qt::Axis axis = Qt::ZAxis,
                               qreal angle = 180);

    /** Destructor */
    ~RotationAnimation();

    /**
     * get animation rotation axis (e.g. YAxis, ZAxis, XAxis)
     */
    Qt::Axis axis() const;

    /**
     * Rotation reference (e.g. Center, Up, Down, Left, Right) can
     * be combined (i.e. Center|Up)
     */
    qint8 reference() const;

    /**
     * Animation rotation angle (e.g. 45, 180, etc)
     */
    qreal angle() const;

    /**
     * Reimplemented from Plasma::Animation
     * @param curve Easing curve
     */
    void setEasingCurve(const QEasingCurve &curve);

public slots:
    /**
     * set animation rotation axis
     * @param axis Rotation (e.g. YAxis, ZAxis, XAxis)
     */
    void setAxis(const Qt::Axis &axis);

    /**
     * Set rotation reference (e.g. Center, Up, Down, Left, Right) can
     * be combined (i.e. Center|Up)
     * @param reference The reference
     */
    void setReference(const qint8 &reference);

    /**
     * Set animation rotation angle (e.g. 45, 180, etc)
     * @param angle The angle
     */
    void setAngle(const qreal &angle);

protected:
    void updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState);
    void updateEffectiveTime(int currentTime);

private:
    /** Rotation transform object */
    QGraphicsRotation *m_rotation;
    /** Rotation angle */
    qreal m_angle;
    /** Axis where to perform the rotation */
    Qt::Axis m_axis;
    /** Reference, the default is Up (see \ref Animation::Reference) */
    qint8 m_reference;
};
} // Plasma

#endif