summaryrefslogtreecommitdiffstats
path: root/kipi-plugins/slideshow/kbeffect.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'kipi-plugins/slideshow/kbeffect.cpp')
-rw-r--r--kipi-plugins/slideshow/kbeffect.cpp192
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