1 | /* |
2 | * Copyright © 2008 Fredrik Höglund <fredrik@kde.org> |
3 | * |
4 | * Permission is hereby granted, free of charge, to any person obtaining a copy |
5 | * of this software and associated documentation files (the "Software"), to deal |
6 | * in the Software without restriction, including without limitation the rights |
7 | * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
8 | * copies of the Software, and to permit persons to whom the Software is |
9 | * furnished to do so, subject to the following conditions: |
10 | * |
11 | * The above copyright notice and this permission notice shall be included in |
12 | * all copies or substantial portions of the Software. |
13 | * |
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
17 | * AUTHORS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN |
18 | * AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN |
19 | * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. |
20 | */ |
21 | |
22 | #include "curtaineffect.h" |
23 | #include "curtaineffect.moc" |
24 | |
25 | #include <QApplication> |
26 | #include <QDesktopWidget> |
27 | #include <QWidget> |
28 | #include <QImage> |
29 | #include <QPixmap> |
30 | #include <QPainter> |
31 | #include <QTimer> |
32 | #include "config-workspace.h" |
33 | |
34 | #include <qimageblitz.h> |
35 | |
36 | CurtainEffect::CurtainEffect(QWidget *parent, QPixmap *pixmap) |
37 | : LogoutEffect(parent, pixmap) |
38 | { |
39 | } |
40 | |
41 | void CurtainEffect::start() |
42 | { |
43 | currentY = 0; |
44 | nextFrame(); |
45 | emit initialized(); |
46 | } |
47 | |
48 | void CurtainEffect::nextFrame() |
49 | { |
50 | QImage image = QPixmap::grabWindow(QApplication::desktop()->winId(), 0, currentY, |
51 | parent->width(), 10 ).toImage(); |
52 | Blitz::intensity(image, -0.4); |
53 | Blitz::grayscale(image); |
54 | |
55 | QPainter painter(pixmap); |
56 | painter.drawImage(0, currentY, image); |
57 | painter.end(); |
58 | |
59 | currentY += 10; |
60 | parent->update(0, 0, parent->width(), currentY); |
61 | |
62 | QTimer::singleShot(5, this, SLOT(nextFrame())); |
63 | } |
64 | |
65 | |