• Skip to content
  • Skip to link menu
Trinity API Reference
  • Trinity API Reference
  • libtdescreensaver
 

libtdescreensaver

  • libtdescreensaver
tdescreensaver.cpp
1/* This file is part of the KDE libraries
2
3 Copyright (c) 2001 Martin R. Jones <mjones@kde.org>
4
5 This library is free software; you can redistribute it and/or
6 modify it under the terms of the GNU Library General Public
7 License as published by the Free Software Foundation; either
8 version 2 of the License, or (at your option) any later version.
9
10 This library is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY; without even the implied warranty of
12 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13 Library General Public License for more details.
14
15 You should have received a copy of the GNU Library General Public License
16 along with this library; see the file COPYING.LIB. If not, write to
17 the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
18 Boston, MA 02110-1301, USA.
19*/
20
21#include <tqpainter.h>
22#include <tqtimer.h>
23#include <tdeapplication.h>
24#include "tdescreensaver.h"
25#ifdef TQ_WS_X11
26#include <X11/Xlib.h>
27#else
28typedef WId Window;
29#endif
30
31#undef KeyPress
32#undef KeyRelease
33
34//-----------------------------------------------------------------------------
35
36class KScreenSaverPrivate
37{
38public:
39 TQWidget *owner;
40};
41
42KScreenSaver::KScreenSaver( WId id ) : TQWidget()
43{
44 Window root;
45 int ai;
46 unsigned int au;
47 unsigned int w = 0;
48 unsigned int h = 0;
49
50 XSync(tqt_xdisplay(), false);
51
52 d = new KScreenSaverPrivate;
53 d->owner = find( id );
54 if ( d->owner )
55 installEventFilter( this );
56
57 if ( id )
58 {
59#ifdef TQ_WS_X11 //FIXME
60 XGetGeometry(tqt_xdisplay(), (Drawable)id, &root, &ai, &ai,
61 &w, &h, &au, &au);
62#endif
63
64 create( id, false, true );
65 }
66
67 if ( w == 0 ) w = 600;
68 if ( h == 0 ) h = 420;
69 resize( w, h );
70 TDEApplication::sendPostedEvents();
71 show();
72}
73
74KScreenSaver::~KScreenSaver()
75{
76 destroy( false, false );
77 delete d;
78}
79
80void KScreenSaver::embed( TQWidget *w )
81{
82 TDEApplication::sendPostedEvents();
83#ifdef TQ_WS_X11 //FIXME
84 XReparentWindow(tqt_xdisplay(), w->winId(), winId(), 0, 0);
85#endif
86 w->setGeometry( 0, 0, width(), height() );
87 TDEApplication::sendPostedEvents();
88}
89
90bool KScreenSaver::eventFilter( TQObject *o, TQEvent *e )
91{
92 // make sure events get to the original window owner
93 if ( d->owner && o == this ) {
94 TQApplication::sendEvent( d->owner, e );
95 return false;
96 }
97
98 return TQWidget::eventFilter( o, e );
99}
100
101//============================================================================
102
103class KBlankEffectPrivate
104{
105public:
106 KBlankEffect::BlankEffect currentEffect;
107 int effectProgress;
108 TQTimer *timer;
109 TQWidget *widget;
110};
111
112KBlankEffect::BlankEffect KBlankEffect::effects[] = {
113 &KBlankEffect::blankNormal,
114 &KBlankEffect::blankSweepRight,
115 &KBlankEffect::blankSweepDown,
116 &KBlankEffect::blankBlocks
117};
118
119KBlankEffect::KBlankEffect( TQObject *parent ) : TQObject( parent )
120{
121 d = new KBlankEffectPrivate;
122 d->currentEffect = &KBlankEffect::blankNormal;
123 d->effectProgress = 0;
124 d->timer = new TQTimer( this );
125 connect( d->timer, TQ_SIGNAL(timeout()), this, TQ_SLOT(timeout()) );
126}
127
128
129KBlankEffect::~KBlankEffect()
130{
131 delete d;
132}
133
134void KBlankEffect::finished()
135{
136 d->timer->stop();
137 d->effectProgress = 0;
138 emit doneBlank();
139}
140
141
142void KBlankEffect::blank( TQWidget *w, Effect effect )
143{
144 if ( !w ) {
145 emit doneBlank();
146 return;
147 }
148
149 if ( effect == Random )
150 effect = (Effect)(tdeApp->random() % MaximumEffects);
151
152 d->effectProgress = 0;
153 d->widget = w;
154 d->currentEffect = effects[ (int)effect ];
155 d->timer->start( 10 );
156}
157
158void KBlankEffect::timeout()
159{
160 (this->*d->currentEffect)();
161}
162
163void KBlankEffect::blankNormal()
164{
165 TQPainter p( d->widget );
166 p.fillRect( 0, 0, d->widget->width(), d->widget->height(), black );
167 finished();
168}
169
170
171void KBlankEffect::blankSweepRight()
172{
173 TQPainter p( d->widget );
174 p.fillRect( d->effectProgress, 0, 50, d->widget->height(), black );
175 tdeApp->flushX();
176 d->effectProgress += 50;
177 if ( d->effectProgress >= d->widget->width() )
178 finished();
179}
180
181
182void KBlankEffect::blankSweepDown()
183{
184 TQPainter p( d->widget );
185 p.fillRect( 0, d->effectProgress, d->widget->width(), 50, black );
186 tdeApp->flushX();
187 d->effectProgress += 50;
188 if ( d->effectProgress >= d->widget->height() )
189 finished();
190}
191
192
193void KBlankEffect::blankBlocks()
194{
195 static int *block = 0;
196
197 int bx = (d->widget->width()+63)/64;
198 int by = (d->widget->height()+63)/64;
199
200 if ( !d->effectProgress ) {
201 block = new int [ bx*by ];
202
203 for ( int i = 0; i < bx*by; i++ )
204 block[i] = i;
205 for ( int i = 0; i < bx*by; i++ ) {
206 int swap = tdeApp->random()%(bx*by);
207 int tmp = block[i];
208 block[i] = block[swap];
209 block[swap] = tmp;
210 }
211 }
212
213 TQPainter p( d->widget );
214
215 // erase a couple of blocks at a time, otherwise it looks too slow
216 for ( int i = 0; i < 2 && d->effectProgress < bx*by; i++ ) {
217 int x = block[d->effectProgress]%bx;
218 int y = block[d->effectProgress]/bx;
219 p.fillRect( x*64, y*64, 64, 64, black );
220 d->effectProgress++;
221 }
222
223 tdeApp->flushX();
224
225 if ( d->effectProgress >= bx*by ) {
226 delete[] block;
227 finished();
228 }
229}
230
231#include "tdescreensaver.moc"
KBlankEffect::doneBlank
void doneBlank()
emitted when a blanking effect has completed.
KBlankEffect::blank
void blank(TQWidget *w, Effect effect=Random)
Blank a widget using the specified effect.
Definition: tdescreensaver.cpp:142
KScreenSaver::embed
void embed(TQWidget *widget)
You cannot create a new widget with this widget as parent, since this widget may not be owned by your...
Definition: tdescreensaver.cpp:80
KScreenSaver::KScreenSaver
KScreenSaver(WId id=0)
Definition: tdescreensaver.cpp:42

libtdescreensaver

Skip menu "libtdescreensaver"
  • Main Page
  • Alphabetical List
  • Class List
  • File List
  • Class Members

libtdescreensaver

Skip menu "libtdescreensaver"
  • arts
  • dcop
  • dnssd
  • interfaces
  •   kspeech
  •     interface
  •     library
  •   tdetexteditor
  • kate
  • kded
  • kdoctools
  • kimgio
  • kjs
  • libtdemid
  • libtdescreensaver
  • tdeabc
  • tdecmshell
  • tdecore
  • tdefx
  • tdehtml
  • tdeinit
  • tdeio
  •   bookmarks
  •   httpfilter
  •   kpasswdserver
  •   kssl
  •   tdefile
  •   tdeio
  •   tdeioexec
  • tdeioslave
  •   http
  • tdemdi
  •   tdemdi
  • tdenewstuff
  • tdeparts
  • tdeprint
  • tderandr
  • tderesources
  • tdespell2
  • tdesu
  • tdeui
  • tdeunittest
  • tdeutils
  • tdewallet
Generated for libtdescreensaver by doxygen 1.9.4
This website is maintained by Timothy Pearson.