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 #ifndef DIGIKAM_KB_EFFECT_H
0020 #define DIGIKAM_KB_EFFECT_H
0021 
0022 // Qt includes
0023 
0024 #include <QObject>
0025 
0026 namespace DigikamGenericPresentationPlugin
0027 {
0028 
0029 class KBImage;
0030 class PresentationKB;
0031 
0032 class KBEffect
0033 {
0034 
0035 public:
0036 
0037     typedef enum
0038     {
0039         Fade,
0040         Blend
0041     } Type;
0042 
0043 public:
0044 
0045     explicit KBEffect(PresentationKB* const parent, bool m_needFadeIn = true);
0046     virtual ~KBEffect()                  = default;
0047 
0048     virtual bool fadeIn()       const
0049     {
0050         return m_needFadeIn;
0051     };
0052 
0053     virtual void advanceTime(float step) = 0;
0054     virtual Type type()                  = 0;
0055     virtual bool done()                  = 0;
0056 
0057     static Type chooseKBEffect(Type oldType);
0058 
0059 protected:
0060 
0061     void     setupNewImage(int img);
0062     void     swapImages();
0063     KBImage* image(int img)     const;
0064 
0065 protected:
0066 
0067     static int      m_numKBEffectRepeated;
0068     bool            m_needFadeIn  = false;
0069     KBImage*        m_img[2];;
0070 
0071 private:
0072 
0073     PresentationKB* m_slideWidget = nullptr;
0074 
0075 private:
0076 
0077     Q_DISABLE_COPY(KBEffect)
0078 };
0079 
0080 // -------------------------------------------------------------------------
0081 
0082 class FadeKBEffect: public KBEffect
0083 {
0084 
0085 public:
0086 
0087     explicit FadeKBEffect(PresentationKB* const parent, bool m_needFadeIn = true);
0088     ~FadeKBEffect()              override;
0089 
0090     Type type()                  override
0091     {
0092         return Fade;
0093     };
0094 
0095     void advanceTime(float step) override;
0096     bool done()                  override;
0097 
0098 private:
0099 
0100     Q_DISABLE_COPY(FadeKBEffect)
0101 };
0102 
0103 // -------------------------------------------------------------------------
0104 
0105 class BlendKBEffect: public KBEffect
0106 {
0107 
0108 public:
0109 
0110     explicit BlendKBEffect(PresentationKB* const parent, bool m_needFadeIn = true);
0111     ~BlendKBEffect()             override;
0112 
0113     Type type()                  override
0114     {
0115         return Blend;
0116     };
0117 
0118     void advanceTime(float step) override;
0119     bool done()                  override;
0120 
0121 private:
0122 
0123     Q_DISABLE_COPY(BlendKBEffect)
0124 };
0125 
0126 } // namespace DigikamGenericPresentationPlugin
0127 
0128 #endif // DIGIKAM°KB_EFFECT_H