File indexing completed on 2025-03-09 03:52:07
0001 /* ============================================================ 0002 * 0003 * This file is a part of digiKam project 0004 * https://www.digikam.org 0005 * 0006 * Date : 2007-11-14 0007 * Description : a presentation tool. 0008 * 0009 * SPDX-FileCopyrightText: 2007-2008 by Valerio Fuoglio <valerio dot fuoglio at gmail dot com> 0010 * SPDX-FileCopyrightText: 2012-2024 by Gilles Caulier <caulier dot gilles at gmail dot com> 0011 * 0012 * Parts of this code are based on smoothslidesaver by Carsten Weinhold 0013 * <carsten dot weinhold at gmx dot de> 0014 * 0015 * SPDX-License-Identifier: GPL-2.0-or-later 0016 * 0017 * ============================================================ */ 0018 0019 #include "kbeffect.h" 0020 0021 // Qt includes 0022 0023 #include <QRandomGenerator> 0024 0025 // Local includes 0026 0027 #include "presentationkb.h" 0028 #include "presentationkb_p.h" 0029 0030 namespace DigikamGenericPresentationPlugin 0031 { 0032 0033 // ------------------------------------------------------------------------- 0034 0035 int KBEffect::m_numKBEffectRepeated = 0; 0036 0037 // ------------------------------------------------------------------------- 0038 0039 KBEffect::KBEffect(PresentationKB* const parent, bool needFadeIn) 0040 : m_needFadeIn (needFadeIn), 0041 m_slideWidget(parent) 0042 { 0043 m_img[0] = nullptr; 0044 m_img[1] = nullptr; 0045 } 0046 0047 void KBEffect::setupNewImage(int img) 0048 { 0049 m_slideWidget->setupNewImage(img); 0050 } 0051 0052 void KBEffect::swapImages() 0053 { 0054 m_slideWidget->swapImages(); 0055 } 0056 0057 KBImage* KBEffect::image(int img) const 0058 { 0059 Q_ASSERT ((img >= 0) && (img < 2)); 0060 0061 return m_slideWidget->d->image[img]; 0062 } 0063 0064 KBEffect::Type KBEffect::chooseKBEffect(KBEffect::Type oldType) 0065 { 0066 KBEffect::Type type; 0067 0068 do 0069 { 0070 type = (QRandomGenerator::global()->bounded(2U) == 0) ? KBEffect::Fade : KBEffect::Blend; 0071 } 0072 while ((type == oldType) && (m_numKBEffectRepeated >= 1)); 0073 0074 if (type == oldType) 0075 { 0076 m_numKBEffectRepeated++; 0077 } 0078 else 0079 { 0080 m_numKBEffectRepeated = 0; 0081 } 0082 0083 return type; 0084 } 0085 0086 // ------------------------------------------------------------------------- 0087 0088 FadeKBEffect::FadeKBEffect(PresentationKB* const parent, bool needFadeIn) 0089 : KBEffect(parent, needFadeIn) 0090 { 0091 m_img[0] = image(0); 0092 } 0093 0094 FadeKBEffect::~FadeKBEffect() 0095 { 0096 } 0097 0098 bool FadeKBEffect::done() 0099 { 0100 if (m_img[0]->m_pos >= 1.0) 0101 { 0102 setupNewImage(0); 0103 0104 return true; 0105 } 0106 0107 return false; 0108 } 0109 0110 void FadeKBEffect::advanceTime(float step) 0111 { 0112 m_img[0]->m_pos += step; 0113 0114 if (m_img[0]->m_pos >= 1.0) 0115 { 0116 m_img[0]->m_pos = 1.0; 0117 } 0118 0119 if (m_needFadeIn && (m_img[0]->m_pos < 0.1)) 0120 { 0121 m_img[0]->m_opacity = m_img[0]->m_pos * 10; 0122 } 0123 else if (m_img[0]->m_pos > 0.9) 0124 { 0125 m_img[0]->m_opacity = (1.0 - m_img[0]->m_pos) * 10; 0126 } 0127 else 0128 { 0129 m_img[0]->m_opacity = 1.0; 0130 } 0131 } 0132 0133 // ------------------------------------------------------------------------- 0134 0135 BlendKBEffect::BlendKBEffect(PresentationKB* const parent, bool needFadeIn) 0136 : KBEffect(parent, needFadeIn) 0137 { 0138 m_img[0] = image(0); 0139 m_img[1] = nullptr; 0140 } 0141 0142 BlendKBEffect::~BlendKBEffect() 0143 { 0144 } 0145 0146 bool BlendKBEffect::done() 0147 { 0148 if (m_img[0]->m_pos >= 1.0) 0149 { 0150 m_img[0]->m_paint = false; 0151 swapImages(); 0152 0153 return true; 0154 } 0155 0156 return false; 0157 } 0158 0159 void BlendKBEffect::advanceTime(float step) 0160 { 0161 m_img[0]->m_pos += step; 0162 0163 if (m_img[0]->m_pos >= 1.0) 0164 { 0165 m_img[0]->m_pos = 1.0; 0166 } 0167 0168 if (m_img[1]) 0169 { 0170 m_img[1]->m_pos += step; 0171 } 0172 0173 if (m_needFadeIn && (m_img[0]->m_pos < 0.1)) 0174 { 0175 m_img[0]->m_opacity = m_img[0]->m_pos * 10; 0176 } 0177 else if (m_img[0]->m_pos > 0.9) 0178 { 0179 m_img[0]->m_opacity = (1.0 - m_img[0]->m_pos) * 10; 0180 0181 if (m_img[1] == nullptr) 0182 { 0183 setupNewImage(1); 0184 m_img[1] = image(1); 0185 m_img[1]->m_opacity = 1.0; 0186 } 0187 } 0188 else 0189 { 0190 m_img[0]->m_opacity = 1.0; 0191 } 0192 } 0193 0194 } // namespace DigikamGenericPresentationPlugin