File indexing completed on 2024-05-05 04:02:27

0001 /******************************************************************************
0002 *   KBlocks, a falling blocks game by KDE                                     *
0003 *   SPDX-FileCopyrightText: 2009-2021 Mauricio Piacentini <mauricio@tabuleiro.com>      *
0004 *                           Zhongjie Cai <squall.leonhart.cai@gmail.com>      *
0005 *                           Julian Helfferich <julian.helfferich@mailbox.org> *
0006 *                                                                             *
0007 *   SPDX-License-Identifier: GPL-2.0-or-later
0008 ******************************************************************************/
0009 #include "KBlocksAnimator.h"
0010 
0011 #include "SvgItemInterface.h"
0012 
0013 KBlocksAnimator::KBlocksAnimator()
0014 {
0015 }
0016 
0017 KBlocksAnimator::~KBlocksAnimator()
0018 {
0019     if (mpAnimDrop) {
0020         delete mpAnimDrop;
0021         mpAnimDrop = nullptr;
0022     }
0023     if (mpAnimFade) {
0024         delete mpAnimFade;
0025         mpAnimFade = nullptr;
0026     }
0027 }
0028 
0029 bool KBlocksAnimator::createFadeAnim(const QList<SvgItemInterface *> &items, int duration, QTimeLine::Direction direction)
0030 {
0031     if (mpAnimFade) {
0032         return false;
0033     }
0034 
0035     mpAnimFade = new KBlocksAnimFade(items, duration, direction);
0036 
0037     if (direction == QTimeLine::Forward) {
0038         connect(mpAnimFade, &KBlocksAnimFade::animationFinished, this, &KBlocksAnimator::endFadeInAnim);
0039     } else {
0040         connect(mpAnimFade, &KBlocksAnimFade::animationFinished, this, &KBlocksAnimator::endFadeOutAnim);
0041     }
0042 
0043     return true;
0044 }
0045 
0046 bool KBlocksAnimator::deleteFadeAnim()
0047 {
0048     if (mpAnimFade) {
0049         delete mpAnimFade;
0050         mpAnimFade = nullptr;
0051         return true;
0052     }
0053     return false;
0054 }
0055 
0056 KBlocksAnimFade *KBlocksAnimator::getFadeAnim()
0057 {
0058     return mpAnimFade;
0059 }
0060 
0061 bool KBlocksAnimator::createDropAnim(const QList<SvgItemInterface *> &items, int duration, QTimeLine::Direction direction)
0062 {
0063     if (mpAnimDrop) {
0064         return false;
0065     }
0066 
0067     mpAnimDrop = new KBlocksAnimDrop(items, duration, direction);
0068 
0069     connect(mpAnimDrop, &KBlocksAnimDrop::animationFinished, this, &KBlocksAnimator::endDropAnim);
0070 
0071     return true;
0072 }
0073 
0074 bool KBlocksAnimator::deleteDropAnim()
0075 {
0076     if (mpAnimDrop) {
0077         delete mpAnimDrop;
0078         mpAnimDrop = nullptr;
0079         return true;
0080     }
0081     return false;
0082 }
0083 
0084 KBlocksAnimDrop *KBlocksAnimator::getDropAnim()
0085 {
0086     return mpAnimDrop;
0087 }
0088 
0089 void KBlocksAnimator::endFadeInAnim()
0090 {
0091     Q_EMIT animFinished(KBlocks_Animation_Fade_In);
0092 }
0093 
0094 void KBlocksAnimator::endFadeOutAnim()
0095 {
0096     Q_EMIT animFinished(KBlocks_Animation_Fade_Out);
0097 }
0098 
0099 void KBlocksAnimator::endDropAnim()
0100 {
0101     Q_EMIT animFinished(KBlocks_Animation_Drop);
0102 }
0103 
0104 #include "moc_KBlocksAnimator.cpp"