KDEUI
kfadewidgeteffect.cpp
Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021 #include "kfadewidgeteffect.h"
00022 #include "kfadewidgeteffect_p.h"
00023 #include <QtCore/QEvent>
00024 #include <QtGui/QPainter>
00025
00026 #include <kglobalsettings.h>
00027
00028 KFadeWidgetEffectPrivate::KFadeWidgetEffectPrivate(QWidget *_destWidget)
00029 : destWidget(_destWidget), disabled(false)
00030 {
00031 }
00032
00033 KFadeWidgetEffect::KFadeWidgetEffect(QWidget *destWidget)
00034 : QWidget(destWidget ? destWidget->parentWidget() : 0),
00035 d_ptr(new KFadeWidgetEffectPrivate(destWidget))
00036 {
00037 Q_D(KFadeWidgetEffect);
00038 d->q_ptr = this;
00039 Q_ASSERT(destWidget && destWidget->parentWidget());
00040 if (!destWidget || !destWidget->parentWidget() || !destWidget->isVisible() ||
00041 !(KGlobalSettings::graphicEffectsLevel() & KGlobalSettings::SimpleAnimationEffects)) {
00042 d->disabled = true;
00043 hide();
00044 return;
00045 }
00046 setGeometry(QRect(destWidget->mapTo(parentWidget(), QPoint(0, 0)), destWidget->size()));
00047 d->oldPixmap = QPixmap::grabWidget(destWidget);
00048 d->timeLine.setFrameRange(0, 255);
00049 connect(&d->timeLine, SIGNAL(finished()), SLOT(finished()));
00050 connect(&d->timeLine, SIGNAL(frameChanged(int)), SLOT(repaint()));
00051 show();
00052 }
00053
00054 KFadeWidgetEffect::~KFadeWidgetEffect()
00055 {
00056 delete d_ptr;
00057 }
00058
00059 void KFadeWidgetEffectPrivate::finished()
00060 {
00061 Q_Q(KFadeWidgetEffect);
00062 destWidget->setUpdatesEnabled(false);
00063 q->hide();
00064 q->deleteLater();
00065 destWidget->setUpdatesEnabled(true);
00066 }
00067
00068 void KFadeWidgetEffect::start(int duration)
00069 {
00070 Q_D(KFadeWidgetEffect);
00071 if (d->disabled) {
00072 deleteLater();
00073 return;
00074 }
00075 d->timeLine.setDuration(duration);
00076 d->timeLine.start();
00077 }
00078
00079 void KFadeWidgetEffect::paintEvent(QPaintEvent *)
00080 {
00081 Q_D(KFadeWidgetEffect);
00082 QPainter p(this);
00083 p.setOpacity(1.0 - d->timeLine.currentValue());
00084 p.drawPixmap(rect(), d->oldPixmap);
00085 }
00086
00087 #include "moc_kfadewidgeteffect.cpp"