diff options
Diffstat (limited to 'kipi-plugins/slideshow/kbeffect.cpp')
-rw-r--r-- | kipi-plugins/slideshow/kbeffect.cpp | 192 |
1 files changed, 192 insertions, 0 deletions
diff --git a/kipi-plugins/slideshow/kbeffect.cpp b/kipi-plugins/slideshow/kbeffect.cpp new file mode 100644 index 0000000..891a6fe --- /dev/null +++ b/kipi-plugins/slideshow/kbeffect.cpp @@ -0,0 +1,192 @@ +/* ============================================================ + * + * This file is a part of kipi-plugins project + * http://www.kipi-plugins.org + * + * Date : 2007-11-14 + * Description : a kipi plugin to slide images. + * + * Copyright (C) 2007 by Valerio Fuoglio <valerio dot fuoglio at gmail dot com> + * + * Parts of this code are based on smoothslidesaver by Carsten Weinhold + * <carsten dot weinhold at gmx dot de> + * + * This program is free software; you can redistribute it + * and/or modify it under the terms of the GNU General + * Public License as published by the Free Software Foundation; + * either version 2, or (at your option) any later version. + * + * This program 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 General Public License for more details. + * + * ============================================================ */ + +// C++ includes. + +#include <assert.h> + +// Qt includes. + +#include <qdatetime.h> + +// KDE includes. + +#include "kbeffect.h" + +// Local includes. + +#include "slideshowkb.h" + +namespace KIPISlideShowPlugin +{ + +// ------------------------------------------------------------------------- + +int KBEffect::m_numKBEffectRepeated = 0; + +// ------------------------------------------------------------------------- + +KBEffect::KBEffect(SlideShowKB *parent, bool needFadeIn) { + + this->slideWidget = parent; + this->m_needFadeIn = needFadeIn; +} + + +KBEffect::~KBEffect() { + +} + + +void KBEffect::setupNewImage(int img) { + + slideWidget->setupNewImage(img); +} + + +void KBEffect::swapImages() { + + slideWidget->swapImages(); +} + + +Image *KBEffect::image(int img) { + + assert(img >= 0 && img < 2); + return slideWidget->m_image[img]; +} + + +KBEffect::Type KBEffect::chooseKBEffect(KBEffect::Type oldType) { + + KBEffect::Type type; + + do { + type = (rand() < RAND_MAX / 2) ? KBEffect::Fade : KBEffect::Blend; + } while (type == oldType && m_numKBEffectRepeated >= 1); + + if (type == oldType) + m_numKBEffectRepeated++; + else + m_numKBEffectRepeated = 0; + + return type; +} + + + +// ------------------------------------------------------------------------- + +FadeKBEffect::FadeKBEffect(SlideShowKB *parent, bool needFadeIn): + KBEffect(parent, needFadeIn) +{ + m_img[0] = image(0); +} + + +FadeKBEffect::~FadeKBEffect() { + +} + + +bool FadeKBEffect::done() { + + if (m_img[0]->m_pos >= 1.0) { + setupNewImage(0); + return true; + } + + return false; +} + + +void FadeKBEffect::advanceTime(float step) { + + m_img[0]->m_pos += step; + if (m_img[0]->m_pos >= 1.0) + m_img[0]->m_pos = 1.0; + + if (m_needFadeIn && m_img[0]->m_pos < 0.1) + m_img[0]->m_opacity = m_img[0]->m_pos * 10; + else if (m_img[0]->m_pos > 0.9) + m_img[0]->m_opacity = (1.0 - m_img[0]->m_pos) * 10; + else + m_img[0]->m_opacity = 1.0; +} + +// ------------------------------------------------------------------------- + +BlendKBEffect::BlendKBEffect(SlideShowKB *parent, bool needFadeIn): + KBEffect(parent, needFadeIn) +{ + m_img[0] = image(0); + m_img[1] = 0; +} + + +BlendKBEffect::~BlendKBEffect() { + +} + + +bool BlendKBEffect::done() { + + if (m_img[0]->m_pos >= 1.0) { + m_img[0]->m_paint = false; + swapImages(); + return true; + } + + return false; +} + + +void BlendKBEffect::advanceTime(float step) { + + m_img[0]->m_pos += step; + if (m_img[0]->m_pos >= 1.0) + m_img[0]->m_pos = 1.0; + + if (m_img[1]) + m_img[1]->m_pos += step; + + if (m_needFadeIn && m_img[0]->m_pos < 0.1) + m_img[0]->m_opacity = m_img[0]->m_pos * 10; + + else if (m_img[0]->m_pos > 0.9) { + + m_img[0]->m_opacity = (1.0 - m_img[0]->m_pos) * 10; + + if (m_img[1] == 0) { + setupNewImage(1); + m_img[1] = image(1); + m_img[1]->m_opacity = 1.0; + } + + } else + m_img[0]->m_opacity = 1.0; +} + +} // NameSpace KIPISlideShowPlugin |