2
/* This file is part of the KDE project
3
Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org>
4
Copyright (C) 2002 Ariya Hidayat <ariya@kde.org>
5
Copyright (C) 2002 Harri Porten <porten@kde.org>
7
This library is free software; you can redistribute it and/or
8
modify it under the terms of the GNU Library General Public
9
License as published by the Free Software Foundation; either
10
version 2 of the License, or (at your option) any later version.
12
This library is distributed in the hope that it will be useful,
13
but WITHOUT ANY WARRANTY; without even the implied warranty of
14
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
15
Library General Public License for more details.
17
You should have received a copy of the GNU Library General Public License
18
along with this library; see the file COPYING.LIB. If not, write to
19
the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
20
Boston, MA 02111-1307, USA.
23
#include "kppageeffects.h"
24
#include <kapplication.h>
25
#include <krandomsequence.h>
27
#include <qdatetime.h>
31
void kPchangePages( QWidget *canv, const QPixmap &_pix1, const QPixmap &_pix2,
32
PageEffect effect, float speedFaktor )
34
Q_ASSERT( _pix1.size() == _pix2.size() );
35
int width = _pix1.width();
36
int height = _pix1.height();
38
int _step = 0, _steps = 0, _h = 0, _w = 0;
39
int hsteps = static_cast<int>( height / speedFaktor );
40
int wsteps = static_cast<int>( width / speedFaktor );
45
bitBlt( canv, 0, 0, &_pix2, 0, 0, width, height );
53
for ( _h = 0; _step < _steps ; )
55
kapp->processEvents();
56
if ( _time.elapsed() >= 1 )
59
_h = (int )(0.5 * height * _step / _steps);
60
_h = kMin( _h, height / 2 );
62
bitBlt( canv, 0, 0, &_pix2, 0, height / 2 - _h, width, _h );
63
bitBlt( canv, 0, height - _h, &_pix2, 0, height / 2, width, _h );
67
if ( _h >= height / 2 ) break;
76
for ( _w = 0; _step < _steps ; )
78
kapp->processEvents();
79
if ( _time.elapsed() >= 1 )
82
_w =(int)( 0.5 * width * _step / _steps);
83
_w = kMin( _w, width / 2 );
85
bitBlt( canv, 0, 0, &_pix2, width / 2 - _w, 0, _w, height );
86
bitBlt( canv, width - _w, 0, &_pix2, width / 2, 0, _w, height );
90
if ( _w >= width / 2 ) break;
99
for ( ; _step < _steps ; )
101
kapp->processEvents();
102
if ( _time.elapsed() >= 1 )
105
_w =(int)( 0.5 * width * _step / _steps);
106
_w = kMin( _w, width / 2 );
107
_h =(int)( 0.5 * height * _step / _steps);
108
_h = kMin( _h, height / 2 );
110
bitBlt( canv, 0, 0, &_pix2, 0, 0, _w, _h );
111
bitBlt( canv, width - _w, 0, &_pix2, width - _w, 0, _w, _h );
112
bitBlt( canv, 0, height - _h, &_pix2, 0, height - _h, _w, _h );
113
bitBlt( canv, width - _w, height - _h, &_pix2, width - _w, height - _h, _w, _h );
117
if ( ( _w >= width / 2 ) && ( _h >= height / 2 ) ) break;
126
for ( _h = 0; _step < _steps ; )
128
kapp->processEvents();
129
if ( _time.elapsed() >= 1 )
132
_h =(int)( 0.5 * height * _step / _steps);
133
_h = kMin( _h, height / 2 );
135
bitBlt( canv, 0, height / 2 - _h, &_pix2, 0, 0, width, _h );
136
bitBlt( canv, 0, height / 2, &_pix2, 0, height - _h, width, _h );
140
if ( _h >= height / 2 ) break;
149
for ( _w = 0; _step < _steps ; )
151
kapp->processEvents();
152
if ( _time.elapsed() >= 1 )
155
_w =(int)( 0.5 * width * _step / _steps);
156
_w = kMin( _w, width / 2 );
158
bitBlt( canv, width / 2 - _w, 0, &_pix2, 0, 0, _w, height );
159
bitBlt( canv, width / 2, 0, &_pix2, width - _w, 0, _w, height );
163
if ( _w >= width / 2 ) break;
172
for ( ; _step < _steps ; )
174
kapp->processEvents();
175
if ( _time.elapsed() >= 1 )
178
_w =(int)( 0.5 * width * _step / _steps);
179
_w = kMin( _w, width / 2 );
180
_h =(int)( 0.5 * height * _step / _steps);
181
_h = kMin( _h, height / 2 );
183
bitBlt( canv, width / 2 - _w, height / 2 - _h, &_pix2, 0, 0, _w, _h );
184
bitBlt( canv, width / 2, height / 2 - _h, &_pix2, width - _w, 0, _w, _h );
185
bitBlt( canv, width / 2 - _w, height / 2, &_pix2, 0, height - _h, _w, _h );
186
bitBlt( canv, width / 2, height / 2, &_pix2, width - _w, height - _h, _w, _h );
190
if ( ( _w >= width / 2 ) && ( _h >= height / 2 ) ) break;
194
case PEF_INTERLOCKING_HORZ_1:
195
case PEF_INTERLOCKING_HORZ_2:
201
int loff = 0; // vertical offset for upper stripe coming from left
203
if ( effect == PEF_INTERLOCKING_HORZ_2 ) {
210
for ( _w = 0 ; _step < _steps ; )
212
kapp->processEvents();
213
if ( _time.elapsed() >= 1 )
216
_w = width * _step / _steps;
217
_w = kMin( _w, width );
219
bitBlt( canv, w0, loff, &_pix2, w0, loff, _w - w0, h4 );
220
bitBlt( canv, w0, loff + 2 * h4,
221
&_pix2, w0, loff + 2 * h4, _w - w0, h4 );
222
bitBlt( canv, width - _w, roff,
223
&_pix2, width - _w, roff, _w - w0, h4 );
224
bitBlt( canv, width - _w, roff + 2 * h4, &_pix2, width - _w,
225
roff + 2 * h4, _w - w0, h4 );
230
if ( _w >= width ) break;
234
case PEF_INTERLOCKING_VERT_1:
235
case PEF_INTERLOCKING_VERT_2:
241
int toff = 0; // horizontal offset for left-most stripe from top
243
if ( effect == PEF_INTERLOCKING_VERT_2 ) {
249
for ( _h = 0 ; _step < _steps ; )
251
kapp->processEvents();
252
if ( _time.elapsed() >= 1 )
255
_h = height * _step / _steps;
256
_h = kMin( _h, height );
258
bitBlt( canv, toff, h0, &_pix2, toff, h0, w4, _h - h0 );
259
bitBlt( canv, toff + 2 * w4, h0,
260
&_pix2, toff + 2 * w4, h0, w4, _h - h0 );
261
bitBlt( canv, boff, height - _h,
262
&_pix2, boff, height - _h, w4, _h - h0 );
263
bitBlt( canv, boff + 2 * w4, height - _h,
264
&_pix2, boff + 2 * w4, height - _h, w4, _h - h0 );
269
if ( _h >= height ) break;
275
int wid = width / 10;
276
int hei = height / 10;
284
for ( ; curr < 22 ; )
286
kapp->processEvents();
287
if ( _time.elapsed() >= 1 )
291
if ( curr == 1 || curr == 5 || curr == 9 || curr == 13 || curr == 17 )
293
int dx = ( curr2 / 4 ) * wid;
294
int dy = ( curr2 / 4 ) * hei;
295
_h = height * _step / _steps;
296
if ( _h >= height - 2 * dy )
298
_h = height - 2 * dy;
302
bitBlt( canv, dx, dy, &_pix2, dx, dy, wid, _h );
304
else if ( curr == 2 || curr == 6 || curr == 10 || curr == 14 || curr == 18 )
306
int dx = ( curr2 / 4 ) * wid;
307
int dy = ( curr2 / 4 ) * hei;
308
_w = width * _step / _steps;
309
if ( _w >= width - wid - 2 * dx )
311
_w = width - wid - 2 * dx;
315
bitBlt( canv, dx + wid, height - hei - dy, &_pix2, dx + wid, height - hei - dy, _w, hei );
317
else if ( curr == 3 || curr == 7 || curr == 11 || curr == 15 || curr == 19 )
319
int dx = ( curr2 / 4 ) * wid;
320
int dy = ( curr2 / 4 ) * hei;
321
_h = height * _step / _steps;
322
if ( _h >= height - hei - 2 * dy )
324
_h = height - hei - 2 * dy;
328
bitBlt( canv, width - wid - dx, height - hei - dy - _h, &_pix2,
329
width - wid - dx, height - hei - dy - _h, wid, _h );
331
else if ( curr == 4 || curr == 8 || curr == 12 || curr == 16 || curr == 20 )
333
int dx = ( curr2 / 4 ) * wid;
334
int dy = ( curr2 / 4 ) * hei;
335
_w = width * _step / _steps;
336
if ( _w >= width - 2 * wid - 2 * dx )
338
_w = width - 2 * wid - 2 * dx;
340
_steps = static_cast<int>( static_cast<float>( _steps ) / 1.5 );
345
bitBlt( canv, width - dx - wid - _w, dy, &_pix2, width - dx - wid - _w,
352
bitBlt( canv, 0, 0, &_pix2, 0, 0, width, height );
363
int _psteps = _steps / 5;
364
QRect oldRect( 0, 0, width, height );
368
for ( ; _step < _steps ; )
370
kapp->processEvents();
371
if ( _time.elapsed() >= 1 )
374
if ( _step < _psteps )
376
pix3 = QPixmap( _pix1 );
377
QPixmap pix4( _pix2 );
378
float dw = static_cast<float>( _step * ( ( pix3.width() - ( pix3.width() / 10 ) ) /
380
float dh = static_cast<float>( _step * ( ( pix3.height() - ( pix3.height() / 10 ) ) /
387
m.scale( static_cast<float>( pix3.width() - dw ) / static_cast<float>( pix3.width() ),
388
static_cast<float>( pix3.height() - dh ) / static_cast<float>( pix3.height() ) );
389
pix3 = pix3.xForm( m );
392
bitBlt( &pix4, ( pix4.width() - pix3.width() ) / 2, ( pix4.height() - pix3.height() ) / 2,
393
&pix3, 0, 0, pix3.width(), pix3.height() );
394
QRect newRect( ( pix4.width() - pix3.width() ) / 2, ( pix4.height() - pix3.height() ) / 2,
395
pix3.width(), pix3.height() );
396
QRect r = newRect.unite( oldRect );
397
bitBlt( canv, r.x(), r.y(), &pix4, r.x(), r.y(), r.width(), r.height() );
400
if ( _step > _psteps && _step < _psteps * 2 )
402
QPixmap pix4( _pix2 );
403
int yy = ( height - pix3.height() ) / 2 - ( ( ( height - pix3.height() ) / 2 ) /
404
_psteps ) * ( _step - _psteps );
406
bitBlt( &pix4, ( pix4.width() - pix3.width() ) / 2, yy,
407
&pix3, 0, 0, pix3.width(), pix3.height() );
408
QRect newRect( ( pix4.width() - pix3.width() ) / 2, yy,
409
pix3.width(), pix3.height() );
410
QRect r = newRect.unite( oldRect );
411
bitBlt( canv, r.x(), r.y(), &pix4, r.x(), r.y(), r.width(), r.height() );
414
if ( _step > 2 * _psteps && _step < _psteps * 3 )
416
QPixmap pix4( _pix2 );
417
int xx = ( width - pix3.width() ) / 2 - ( ( ( width - pix3.width() ) / 2 ) /
418
_psteps ) * ( _step - 2 * _psteps );
419
int yy = ( ( ( height - pix3.height() ) / 2 ) / _psteps ) * ( _step - 2 * _psteps );
421
bitBlt( &pix4, xx, yy, &pix3, 0, 0, pix3.width(), pix3.height() );
422
QRect newRect( xx, yy, pix3.width(), pix3.height() );
423
QRect r = newRect.unite( oldRect );
424
bitBlt( canv, r.x(), r.y(), &pix4, r.x(), r.y(), r.width(), r.height() );
427
if ( _step > 3 * _psteps && _step < _psteps * 5 )
429
QPixmap pix4( _pix2 );
430
int xx = ( ( width - pix3.width() ) / _psteps ) * ( _step - 3 * _psteps );
431
int yy = ( ( height - pix3.height() ) / 2 ) +
432
( ( ( height - pix3.height() ) / 2 ) / _psteps ) * ( _step - 3 * _psteps );
434
bitBlt( &pix4, xx, yy, &pix3, 0, 0, pix3.width(), pix3.height() );
435
QRect newRect( xx, yy, pix3.width(), pix3.height() );
436
QRect r = newRect.unite( oldRect );
437
bitBlt( canv, r.x(), r.y(), &pix4, r.x(), r.y(), r.width(), r.height() );
442
if ( _step >= _steps )
444
bitBlt( canv, 0, 0, &_pix2, 0, 0, width, height );
453
int blockSize = height / 8;
455
if( _steps < 1 ) _steps = 1;
461
for ( ; _step < _steps ; )
463
kapp->processEvents();
464
if ( _time.elapsed() >= 1 )
467
_h = _step * blockSize / _steps;
469
for ( int i=0; i < height; i += blockSize )
470
bitBlt( canv, 0, h0 + i, &_pix2, 0, h0 + i, width, _h - h0 );
476
if( _h >= blockSize ) break;
483
int blockSize = width / 8;
490
for ( ; _step < _steps ; )
492
kapp->processEvents();
493
if ( _time.elapsed() >= 1 )
496
_w = _step * blockSize / _steps;
498
for( int i=0; i < width; i += blockSize )
499
bitBlt( canv, w0 + i, 0, &_pix2, w0 + i, 0, _w - w0, height );
505
if( _w >= blockSize ) break;
516
for ( ; _step < _steps ; )
518
kapp->processEvents();
519
if ( _time.elapsed() >= 1 )
522
_w = width - ( width * _step / _steps );
524
_h = _w * height / width;
527
bitBlt( canv, 0, 0, &_pix2, 0, 0, width, (height-_h)/2 );
528
bitBlt( canv, 0, (height-_h)/2, &_pix2, 0, (height-_h)/2, (width-_w)/2, _h );
529
bitBlt( canv, (width+_w)/2, (height-_h)/2, &_pix2, (width+_w)/2, (height-_h)/2, (width-_w)/2, _h );
530
bitBlt( canv, 0, (height+_h)/2, &_pix2, 0, (height+_h)/2, width, (height-_h)/2 );
544
for ( ; _step < _steps ; )
546
kapp->processEvents();
547
if ( _time.elapsed() >= 1 )
550
_w = width * _step / _steps;
551
if( _w > width ) _w = width;
552
_h = _w * height / width;
553
if( _h > height ) _h = height;
555
bitBlt( canv, (width-_w)/2, (height-_h)/2, &_pix2,
556
(width-_w)/2, (height-_h)/2, _w, _h );
559
if( _w >= width ) break;
564
case PEF_CHECKBOARD_ACROSS:
569
int blocksize = height / 8;
573
while ( w0 < 2 * blocksize )
575
kapp->processEvents();
576
if ( _time.elapsed() >= 1 )
579
_w = blocksize * _step / _steps;
580
_w = kMin( _w, (blocksize * 2) );
582
for( int yp = 0; yp < height; yp += blocksize )
584
int xp = ((yp/blocksize) & 1) ? blocksize : 0;
585
if( ( xp > 0 ) && ( _w > blocksize ) )
586
bitBlt( canv, w0-blocksize, yp, &_pix2, w0-blocksize,
587
yp, _w-w0, blocksize );
588
for( ; xp < width; xp += 2*blocksize )
589
bitBlt( canv, xp + w0, yp,
590
&_pix2, xp + w0, yp, _w - w0, blocksize );
600
case PEF_CHECKBOARD_DOWN:
605
int blocksize = height / 8;
609
while ( h0 < 2 * blocksize )
611
kapp->processEvents();
612
if ( _time.elapsed() >= 1 )
615
_h = blocksize * _step / _steps;
616
_h = kMin ( _h, (blocksize * 2) );
618
for( int xp = 0; xp < width; xp += blocksize )
620
int yp = ((xp/blocksize) & 1) ? blocksize : 0;
621
if( ( yp > 0 ) && ( _h > blocksize ) )
622
bitBlt( canv, xp, h0-blocksize, &_pix2, xp, h0-blocksize,
624
for( ; yp < height; yp += 2*blocksize )
625
bitBlt( canv, xp, yp + h0,
626
&_pix2, xp, yp + h0, blocksize, _h - h0 );
641
for ( _h = 0 ; _step < _steps ; )
643
kapp->processEvents();
644
if ( _time.elapsed() >= 1 )
647
_h = _step * height/ _steps;
648
_h = _h > height ? height : _h;
650
bitBlt( canv, 0, 0, &_pix2, 0, height-_h, width, _h );
654
if( _h >= height ) break;
659
case PEF_UNCOVER_DOWN:
664
for ( _h = 0 ; _step < _steps ; )
666
kapp->processEvents();
667
if ( _time.elapsed() >= 1 )
670
_h = _step * height/ _steps;
671
_h = _h > height ? height : _h;
673
bitBlt( canv, 0, 0, &_pix2, 0, 0, width, _h );
674
bitBlt( canv, 0, _h, &_pix1, 0, 0, width, height-_h );
678
if( _h >= height ) break;
689
for ( _h = 0 ; _step < _steps ; )
691
kapp->processEvents();
692
if ( _time.elapsed() >= 1 )
695
_h = _step * height/ _steps;
696
_h = _h > height ? height : _h;
698
bitBlt( canv, 0, height-_h, &_pix2, 0, 0, width, _h );
702
if( _h >= height ) break;
712
for ( _h = 0 ; _step < _steps ; )
714
kapp->processEvents();
715
if ( _time.elapsed() >= 1 )
718
_h = _step * height/ _steps;
719
_h = _h > height ? height : _h;
721
bitBlt( canv, 0, height-_h, &_pix2, 0, height-_h, width, _h );
722
bitBlt( canv, 0, 0, &_pix1, 0, _h, width, height-_h );
726
if( _h >= height ) break;
737
for ( _w = 0; _step < _steps ; )
739
kapp->processEvents();
740
if ( _time.elapsed() >= 1 )
743
_w = _step * width / _steps;
744
_w = _w > width ? width : _w;
746
bitBlt( canv, width-_w, 0, &_pix2, 0, 0, _w, height );
750
if( _w >= width ) break;
755
case PEF_UNCOVER_LEFT:
760
for ( _w = 0; _step < _steps ; )
762
kapp->processEvents();
763
if ( _time.elapsed() >= 1 )
766
_w = _step * width / _steps;
767
_w = _w > width ? width : _w;
769
bitBlt( canv, 0, 0, &_pix1, _w, 0, width-_w, height );
770
bitBlt( canv, width-_w, 0, &_pix2, width-_w, 0, _w, height );
774
if( _w >= width ) break;
779
case PEF_COVER_RIGHT:
784
for ( _w = 0; _step < _steps ; )
786
kapp->processEvents();
787
if ( _time.elapsed() >= 1 )
790
_w = _step * width / _steps;
791
_w = _w > width ? width : _w;
793
bitBlt( canv, 0, 0, &_pix2, width-_w, 0, _w, height );
797
if( _w >= width ) break;
802
case PEF_UNCOVER_RIGHT:
807
for ( _w = 0; _step < _steps ; )
809
kapp->processEvents();
810
if ( _time.elapsed() >= 1 )
813
_w = _step * width / _steps;
814
_w = _w > width ? width : _w;
816
bitBlt( canv, _w, 0, &_pix1, 0, 0, width-_w, height );
817
bitBlt( canv, 0, 0, &_pix2, 0, 0, _w, height );
821
if( _w >= width ) break;
826
case PEF_COVER_LEFT_UP:
831
for ( _w = _h = 0; _step < _steps ; )
833
kapp->processEvents();
834
if ( _time.elapsed() >= 1 )
837
_w = _step * width / _steps;
838
_w = _w > width ? width : _w;
839
_h = _step * height/ _steps;
840
_h = _h > height ? height : _h;
842
bitBlt( canv, width-_w, height-_h, &_pix2, 0, 0, _w, _h );
846
if( _w >= width ) break;
851
case PEF_UNCOVER_LEFT_UP:
856
for ( _w = _h = 0; _step < _steps ; )
858
kapp->processEvents();
859
if ( _time.elapsed() >= 1 )
862
_w = _step * width / _steps;
863
_w = _w > width ? width : _w;
864
_h = _step * height/ _steps;
865
_h = _h > height ? height : _h;
867
bitBlt( canv, 0, 0, &_pix1, _w, _h, width-_w, height-_h );
868
bitBlt( canv, width-_w, 0, &_pix2, width-_w, 0, _w, height );
869
bitBlt( canv, 0, height-_h, &_pix2, 0, height-_h, width, _h );
873
if( _w >= width ) break;
878
case PEF_COVER_LEFT_DOWN:
883
for ( _w = _h = 0; _step < _steps ; )
885
kapp->processEvents();
886
if ( _time.elapsed() >= 1 )
889
_w = _step * width / _steps;
890
_w = _w > width ? width : _w;
891
_h = _step * height/ _steps;
892
_h = _h > height ? height : _h;
894
bitBlt( canv, width-_w, 0, &_pix2, 0, height-_h, _w, _h );
898
if( _w >= width ) break;
903
case PEF_UNCOVER_LEFT_DOWN:
908
for ( _w = _h = 0; _step < _steps ; )
910
kapp->processEvents();
911
if ( _time.elapsed() >= 1 )
914
_w = _step * width / _steps;
915
_w = _w > width ? width : _w;
916
_h = _step * height/ _steps;
917
_h = _h > height ? height : _h;
919
bitBlt( canv, 0, _h, &_pix1, _w, 0, width-_w, height-_h );
920
bitBlt( canv, width-_w, 0, &_pix2, width-_w, 0, _w, height );
921
bitBlt( canv, 0, 0, &_pix2, 0, 0, width, _h );
925
if( _w >= width ) break;
930
case PEF_COVER_RIGHT_UP:
935
for ( _w = _h = 0; _step < _steps ; )
937
kapp->processEvents();
938
if ( _time.elapsed() >= 1 )
941
_w = _step * width / _steps;
942
_w = _w > width ? width : _w;
943
_h = _step * height/ _steps;
944
_h = _h > height ? height : _h;
946
bitBlt( canv, 0, height-_h, &_pix2, width-_w, 0, _w, _h );
950
if( _w >= width ) break;
955
case PEF_UNCOVER_RIGHT_UP:
960
for ( _w = _h = 0; _step < _steps ; )
962
kapp->processEvents();
963
if ( _time.elapsed() >= 1 )
966
_w = _step * width / _steps;
967
_w = _w > width ? width : _w;
968
_h = _step * height/ _steps;
969
_h = _h > height ? height : _h;
971
bitBlt( canv, _w, 0, &_pix1, 0, _h, width-_w, height-_h );
972
bitBlt( canv, 0, 0, &_pix2, 0, 0, _w, height );
973
bitBlt( canv, 0, height-_h, &_pix2, 0, height-_h, width, _h );
977
if( _w >= width ) break;
982
case PEF_COVER_RIGHT_DOWN:
987
for ( _w = _h = 0; _step < _steps ; )
989
kapp->processEvents();
990
if ( _time.elapsed() >= 1 )
993
_w = _step * width / _steps;
994
_w = _w > width ? width : _w;
995
_h = _step * height/ _steps;
996
_h = _h > height ? height : _h;
998
bitBlt( canv, 0, 0, &_pix2, width-_w, height-_h, _w, _h );
1002
if( _w >= width ) break;
1006
// Uncover Right-Down
1007
case PEF_UNCOVER_RIGHT_DOWN:
1012
for ( _w = _h = 0; _step < _steps ; )
1014
kapp->processEvents();
1015
if ( _time.elapsed() >= 1 )
1018
_w = _step * width / _steps;
1019
_w = _w > width ? width : _w;
1020
_h = _step * height/ _steps;
1021
_h = _h > height ? height : _h;
1023
bitBlt( canv, _w, _h, &_pix1, 0, 0, width-_w, height-_h );
1024
bitBlt( canv, 0, 0, &_pix2, 0, 0, _w, height );
1025
bitBlt( canv, 0, 0, &_pix2, 0, 0, width, _h );
1029
if( _w >= width ) break;
1036
KRandomSequence random;
1038
unsigned blockSize = height / 32; // small enough
1039
unsigned rowno = ( height + blockSize - 1 ) / blockSize;
1040
unsigned colno = ( width + blockSize - 1 ) / blockSize;
1041
unsigned cellno = rowno * colno;
1043
QValueList<int> cells;
1044
for( unsigned c = 0; c < cellno; c++ )
1051
while( !cells.isEmpty() )
1053
kapp->processEvents();
1054
if ( _time.elapsed() >= 1 )
1057
unsigned k = cellno - cellno * _step / _steps;
1059
while( cells.count() > k )
1061
unsigned index = random.getLong( cells.count() );
1062
QValueListIterator<int> it = cells.at( index );
1063
unsigned y = *it / colno;
1064
unsigned x = *it % colno;
1067
bitBlt( canv, x * blockSize, y * blockSize, &_pix2,
1068
x * blockSize, y * blockSize, blockSize, blockSize );
1078
case PEF_STRIPS_LEFT_UP:
1082
unsigned blocks = _steps / 2;
1083
unsigned blockSize = width / blocks;
1087
for ( ; _step < _steps; )
1089
kapp->processEvents();
1090
if ( _time.elapsed() >= 1 )
1092
for ( int x = 0; x <= _step; ++x )
1096
bitBlt( canv, width - x * blockSize, height - y * blockSize, &_pix2,
1097
width - x * blockSize, height - y * blockSize,
1098
blockSize, blockSize );
1109
case PEF_STRIPS_LEFT_DOWN:
1113
unsigned blocks = _steps / 2;
1114
unsigned blockSize = width / blocks;
1118
for ( ; _step < _steps; )
1120
kapp->processEvents();
1121
if ( _time.elapsed() >= 1 )
1123
for ( int x = 0; x <= _step; ++x )
1127
bitBlt( canv, width - x * blockSize, y * blockSize, &_pix2,
1128
width - x * blockSize, y * blockSize, blockSize, blockSize );
1139
case PEF_STRIPS_RIGHT_UP:
1143
unsigned blocks = _steps / 2;
1144
unsigned blockSize = width / blocks;
1148
for ( ; _step < _steps; )
1150
kapp->processEvents();
1151
if ( _time.elapsed() >= 1 )
1153
for ( int x = 0; x <= _step; ++x )
1156
bitBlt( canv, x * blockSize, height - y * blockSize,
1157
&_pix2, x * blockSize, height - y * blockSize,
1158
blockSize, blockSize );
1168
// Strips Right-Down
1169
case PEF_STRIPS_RIGHT_DOWN:
1173
unsigned blocks = _steps / 2;
1174
unsigned blockSize = width / blocks;
1178
for ( ; _step < _steps; )
1180
kapp->processEvents();
1181
if ( _time.elapsed() >= 1 )
1183
for ( int x = 0; x <= _step; ++x )
1187
bitBlt( canv, x * blockSize, y * blockSize, &_pix2,
1188
x * blockSize, y * blockSize, blockSize, blockSize );
1201
KRandomSequence random;
1203
unsigned count = 32;
1205
for( unsigned i = 0; i < count; i++ )
1208
_steps = hsteps * 10;
1210
unsigned strip_width = (width + count-1) / count;
1211
unsigned rn = 10 * height / _steps;
1213
for ( _h = 0 ; _step < _steps ; )
1215
kapp->processEvents();
1216
if ( _time.elapsed() >= 1 )
1219
_h = _step * height/ _steps;
1220
_h = _h > height ? height : _h;
1222
for( unsigned k = 0; k < count; k++ )
1224
unsigned x = k * width / count;
1225
delta[k] += ( 1+ random.getLong( rn ) );
1226
if( delta[k] > height ) delta[k] = height;
1227
if( delta[k] <= height )
1229
bitBlt( canv, x, 0, &_pix2, x, 0, strip_width, delta[k] );
1230
bitBlt( canv, x, delta[k], &_pix1, x, 0, strip_width, height - delta[k] );
1236
if( _h >= height ) break;
1241
// Random (just pick up one of the above effect)
1243
case PEF_LAST_MARKER:
1245
KRandomSequence random;
1247
kPchangePages( canv, _pix1, _pix2, static_cast<PageEffect>( random.getLong( PEF_LAST_MARKER ) ),