Plasma
pulser.cpp
Go to the documentation of this file.
00001 /* Copyright (C) 2009 Adenilson Cavalcanti <cavalcantii@gmail.com> 00002 * 00003 * This program is free software; you can redistribute it and/or modify 00004 * it under the terms of the GNU Library General Public License as 00005 * published by the Free Software Foundation; either version 2, or 00006 * (at your option) any later version. 00007 * 00008 * This program is distributed in the hope that it will be useful, 00009 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00010 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00011 * GNU General Public License for more details 00012 * 00013 * You should have received a copy of the GNU Library General Public 00014 * License along with this program; if not, write to the 00015 * Free Software Foundation, Inc., 00016 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 00017 */ 00018 #include "widgetsnapshot_p.h" 00019 #include "pulser_p.h" 00020 00021 #include <QEvent> 00022 #include <QGraphicsWidget> 00023 #include <QParallelAnimationGroup> 00024 #include <QPropertyAnimation> 00025 #include <QWeakPointer> 00026 00027 #include <kdebug.h> 00028 00029 namespace Plasma 00030 { 00031 00032 PulseAnimation::PulseAnimation(QObject *parent) 00033 : EasingAnimation(parent), 00034 m_zvalue(0), 00035 m_scale(0), 00036 m_opacity(0), 00037 m_endScale(1.5) 00038 { 00039 } 00040 00041 PulseAnimation::~PulseAnimation() 00042 { 00043 delete m_under.data(); 00044 } 00045 00046 void PulseAnimation::setTargetScale(qreal scale) 00047 { 00048 m_endScale = scale; 00049 } 00050 00051 qreal PulseAnimation::targetScale() const 00052 { 00053 return m_endScale; 00054 } 00055 00056 void PulseAnimation::setCopy() 00057 { 00058 QGraphicsWidget *target = targetWidget(); 00059 00060 if (!target) { 00061 m_under.clear(); 00062 return; 00063 } 00064 00065 if (!m_under.data()) { 00066 m_under = new WidgetSnapShot; 00067 } 00068 00069 m_under.data()->setTarget(target); 00070 00071 m_zvalue = target->zValue() - 1; 00072 m_scale = target->scale(); 00073 00074 m_under.data()->setOpacity(m_opacity); 00075 m_under.data()->setScale(m_scale); 00076 m_under.data()->setZValue(m_zvalue); 00077 } 00078 00079 void PulseAnimation::resetPulser() 00080 { 00081 if (m_under.data()) { 00082 m_under.data()->setOpacity(m_opacity); 00083 m_under.data()->setScale(m_scale); 00084 m_under.data()->setZValue(m_zvalue); 00085 m_under.data()->hide(); 00086 } 00087 } 00088 00089 void PulseAnimation::updateState(QAbstractAnimation::State newState, QAbstractAnimation::State oldState) 00090 { 00091 if (!targetWidget()) { 00092 return; 00093 } 00094 00095 if (oldState == Stopped && newState == Running) { 00096 if (!m_under.data() || m_under.data()->target() != targetWidget() || m_under.data()->size() != targetWidget()->size()) { 00097 setCopy(); 00098 } 00099 00100 if (m_under.data()->isIconBigger()) { 00101 m_under.data()->setScale(0); 00102 m_endScale = 1.0; 00103 00104 } else { 00105 m_scale = 0; 00106 m_endScale = 1.5; 00107 } 00108 00109 if (m_under.data()->isVisible() == false) { 00110 m_under.data()->setVisible(true); 00111 } 00112 00113 m_under.data()->setOpacity(direction() == Forward ? 1 : 0); 00114 m_under.data()->setScale(direction() == Forward ? m_scale : m_endScale); 00115 } else if (newState == Stopped) { 00116 resetPulser(); 00117 } 00118 } 00119 00120 void PulseAnimation::updateEffectiveTime(int currentTime) 00121 { 00122 if (m_under.data()) { 00123 qreal delta = currentTime / qreal(duration()); 00124 00125 if (m_under.data()->isIconBigger()) { 00126 m_under.data()->setScale(delta); 00127 } else { 00128 m_under.data()->setScale(delta); 00129 delta = (1 - m_endScale) * delta; 00130 m_under.data()->setScale(1 - delta); 00131 } 00132 00133 delta = currentTime / qreal(duration()); 00134 if (direction() == Forward) { 00135 m_under.data()->setOpacity(1.0 - delta); 00136 } else if (direction() == Backward) { 00137 m_under.data()->setOpacity(delta); 00138 } 00139 } 00140 } 00141 00142 } //namespace Plasma 00143 00144 #include "pulser_p.moc"
KDE 4.6 API Reference