blob: c8d95e82aac2012f0d0f9b8f0a50fae9ddcdd8c1 (
plain)
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
|
/****************************************************************************
**
** Copyright (C) 2006 Trolltech AS. All rights reserved.
**
** This file is part of the documentation of Qt. It was originally
** published as part of Qt Quarterly.
**
** This file may be used under the terms of the GNU General Public License
** version 2.0 as published by the Free Software Foundation or under the
** terms of the Qt Commercial License Agreement. The respective license
** texts for these are provided with the open source and commercial
** editions of Qt.
**
** If you are unsure which license is appropriate for your use, please
** review the following information:
** http://www.trolltech.com/products/qt/licensing.html or contact the
** sales department at sales@trolltech.com.
**
** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
**
****************************************************************************/
#include <QtGui>
#include "faderwidget.h"
FaderWidget::FaderWidget(QWidget *parent)
: QWidget(parent)
{
if (parent) {
startColor = endColor = parent->palette().window().color();
} else {
startColor = endColor = Qt::white;
}
currentAlpha = 0;
duration = 333;
fadeOut = false;
timer = new QTimer(this);
connect(timer, SIGNAL(timeout()), this, SLOT(update()));
setAttribute(Qt::WA_DeleteOnClose);
resize(parent->size());
}
void FaderWidget::start()
{
currentAlpha = 255;
fadeOut = false;
timer->start(33);
show();
}
void FaderWidget::startFadeOut()
{
currentAlpha = 0;
fadeOut = true;
timer->start(33);
show();
}
void FaderWidget::paintEvent(QPaintEvent * /* event */)
{
QPainter painter(this);
QColor semiTransparentColor = startColor;
semiTransparentColor.setAlpha(currentAlpha);
painter.fillRect(rect(), semiTransparentColor);
if (fadeOut) {
currentAlpha += 255 * timer->interval() / duration;
if (currentAlpha >= 255) {
timer->stop();
emit done( (QWidget *)parent() );
close();
}
} else {
currentAlpha -= 255 * timer->interval() / duration;
if (currentAlpha <= 0) {
timer->stop();
emit done( (QWidget *)parent() );
close();
}
}
}
|