source: trunk/src/corelib/animation/qpropertyanimation.cpp@ 846

Last change on this file since 846 was 846, checked in by Dmitry A. Kuminov, 14 years ago

trunk: Merged in qt 4.7.2 sources from branches/vendor/nokia/qt.

  • Property svn:eol-style set to native
File size: 11.3 KB
Line 
1/****************************************************************************
2**
3** Copyright (C) 2011 Nokia Corporation and/or its subsidiary(-ies).
4** All rights reserved.
5** Contact: Nokia Corporation ([email protected])
6**
7** This file is part of the QtCore module of the Qt Toolkit.
8**
9** $QT_BEGIN_LICENSE:LGPL$
10** Commercial Usage
11** Licensees holding valid Qt Commercial licenses may use this file in
12** accordance with the Qt Commercial License Agreement provided with the
13** Software or, alternatively, in accordance with the terms contained in
14** a written agreement between you and Nokia.
15**
16** GNU Lesser General Public License Usage
17** Alternatively, this file may be used under the terms of the GNU Lesser
18** General Public License version 2.1 as published by the Free Software
19** Foundation and appearing in the file LICENSE.LGPL included in the
20** packaging of this file. Please review the following information to
21** ensure the GNU Lesser General Public License version 2.1 requirements
22** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
23**
24** In addition, as a special exception, Nokia gives you certain additional
25** rights. These rights are described in the Nokia Qt LGPL Exception
26** version 1.1, included in the file LGPL_EXCEPTION.txt in this package.
27**
28** GNU General Public License Usage
29** Alternatively, this file may be used under the terms of the GNU
30** General Public License version 3.0 as published by the Free Software
31** Foundation and appearing in the file LICENSE.GPL included in the
32** packaging of this file. Please review the following information to
33** ensure the GNU General Public License version 3.0 requirements will be
34** met: http://www.gnu.org/copyleft/gpl.html.
35**
36** If you have questions regarding the use of this file, please contact
37** Nokia at [email protected].
38** $QT_END_LICENSE$
39**
40****************************************************************************/
41
42/*!
43 \class QPropertyAnimation
44 \brief The QPropertyAnimation class animates Qt properties
45 \since 4.6
46
47 \ingroup animation
48
49 QPropertyAnimation interpolates over \l{Qt's Property System}{Qt
50 properties}. As property values are stored in \l{QVariant}s, the
51 class inherits QVariantAnimation, and supports animation of the
52 same \l{QVariant::Type}{variant types} as its super class.
53
54 A class declaring properties must be a QObject. To make it
55 possible to animate a property, it must provide a setter (so that
56 QPropertyAnimation can set the property's value). Note that this
57 makes it possible to animate many of Qt's widgets. Let's look at
58 an example:
59
60 \code
61 QPropertyAnimation *animation = new QPropertyAnimation(myWidget, "geometry");
62 animation->setDuration(10000);
63 animation->setStartValue(QRect(0, 0, 100, 30));
64 animation->setEndValue(QRect(250, 250, 100, 30));
65
66 animation->start();
67 \endcode
68
69 The property name and the QObject instance of which property
70 should be animated are passed to the constructor. You can then
71 specify the start and end value of the property. The procedure is
72 equal for properties in classes you have implemented
73 yourself--just check with QVariantAnimation that your QVariant
74 type is supported.
75
76 The QVariantAnimation class description explains how to set up the
77 animation in detail. Note, however, that if a start value is not
78 set, the property will start at the value it had when the
79 QPropertyAnimation instance was created.
80
81 QPropertyAnimation works like a charm on its own. For complex
82 animations that, for instance, contain several objects,
83 QAnimationGroup is provided. An animation group is an animation
84 that can contain other animations, and that can manage when its
85 animations are played. Look at QParallelAnimationGroup for an
86 example.
87
88 \sa QVariantAnimation, QAnimationGroup, {The Animation Framework}
89*/
90
91#include "qpropertyanimation.h"
92#include "qanimationgroup.h"
93#include "qpropertyanimation_p.h"
94
95#include <private/qmutexpool_p.h>
96
97#ifndef QT_NO_ANIMATION
98
99QT_BEGIN_NAMESPACE
100
101void QPropertyAnimationPrivate::updateMetaProperty()
102{
103 if (!target || propertyName.isEmpty()) {
104 propertyType = QVariant::Invalid;
105 propertyIndex = -1;
106 return;
107 }
108
109 //propertyType will be set to a valid type only if there is a Q_PROPERTY
110 //otherwise it will be set to QVariant::Invalid at the end of this function
111 propertyType = targetValue->property(propertyName).userType();