diff options
Diffstat (limited to 'kpresenter/KPrPageEffects.cpp')
-rw-r--r-- | kpresenter/KPrPageEffects.cpp | 1590 |
1 files changed, 1590 insertions, 0 deletions
diff --git a/kpresenter/KPrPageEffects.cpp b/kpresenter/KPrPageEffects.cpp new file mode 100644 index 00000000..d98f5141 --- /dev/null +++ b/kpresenter/KPrPageEffects.cpp @@ -0,0 +1,1590 @@ +// -*- Mode: c++; c-basic-offset: 4; indent-tabs-mode: nil; tab-width: 4; -*- +/* This file is part of the KDE project + Copyright (C) 1998, 1999 Reginald Stadlbauer <reggie@kde.org> + Copyright (C) 2002 Ariya Hidayat <ariya@kde.org> + Copyright (C) 2002 Harri Porten <porten@kde.org> + Copyright (C) 2004 Thorsten Zachmann <zachmann@kde.org> + + This library is free software; you can redistribute it and/or + modify it under the terms of the GNU Library General Public + License as published by the Free Software Foundation; either + version 2 of the License, or (at your option) any later version. + + This library is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + Library General Public License for more details. + + You should have received a copy of the GNU Library General Public License + along with this library; see the file COPYING.LIB. If not, write to + the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, + * Boston, MA 02110-1301, USA. +*/ + +#include "KPrPageEffects.h" + +#include <qpixmap.h> +#include <qwidget.h> +#include <qwmatrix.h> + +#include <kapplication.h> +#include <kdebug.h> +#include <krandomsequence.h> + + +KPrPageEffects::KPrPageEffects( QPaintDevice *dst, const QPixmap &pageTo, PageEffect effect, EffectSpeed speed ) +: m_dst( dst ), m_pageTo( pageTo ), m_pageFrom(m_pageTo.width(),m_pageTo.height()), m_effect(effect), m_speed(speed), m_effectStep(0) +, m_width(m_pageTo.width()), m_height(m_pageTo.height()), m_finished(false) +{ + if ( m_effect == PEF_RANDOM ) + { + KRandomSequence random; + m_randomEffect = static_cast<PageEffect>( random.getLong( PEF_LAST_MARKER ) ); + } + int div[] = { 100, 65, 30 }; + + m_stepWidth = (int) ( m_width / div[m_speed] ); + m_stepHeight = (int) ( m_height / div[m_speed] ); +} + + +KPrPageEffects::~KPrPageEffects() +{ +} + + +bool KPrPageEffects::doEffect() +{ + if ( !m_finished ) + { + PageEffect effect = m_effect == PEF_RANDOM ? m_randomEffect : m_effect; + switch ( effect ) + { + case PEF_NONE: + m_finished = effectNone(); + break; + case PEF_CLOSE_HORZ: + m_finished = effectCloseHorizontal(); + break; + case PEF_CLOSE_VERT: + m_finished = effectCloseVertical(); + break; + case PEF_CLOSE_ALL: + m_finished = effectCloseFromAllDirections(); + break; + case PEF_OPEN_HORZ: + m_finished = effectOpenHorizontal(); + break; + case PEF_OPEN_VERT: + m_finished = effectOpenVertical(); + break; + case PEF_OPEN_ALL: + m_finished = effectOpenFromAllDirections(); + break; + case PEF_INTERLOCKING_HORZ_1: + m_finished = effectInterlockingHorizontal1(); + break; + case PEF_INTERLOCKING_HORZ_2: + m_finished = effectInterlockingHorizontal2(); + break; + case PEF_INTERLOCKING_VERT_1: + m_finished = effectInterlockingVertical1(); + break; + case PEF_INTERLOCKING_VERT_2: + m_finished = effectInterlockingVertical2(); + break; + case PEF_SURROUND1: + m_finished = effectSurround1(); + break; + case PEF_FLY1: + m_finished = effectFlyAway1(); + break; + case PEF_BLINDS_HOR: + m_finished = effectBlindsHorizontal(); + break; + case PEF_BLINDS_VER: + m_finished = effectBlindsVertical(); + break; + case PEF_BOX_IN: + m_finished = effectBoxIn(); + break; + case PEF_BOX_OUT: + m_finished = effectBoxOut(); + break; + case PEF_CHECKBOARD_ACROSS: + m_finished = effectCheckboardAcross(); + break; + case PEF_CHECKBOARD_DOWN: + m_finished = effectCheckboardDown(); + break; + case PEF_COVER_DOWN: + m_finished = effectCoverDown(); + break; + case PEF_UNCOVER_DOWN: + m_finished = effectUncoverDown(); + break; + case PEF_COVER_UP: + m_finished = effectCoverUp(); + break; + case PEF_UNCOVER_UP: + m_finished = effectUncoverUp(); + break; + case PEF_COVER_LEFT: + m_finished = effectCoverLeft(); + break; + case PEF_UNCOVER_LEFT: + m_finished = effectUncoverLeft(); + break; + case PEF_COVER_RIGHT: + m_finished = effectCoverRight(); + break; + case PEF_UNCOVER_RIGHT: + m_finished = effectUncoverRight(); + break; + case PEF_COVER_LEFT_UP: + m_finished = effectCoverLeftUp(); + break; + case PEF_UNCOVER_LEFT_UP: + m_finished = effectUncoverLeftUp(); + break; + case PEF_COVER_LEFT_DOWN: + m_finished = effectCoverLeftDown(); + break; + case PEF_UNCOVER_LEFT_DOWN: + m_finished = effectUncoverLeftDown(); + break; + case PEF_COVER_RIGHT_UP: + m_finished = effectCoverRightUp(); + break; + case PEF_UNCOVER_RIGHT_UP: + m_finished = effectUncoverRightUp(); + break; + case PEF_COVER_RIGHT_DOWN: + m_finished = effectCoverRightDown(); + break; + case PEF_UNCOVER_RIGHT_DOWN: + m_finished = effectUncoverRightDown(); + break; + case PEF_DISSOLVE: + m_finished = effectDissolve(); + break; + case PEF_STRIPS_LEFT_UP: + m_finished = effectStripesLeftUp(); + break; + case PEF_STRIPS_LEFT_DOWN: + m_finished = effectStripesLeftDown(); + break; + case PEF_STRIPS_RIGHT_UP: + m_finished = effectStripesRightUp(); + break; + case PEF_STRIPS_RIGHT_DOWN: + m_finished = effectStripesRigthDown(); + break; + case PEF_MELTING: + m_finished = effectMelting(); + break; + default: + m_finished = effectCloseHorizontal(); + break; + } + ++m_effectStep; + } + return m_finished; +} + + +void KPrPageEffects::finish() +{ + if ( !m_finished ) + { + bitBlt( m_dst, 0, 0, &m_pageTo ); + m_finished = true; + } +} + + +bool KPrPageEffects::effectNone() const +{ + bitBlt( m_dst, 0, 0, &m_pageTo ); + return true; +} + + +bool KPrPageEffects::effectCloseHorizontal() const +{ + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height / 2 ) + { + h = m_height / 2; + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageTo, 0, m_height / 2 - h, m_width, h ); + bitBlt( m_dst, 0, m_height - h, &m_pageTo, 0, m_height / 2, m_width, h ); + + return finished; +} + + +bool KPrPageEffects::effectCloseVertical() const +{ + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( w >= m_width / 2 ) + { + w = m_width / 2; + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageTo, m_width / 2 - w, 0, w, m_height ); + bitBlt( m_dst, m_width - w, 0, &m_pageTo, m_width / 2, 0, w, m_height ); + + return finished; +} + + +bool KPrPageEffects::effectCloseFromAllDirections() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height / 2 ) + { + h = m_height / 2; + } + if ( w >= m_width / 2 ) + { + w = m_width / 2; + } + if ( h >= m_height / 2 && w >= m_width / 2 ) + { + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageTo, m_width / 2 - w, m_height / 2 - h, w, h ); + bitBlt( m_dst, m_width - w, 0, &m_pageTo, m_width / 2, m_height / 2 - h, w, h ); + bitBlt( m_dst, 0, m_height - h, &m_pageTo, m_width / 2 - w, m_height / 2, w, h ); + bitBlt( m_dst, m_width - w, m_height - h, &m_pageTo, m_width / 2, m_height / 2, w, h ); + + return finished; +} + + +bool KPrPageEffects::effectOpenHorizontal() const +{ + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height / 2 ) + { + h = m_height / 2; + finished = true; + } + + bitBlt( m_dst, 0, m_height / 2 - h, &m_pageTo, 0, 0, m_width, h ); + bitBlt( m_dst, 0, m_height / 2, &m_pageTo, 0, m_height - h, m_width, h ); + + return finished; +} + + +bool KPrPageEffects::effectOpenVertical() const +{ + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( w >= m_width / 2 ) + { + w = m_width / 2; + finished = true; + } + + bitBlt( m_dst, m_width / 2 - w, 0, &m_pageTo, 0, 0, w, m_height ); + bitBlt( m_dst, m_width / 2, 0, &m_pageTo, m_width - w, 0, w, m_height ); + + return finished; +} + + +bool KPrPageEffects::effectOpenFromAllDirections() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height / 2 ) + { + h = m_height / 2; + } + if ( w >= m_width / 2 ) + { + w = m_width / 2; + } + if ( h >= m_height / 2 && w >= m_width / 2 ) + { + finished = true; + } + + bitBlt( m_dst, m_width / 2 - w, m_height / 2 - h, &m_pageTo, 0, 0, w, h ); + bitBlt( m_dst, m_width / 2, m_height / 2 - h, &m_pageTo, m_width - w, 0, w, h ); + bitBlt( m_dst, m_width / 2 - w, m_height / 2, &m_pageTo, 0, m_height - h, w, h ); + bitBlt( m_dst, m_width / 2, m_height / 2, &m_pageTo, m_width - w, m_height - h, w, h ); + + return finished; +} + + +bool KPrPageEffects::effectInterlockingHorizontal1() const +{ + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( w >= m_width ) + { + w = m_width; + finished = true; + } + + int h = m_height / 4; + + bitBlt( m_dst, w, 0, &m_pageTo, w, 0, m_stepWidth, h ); + bitBlt( m_dst, m_width - w - m_stepWidth, h, &m_pageTo, m_width - w - m_stepWidth, h, m_stepWidth, h ); + bitBlt( m_dst, w, 2 * h, &m_pageTo, w, 2 * h, m_stepWidth, h ); + bitBlt( m_dst, m_width - w - m_stepWidth, 3 * h, &m_pageTo, m_width - w - m_stepWidth, 3 * h, m_stepWidth, m_height - 3 * h ); + + return finished; +} + + +bool KPrPageEffects::effectInterlockingHorizontal2() const +{ + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( w >= m_width ) + { + w = m_width; + finished = true; + } + + int h = m_height / 4; + + bitBlt( m_dst, m_width - w - m_stepWidth, 0, &m_pageTo, m_width - w - m_stepWidth, 0, m_stepWidth, h ); + bitBlt( m_dst, w, h, &m_pageTo, w, h, m_stepWidth, h ); + bitBlt( m_dst, m_width - w - m_stepWidth, 2 * h, &m_pageTo, m_width - w - m_stepWidth, 2 * h, m_stepWidth, h ); + bitBlt( m_dst, w, 3 * h, &m_pageTo, w, 3 * h, m_stepWidth, h ); + + return finished; +} + + +bool KPrPageEffects::effectInterlockingVertical1() const +{ + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + finished = true; + } + + int w = m_width / 4; + + bitBlt( m_dst, 0, h, &m_pageTo, 0, h, w, m_stepHeight ); + bitBlt( m_dst, w, m_height - h - m_stepHeight, &m_pageTo, w, m_height - h - m_stepHeight, w, m_stepHeight ); + bitBlt( m_dst, 2 * w, h, &m_pageTo, 2 * w, h, w, m_stepHeight ); + bitBlt( m_dst, 3 * w, m_height - h - m_stepHeight, &m_pageTo, 3 * w, m_height - h - m_stepHeight, w, m_stepHeight ); + + return finished; +} + + +bool KPrPageEffects::effectInterlockingVertical2() const +{ + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + finished = true; + } + + int w = m_width / 4; + + bitBlt( m_dst, 0, m_height - h - m_stepHeight, &m_pageTo, 0, m_height - h - m_stepHeight, w, m_stepHeight ); + bitBlt( m_dst, w, h, &m_pageTo, w, h, w, m_stepHeight ); + bitBlt( m_dst, 2 * w, m_height - h - m_stepHeight, &m_pageTo, 2 * w, m_height - h - m_stepHeight, w, m_stepHeight ); + bitBlt( m_dst, 3 * w, h, &m_pageTo, 3 * w, h, w, m_stepHeight ); + + return finished; +} + + +bool KPrPageEffects::effectSurround1() const +{ + int div[] = { 20, 15, 10 }; + int stepSize = m_height / div[m_speed]; + int step = m_effectStep * stepSize; + + int h = m_height / 10; + int w = m_width / 10; + int repaint_h = h; + int repaint_w = w; + + bool finished = false; + bool repaint= false; + int rh = 0; + int rw = 0; + int repaint_rh = 0; + int repaint_rw = 0; + + // 1 + if ( step < m_height ) + { + rh = step; + rw = 0; + h = stepSize; + if ( step + stepSize >= m_height ) + { + repaint = true; + + repaint_rh = m_height - repaint_h; + repaint_rw = step - m_height + repaint_w; + repaint_w = stepSize; + } + } + // 2 + else if ( step < m_height + m_width - w ) + { + rh = m_height - h; + rw = step - m_height + w; + w = stepSize; + if ( step + stepSize >= m_height + m_width - repaint_w ) + { + repaint = true; + + repaint_rh = m_height - ( step - m_height + repaint_h - m_width + repaint_w + stepSize ); + repaint_rw = m_width - repaint_w; + repaint_h = stepSize; + } + } + // 3 + else if ( step < 2 * m_height - h + m_width - w ) + { + rh = m_height - ( step - m_height + h - m_width + w + stepSize ); + rw = m_width - w; + h = stepSize; + if ( step + stepSize >= 2 * m_height - repaint_h + m_width - repaint_w ) + { + repaint = true; + + repaint_rh = 0; + repaint_rw = m_width - ( step - 2 * m_height + repaint_h - m_width + 2 * repaint_w + stepSize ); + repaint_w = stepSize; + } + } + // 4 + else if ( step < 2 * m_height - h + 2 * m_width - 3 * w ) + { + rh = 0; + rw = m_width - ( step - 2 * m_height + h - m_width + 2 * w + stepSize ); + w = stepSize; + if ( step + stepSize >= 2 * m_height - repaint_h + 2 * m_width - 3 * repaint_w ) + { + repaint = true; + + repaint_rh = step - 2 * m_height + 2 * repaint_h - 2 * m_width + 3 * repaint_w; + repaint_rw = repaint_w; + repaint_h = stepSize; + } + } + // 5 + else if ( step < 3 * m_height - 3 * h + 2 * m_width - 3 * w ) + { + rh = step - 2 * m_height + 2 * h - 2 * m_width + 3 * w; + rw = w; + h = stepSize; + if ( step + stepSize >= 3 * m_height - 3 * repaint_h + 2 * m_width - 3 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - 2 * repaint_h; + repaint_rw = step - 3 * m_height + 3 * repaint_h - 2 * m_width + 5 * repaint_w; + repaint_w = stepSize; + } + } + // 6 + else if ( step < 3 * m_height - 3 * h + 3 * m_width - 6 * w ) + { + rh = m_height - 2 * h; + rw = step - 3 * m_height + 3 * h - 2 * m_width + 5 * w; + w = stepSize; + if ( step + stepSize >= 3 * m_height - 3 * repaint_h + 3 * m_width - 6 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - ( step - 3 * m_height + 5 * repaint_h - 3 * m_width + 6 * repaint_w + stepSize ); + repaint_rw = m_width - 2 * repaint_w; + repaint_h = stepSize; + } + } + // 7 + else if ( step < 4 * m_height - 6 * h + 3 * m_width - 6 * w ) + { + rh = m_height - ( step - 3 * m_height + 5 * h - 3 * m_width + 6 * w + stepSize ); + rw = m_width - 2 * w; + h = stepSize; + if ( step + stepSize >= 4 * m_height - 6 * repaint_h + 3 * m_width - 6 * repaint_w ) + { + repaint = true; + + repaint_rh = repaint_h; + repaint_rw = m_width - ( step - 4 * m_height + 6 * repaint_h - 3 * m_width + 8 * repaint_w + stepSize ); + repaint_w = stepSize; + } + } + // 8 + else if ( step < 4 * m_height - 6 * h + 4 * m_width - 10 * w ) + { + rh = h; + rw = m_width - ( step - 4 * m_height + 6 * h - 3 * m_width + 8 * w + stepSize ); + w = stepSize; + if ( step + stepSize >= 4 * m_height - 6 * repaint_h + 4 * m_width - 10 * repaint_w ) + { + repaint = true; + + repaint_rh = step - 4 * m_height + 8 * repaint_h - 4 * m_width + 10 * repaint_w; + repaint_rw = 2 * repaint_w; + repaint_h = stepSize; + } + } + // 9 + else if ( step < 5 * m_height - 10 * h + 4 * m_width - 10 * w ) + { + rh = step - 4 * m_height + 8 * h - 4 * m_width + 10 * w; + rw = 2 * w; + h = stepSize; + if ( step + stepSize >= 5 * m_height - 10 * repaint_h + 4 * m_width - 10 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - 3 * repaint_h; + repaint_rw = step - 5 * m_height + 10 * repaint_h - 4 * m_width + 13 * repaint_w; + repaint_w = stepSize; + } + } + // 10 + else if ( step < 5 * m_height - 10 * h + 5 * m_width - 15 * w ) + { + rh = m_height - 3 * h; + rw = step - 5 * m_height + 10 * h - 4 * m_width + 13 * w; + w = stepSize; + if ( step + stepSize >= 5 * m_height - 10 * repaint_h + 5 * m_width - 15 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - ( step - 5 * m_height + 13 * repaint_h - 5 * m_width + 15 * repaint_w + stepSize ); + repaint_rw = m_width - 3 * repaint_w; + repaint_h = stepSize; + } + } + // 11 + else if ( step < 6 * m_height - 15 * h + 5 * m_width - 15 * w ) + { + rh = m_height - ( step - 5 * m_height + 13 * h - 5 * m_width + 15 * w + stepSize ); + rw = m_width - 3 * w; + h = stepSize; + if ( step + stepSize >= 6 * m_height - 15 * repaint_h + 5 * m_width - 15 * repaint_w ) + { + repaint = true; + + repaint_rh = 2 * repaint_h; + repaint_rw = m_width - ( step - 6 * m_height + 15 * repaint_h - 5 * m_width + 18 * repaint_w + stepSize ); + repaint_w = stepSize; + } + } + // 12 + else if ( step < 6 * m_height - 15 * h + 6 * m_width - 21 * w ) + { + rh = 2 * h; + rw = m_width - ( step - 6 * m_height + 15 * h - 5 * m_width + 18 * w + stepSize ); + w = stepSize; + if ( step + stepSize >= 6 * m_height - 15 * repaint_h + 6 * m_width - 21 * repaint_w ) + { + repaint = true; + + repaint_rh = step - 6 * m_height + 18 * repaint_h - 6 * m_width + 21 * repaint_w; + repaint_rw = 3 * repaint_w; + repaint_h = stepSize; + } + } + // 13 + else if ( step < 7 * m_height - 21 * h + 6 * m_width - 21 * w ) + { + rh = step - 6 * m_height + 18 * h - 6 * m_width + 21 * w; + rw = 3 * w; + h = stepSize; + if ( step + stepSize >= 7 * m_height - 21 * repaint_h + 6 * m_width - 21 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - 4 * repaint_h; + repaint_rw = step - 7 * m_height + 21 * repaint_h - 6 * m_width + 25 * repaint_w; + repaint_w = stepSize; + } + } + // 14 + else if ( step < 7 * m_height - 21 * h + 7 * m_width - 28 * w ) + { + rh = m_height - 4 * h; + rw = step - 7 * m_height + 21 * h - 6 * m_width + 25 * w; + w = stepSize; + if ( step + stepSize >= 7 * m_height - 21 * repaint_h + 7 * m_width - 28 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - ( step - 7 * m_height + 25 * repaint_h - 7 * m_width + 28 * repaint_w + stepSize ); + repaint_rw = m_width - 4 * repaint_w; + repaint_h = stepSize; + } + } + // 15 + else if ( step < 8 * m_height - 28 * h + 7 * m_width - 28 * w ) + { + rh = m_height - ( step - 7 * m_height + 25 * h - 7 * m_width + 28 * w + stepSize ); + rw = m_width - 4 * w; + h = stepSize; + if ( step + stepSize >= 8 * m_height - 28 * repaint_h + 7 * m_width - 28 * repaint_w ) + { + repaint = true; + + repaint_rh = 3 * repaint_h; + repaint_rw = m_width - ( step - 8 * m_height + 28 * repaint_h - 7 * m_width + 32 * repaint_w + stepSize ); + repaint_w = stepSize; + } + } + // 16 + else if ( step < 8 * m_height - 28 * h + 8 * m_width - 36 * w ) + { + rh = 3 * h; + rw = m_width - ( step - 8 * m_height + 28 * h - 7 * m_width + 32 * w + stepSize ); + w = stepSize; + if ( step + stepSize >= 8 * m_height - 28 * repaint_h + 8 * m_width - 36 * repaint_w ) + { + repaint = true; + + repaint_rh = step - 8 * m_height + 32 * repaint_h - 8 * m_width + 36 * repaint_w; + repaint_rw = 4 * repaint_w; + repaint_h = stepSize; + } + } + // 17 + else if ( step < 9 * m_height - 36 * h + 8 * m_width - 36 * w ) + { + rh = step - 8 * m_height + 32 * h - 8 * m_width + 36 * w; + rw = 4 * w; + h = stepSize; + if ( step + stepSize >= 9 * m_height - 36 * repaint_h + 8 * m_width - 36 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - 5 * repaint_h; + repaint_rw = step - 9 * m_height + 36 * repaint_h - 8 * m_width + 41 * repaint_w; + repaint_w = stepSize; + } + } + // 18 + else if ( step < 9 * m_height - 36 * h + 9 * m_width - 45 * w ) + { + rh = m_height - 5 * h; + rw = step - 9 * m_height + 36 * h - 8 * m_width + 41 * w; + w = stepSize; + if ( step + stepSize >= 9 * m_height - 36 * repaint_h + 9 * m_width - 45 * repaint_w ) + { + repaint = true; + + repaint_rh = m_height - ( step - 9 * m_height + 41 * repaint_h - 9 * m_width + 45 * repaint_w + stepSize ); + repaint_rw = m_width - 5 * repaint_w; + repaint_h = stepSize; + } + } + // 19 + else if ( step < 10 * m_height - 45 * h + 9 * m_width - 45 * w ) + { + rh = m_height - ( step - 9 * m_height + 41 * h - 9 * m_width + 45 * w + stepSize ); + rw = m_width - 5 * w; + h = stepSize; + } + // 20 + /*else if ( step < 8 * m_height - 28 * h + 8 * m_width - 36 * w ) + { + rh = 3 * h; + rw = m_width - ( step - 8 * m_height + 28 * h - 7 * m_width + 32 * w + stepSize ); + w = stepSize; + }*/ + else + { + finished = true; + } + + bitBlt( m_dst, rw, rh, &m_pageTo, rw, rh, w, h ); + + if ( repaint ) + { + bitBlt( m_dst, repaint_rw, repaint_rh, &m_pageTo, repaint_rw, repaint_rh, repaint_w, repaint_h ); + } + + return finished; +} + + +bool KPrPageEffects::effectFlyAway1() +{ + bool finished = false; + int steps[] = { 20, 15, 10 }; + int pSteps = steps[m_speed]; + + if ( m_effectStep == 0 ) + { + bitBlt( &m_pageFrom, 0, 0, m_dst ); + m_list.append( m_width ); + m_list.append( m_height ); + m_list.append( 0 ); + m_list.append( 0 ); + } + else if ( m_effectStep <= pSteps ) + { + double dw = 1.0 - 83.0 / 100.0 * m_effectStep / (double)pSteps; + + QWMatrix m; + m.scale( dw, dw ); + QPixmap pix( m_pageFrom.xForm( m ) ); + + if ( m_effectStep == pSteps ) + m_pageFrom = pix; + + int w = pix.width(); + int h = pix.height(); + int x = ( m_width - w ) / 2; + int y = ( m_height - h ) / 2; + + int ow = *(m_list.at(0)); + int oh = *(m_list.at(1)); + int ox = *(m_list.at(2)); + int oy = *(m_list.at(3)); + + bitBlt( m_dst, x, y, &pix, 0, 0 , w, h ); + // top + bitBlt( m_dst, ox, oy, &m_pageTo, ox, oy, ow, y - oy ); + // left + bitBlt( m_dst, ox, y, &m_pageTo, ox, y, x - ox, h ); + // right + bitBlt( m_dst, x + w, y, &m_pageTo, x + w, y, ( ow - w + 1 ) / 2, h ); + // bottom + bitBlt( m_dst, ox, y + h, &m_pageTo, ox, y + h, ow, ( oh - h + 1 ) / 2 ); + + *(m_list.at(0)) = w; + *(m_list.at(1)) = h; + *(m_list.at(2)) = x; + *(m_list.at(3)) = y; + } + else if ( m_effectStep <= 2 * pSteps ) + { + int w = m_pageFrom.width(); + int h = m_pageFrom.height(); + int x = ( m_width - w ) / 2; + int y = ( m_height - h ) / 2 - ( m_height - h ) / 2 * ( m_effectStep - pSteps ) / pSteps; + + int oy = *(m_list.at(3)); + + bitBlt( m_dst, x, y, &m_pageFrom, 0, 0 , w, h ); + bitBlt( m_dst, x, y + h, &m_pageTo, x, y + h, w, oy - y); + + *(m_list.at(3)) = y; + } + else if ( m_effectStep <= 3 * pSteps ) + { + int w = m_pageFrom.width(); + int h = m_pageFrom.height(); + int x = ( m_width - w ) / 2 - ( m_width - w ) / 2 * ( m_effectStep - 2 * pSteps ) / pSteps; + int y = ( m_height - h ) / 2 * ( m_effectStep - 2 * pSteps ) / pSteps; + + int ox = *(m_list.at(2)); + int oy = *(m_list.at(3)); + + bitBlt( m_dst, x, y, &m_pageFrom, 0, 0 , w, h ); + bitBlt( m_dst, ox, oy, &m_pageTo, ox, oy, w, y - oy); + bitBlt( m_dst, x + w, oy, &m_pageTo, x + w, oy, x - ox, h ); + + *(m_list.at(2)) = x; + *(m_list.at(3)) = y; + } + else + { + int w = m_pageFrom.width(); + int h = m_pageFrom.height(); + int x = ( m_width - w ) / 2 * ( m_effectStep - 3 * pSteps ) / pSteps; + int y = ( m_height - h ) / 2 * ( m_effectStep - 2 * pSteps ) / pSteps; + + int ox = *(m_list.at(2)); + int oy = *(m_list.at(3)); + + bitBlt( m_dst, x, y, &m_pageFrom, 0, 0 , w, h ); + bitBlt( m_dst, ox, oy, &m_pageTo, ox, oy, w, y - oy); + bitBlt( m_dst, ox, oy, &m_pageTo, ox, oy, x - ox, h ); + + if ( x >= m_height ) + { + finished = true; + } + else + { + *(m_list.at(2)) = x; + *(m_list.at(3)) = y; + } + } + + return finished; +} + + +bool KPrPageEffects::effectBlindsHorizontal() const +{ + int h = m_effectStep * m_stepHeight; + int blockSize = m_height / 8; + + bool finished = false; + if ( h >= blockSize ) + { + h = blockSize; + finished = true; + } + + for ( int i=0; i < m_height; i += blockSize ) + bitBlt( m_dst, 0, h + i, &m_pageTo, 0, h + i, m_width, m_stepHeight ); + + return finished; +} + + +bool KPrPageEffects::effectBlindsVertical() const +{ + int w = m_effectStep * m_stepWidth; + int blockSize = m_width / 8; + + bool finished = false; + if ( w >= blockSize ) + { + w = blockSize; + finished = true; + } + + for ( int i=0; i < m_width; i += blockSize ) + bitBlt( m_dst, w + i, 0, &m_pageTo, w + i, 0, m_stepWidth, m_height ); + + return finished; +} + + +bool KPrPageEffects::effectBoxIn() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int stepHeight = (int)( ( m_effectStep + 1 ) * m_stepWidth * fact - h ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height / 2 ) + { + h = m_height / 2; + } + if ( w >= m_width / 2 ) + { + w = m_width / 2; + } + if ( h >= m_height / 2 && w >= m_width / 2 ) + { + finished = true; + } + + // top + bitBlt( m_dst, w, h, &m_pageTo, w, h, m_width - 2 * w, stepHeight ); + // left + bitBlt( m_dst, w, h, &m_pageTo, w, h, m_stepWidth, m_height - 2 * h ); + //right + bitBlt( m_dst, m_width - w, h, &m_pageTo, m_width - w, h, m_stepWidth, m_height - 2 * h ); + // bottom + bitBlt( m_dst, w, m_height - h - stepHeight, &m_pageTo, w, m_height - h - stepHeight, m_width - 2 * w, stepHeight ); + + return finished; +} + + +bool KPrPageEffects::effectBoxOut() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int stepHeight = (int)( ( m_effectStep + 1 ) * m_stepWidth * fact - h ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height / 2 ) + { + h = m_height / 2; + } + if ( w >= m_width / 2 ) + { + w = m_width / 2; + } + if ( h >= m_height / 2 && w >= m_width / 2 ) + { + finished = true; + } + + bitBlt( m_dst, m_width / 2 - w - m_stepWidth, m_height / 2 - h - stepHeight, + &m_pageTo, m_width / 2 - w - m_stepWidth, m_height / 2 - h - stepHeight, 2 * ( w + m_stepWidth ), stepHeight ); + bitBlt( m_dst, m_width / 2 - w - m_stepWidth, m_height / 2 - h, + &m_pageTo, m_width / 2 - w - m_stepWidth, m_height / 2 - h, m_stepWidth, 2 * h ); + bitBlt( m_dst, m_width / 2 + w, m_height / 2 - h, + &m_pageTo, m_width / 2 + w, m_height / 2 - h, m_stepWidth, 2 * h ); + bitBlt( m_dst, m_width / 2 - w - m_stepWidth, m_height / 2 + h, + &m_pageTo, m_width / 2 - w - m_stepWidth, m_height / 2 + h, 2 * ( w + m_stepWidth), stepHeight ); + + return finished; +} + + +bool KPrPageEffects::effectCheckboardAcross() const +{ + int w = m_effectStep * m_stepWidth; + int blockSize = m_height / 8; + + bool finished = false; + if ( w >= blockSize * 2 ) + { + w = blockSize * 2; + finished = true; + } + + for ( int y = 0; y < m_height; y += blockSize ) + { + int x = ( ( y / blockSize ) & 1 ) * blockSize; + + if ( x == blockSize && w >= blockSize - m_stepWidth ) + bitBlt( m_dst, w - blockSize, y, &m_pageTo, w - blockSize, y, m_stepWidth, blockSize ); + + for ( ; x < m_width; x += 2 * blockSize ) + { + bitBlt( m_dst, x + w, y, &m_pageTo, x + w, y, m_stepWidth, blockSize ); + } + } + + return finished; +} + + +bool KPrPageEffects::effectCheckboardDown() const +{ + int h = m_effectStep * m_stepHeight; + int blockSize = m_height / 8; + + bool finished = false; + if ( h >= blockSize * 2 ) + { + h = blockSize * 2; + finished = true; + } + + for ( int x = 0; x < m_width; x += blockSize ) + { + int y = ( ( x / blockSize ) & 1 ) * blockSize; + + if ( y == blockSize && h >= blockSize - m_stepHeight ) + bitBlt( m_dst, x, h - blockSize, &m_pageTo, x, h - blockSize, blockSize, m_stepHeight ); + + for ( ; y < m_width; y += 2 * blockSize ) + { + bitBlt( m_dst, x, y + h, &m_pageTo, x, y + h, blockSize, m_stepHeight ); + } + } + + return finished; +} + + +bool KPrPageEffects::effectCoverDown() const +{ + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageTo, 0, m_height - h, m_width, h ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverDown() const +{ + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + finished = true; + } + + bitBlt( m_dst, 0, h + m_stepHeight, m_dst, 0, h, m_width, m_height - h - m_stepHeight ); + bitBlt( m_dst, 0, h, &m_pageTo, 0, h, m_width, m_stepHeight ); + + return finished; +} + + +bool KPrPageEffects::effectCoverUp() const +{ + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + finished = true; + } + + bitBlt( m_dst, 0, m_height - h, &m_pageTo, 0, 0, m_width, h ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverUp() +{ + if ( m_effectStep == 0 ) + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + int h = m_effectStep * m_stepHeight; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageFrom, 0, h + m_stepHeight, m_width, m_height - h - m_stepHeight ); + bitBlt( m_dst, 0, m_height - h - m_stepHeight, &m_pageTo, 0, m_height - h - m_stepHeight, m_width, m_stepHeight ); + + return finished; +} + + +bool KPrPageEffects::effectCoverLeft() const +{ + int w = m_effectStep * m_stepHeight; + + bool finished = false; + if ( w >= m_width ) + { + w = m_width; + finished = true; + } + + bitBlt( m_dst, m_width - w, 0, &m_pageTo, 0, 0, w, m_height ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverLeft() +{ + if ( m_effectStep == 0 ) + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( w >= m_width ) + { + w = m_width; + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageFrom, w + m_stepWidth, 0, m_width - w - m_stepWidth, m_height ); + bitBlt( m_dst, m_width - w - m_stepWidth, 0, &m_pageTo, m_width - w - m_stepWidth, 0, m_stepWidth, m_height ); + + return finished; +} + + +bool KPrPageEffects::effectCoverRight() const +{ + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( w >= m_width ) + { + w = m_width; + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageTo, m_width - w, 0, w, m_height ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverRight() +{ + if ( m_effectStep == 0 ) + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( w >= m_width ) + { + w = m_width; + finished = true; + } + + bitBlt( m_dst, w + m_stepWidth, 0, &m_pageFrom, 0, 0, m_width - w - m_stepWidth, m_height ); + bitBlt( m_dst, w, 0, &m_pageTo, w, 0, m_stepWidth, m_height ); + + return finished; +} + + +bool KPrPageEffects::effectCoverLeftUp() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + + bitBlt( m_dst, m_width - w, m_height - h, &m_pageTo, 0, 0, w, h ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverLeftUp() +{ + if ( m_effectStep == 0 ) + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + + // fix only copy what is nesseccary + bitBlt( m_dst, 0, 0, &m_pageFrom, w, h, m_width - w, m_height - h ); + bitBlt( m_dst, m_width - w, 0, &m_pageTo, m_width - w, 0, w, m_height ); + bitBlt( m_dst, 0, m_height - h, &m_pageTo, 0, m_height - h, m_width, h ); + + return finished; +} + + +bool KPrPageEffects::effectCoverLeftDown() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + + bitBlt( m_dst, m_width - w, 0, &m_pageTo, 0, m_height - h, w, h ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverLeftDown() +{ + if ( m_effectStep == 0 ) + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + + // fix only copy what is nesseccary + bitBlt( m_dst, 0, h, &m_pageFrom, w, 0, m_width - w, m_height - h ); + bitBlt( m_dst, 0, 0, &m_pageTo, 0, 0, m_width, h ); + bitBlt( m_dst, m_width - w, h, &m_pageTo, m_width - w, h, w, m_height - h ); + + return finished; +} + + +bool KPrPageEffects::effectCoverRightUp() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + + bitBlt( m_dst, 0, m_height - h, &m_pageTo, m_width - w, 0, w, h ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverRightUp() +{ + if ( m_effectStep == 0 ) + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + // only draw what nesseccary + bitBlt( m_dst, w, 0, &m_pageFrom, 0, h, m_width - w, m_height - h ); + bitBlt( m_dst, 0, 0, &m_pageTo, 0, 0, w, m_height ); + bitBlt( m_dst, w, m_height - h, &m_pageTo, w, m_height - h, m_width - w, h ); + + return finished; +} + + +bool KPrPageEffects::effectCoverRightDown() const +{ + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + + bitBlt( m_dst, 0, 0, &m_pageTo, m_width - w, m_height - h, w, h ); + + return finished; +} + + +bool KPrPageEffects::effectUncoverRightDown() +{ + if ( m_effectStep == 0 ) + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + double fact = (double) m_height / (double) m_width; + int h = (int)( m_effectStep * m_stepWidth * fact ); + int w = m_effectStep * m_stepWidth; + + bool finished = false; + if ( h >= m_height ) + { + h = m_height; + } + if ( w >= m_width ) + { + w = m_width; + } + if ( h >= m_height && w >= m_width ) + { + finished = true; + } + // only draw what nesseccary + bitBlt( m_dst, w, h, &m_pageFrom, 0, 0, m_width - w, m_height - h ); + bitBlt( m_dst, 0, 0, &m_pageTo, 0, 0, m_width, h ); + bitBlt( m_dst, 0, h, &m_pageTo, 0, h, w, m_height - h ); + + return finished; +} + + +bool KPrPageEffects::effectDissolve() +{ + KRandomSequence random; + + int blockSize = m_height / 32; // small enough + int rowno = ( m_height + blockSize - 1 ) / blockSize; + int colno = ( m_width + blockSize - 1 ) / blockSize; + int cellno = rowno * colno; + + if ( m_effectStep == 0 ) + { + for( int c = 0; c < cellno; c++ ) + m_list.append( c ); + } + + int steps[] = { 30, 60, 90 }; + int dissove = steps[m_speed]; + while ( !m_list.isEmpty() && dissove > 0 ) + { + --dissove; + + int index = random.getLong( m_list.count() ); + QValueListIterator<int> it = m_list.at( index ); + + unsigned int x = ( *it % colno ) * blockSize; + unsigned int y = ( *it / colno ) * blockSize; + + m_list.remove( it ); + + bitBlt( m_dst, x, y, &m_pageTo, x, y, blockSize, blockSize ); + } + + return m_list.isEmpty(); +} + + +bool KPrPageEffects::effectStripesLeftUp() const +{ + int wSteps = m_width / m_stepWidth + 1; + int hSteps = m_height / m_stepWidth + 1; + + int xStart = m_effectStep < wSteps ? m_effectStep : wSteps; + int xStop = 1 > m_effectStep - hSteps + 1 ? 1 : m_effectStep - hSteps + 1; + + bool finished = false; + if ( m_effectStep >= wSteps + hSteps ) + { + finished = true; + } + + int y = m_effectStep - wSteps + 1 > 1 ? m_effectStep - wSteps + 1 : 1; + + for ( int x = xStart; x >= xStop; --x ) + { + bitBlt( m_dst, m_width - x * m_stepWidth, m_height - y * m_stepWidth, + &m_pageTo, m_width - x * m_stepWidth, m_height - y * m_stepWidth , m_stepWidth, m_stepWidth ); + ++y; + } + + return finished; +} + + +bool KPrPageEffects::effectStripesLeftDown() const +{ + int wSteps = m_width / m_stepWidth + 1; + int hSteps = m_height / m_stepWidth + 1; + + int xStart = m_effectStep < wSteps ? m_effectStep : wSteps; + int xStop = 1 > m_effectStep - hSteps + 1 ? 1 : m_effectStep - hSteps + 1; + + bool finished = false; + if ( m_effectStep >= wSteps + hSteps ) + { + finished = true; + } + + int y = m_effectStep - wSteps + 1 > 1 ? m_effectStep - wSteps + 1 : 1; + + for ( int x = xStart; x >= xStop; --x ) + { + bitBlt( m_dst, m_width - x * m_stepWidth, ( y - 1 ) * m_stepWidth, + &m_pageTo, m_width - x * m_stepWidth, ( y - 1 ) * m_stepWidth , m_stepWidth, m_stepWidth ); + ++y; + } + + return finished; +} + + +bool KPrPageEffects::effectStripesRightUp() const +{ + int wSteps = m_width / m_stepWidth + 1; + int hSteps = m_height / m_stepWidth + 1; + + int xStart = m_effectStep < wSteps ? m_effectStep : wSteps; + int xStop = 1 > m_effectStep - hSteps + 1 ? 1 : m_effectStep - hSteps + 1; + + bool finished = false; + if ( m_effectStep >= wSteps + hSteps ) + { + finished = true; + } + + int y = m_effectStep - wSteps + 1 > 1 ? m_effectStep - wSteps + 1 : 1; + + for ( int x = xStart; x >= xStop; --x ) + { + bitBlt( m_dst, ( x - 1 ) * m_stepWidth, m_height - y * m_stepWidth, + &m_pageTo, ( x - 1 ) * m_stepWidth, m_height - y * m_stepWidth , m_stepWidth, m_stepWidth ); + ++y; + } + + return finished; +} + + +bool KPrPageEffects::effectStripesRigthDown() const +{ + int wSteps = m_width / m_stepWidth + 1; + int hSteps = m_height / m_stepWidth + 1; + + int xStart = m_effectStep < wSteps ? m_effectStep : wSteps; + int xStop = 1 > m_effectStep - hSteps + 1 ? 1 : m_effectStep - hSteps + 1; + + bool finished = false; + if ( m_effectStep >= wSteps + hSteps ) + { + finished = true; + } + + int y = m_effectStep - wSteps + 1 > 1 ? m_effectStep - wSteps + 1 : 1; + + for ( int x = xStart; x >= xStop; --x ) + { + bitBlt( m_dst, ( x - 1 ) * m_stepWidth, ( y - 1 ) * m_stepWidth, + &m_pageTo, ( x - 1 ) * m_stepWidth, ( y - 1 ) * m_stepWidth , m_stepWidth, m_stepWidth ); + ++y; + } + + return finished; +} + + +bool KPrPageEffects::effectMelting() +{ + int count = 32; + int max_melt = 2 * m_stepHeight; + + if ( m_effectStep == 0 ) + { + bitBlt( &m_pageFrom, 0, 0, m_dst ); + + for( int c = 0; c < count; c++ ) + m_list.append( 0 ); + } + + int w = ( m_width + count - 1 ) / count; + + QValueListIterator<int> it = m_list.begin(); + + int finished = 32; + for ( int c = 0; c < count; c++ ) + { + int x = c * w; + + KRandomSequence random; + int grow = 1 + random.getLong( max_melt ); + + if ( *it + grow >= m_height ) + { + grow = m_height - *it; + --finished; + } + + if( *it < m_height ) + { + bitBlt( m_dst, x, *it, &m_pageTo, x, *it, w, grow ); + bitBlt( m_dst, x, *it + grow, &m_pageFrom, x, 0, w, m_height - *it - grow ); + + *it += grow; + } + ++it; + } + + return finished == 0; +} + + |