File indexing completed on 2024-04-21 07:44:56

0001 /*
0002     SPDX-FileCopyrightText: 2013 Dominik Haumann <dhaumann@kde.org>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "kateanimation.h"
0008 
0009 #include "katefadeeffect.h"
0010 #include "kateglobal.h"
0011 
0012 #include <KMessageWidget>
0013 
0014 #include <QStyle>
0015 #include <QTimer>
0016 
0017 KateAnimation::KateAnimation(KMessageWidget *widget, EffectType effect)
0018     : QObject(widget)
0019     , m_widget(widget)
0020     , m_fadeEffect(nullptr)
0021 {
0022     Q_ASSERT(m_widget != nullptr);
0023 
0024     // create wanted effect
0025     if (effect == FadeEffect) {
0026         m_fadeEffect = new KateFadeEffect(widget);
0027 
0028         connect(m_fadeEffect, &KateFadeEffect::hideAnimationFinished, this, &KateAnimation::widgetHidden);
0029         connect(m_fadeEffect, &KateFadeEffect::showAnimationFinished, this, &KateAnimation::widgetShown);
0030     } else {
0031         connect(m_widget.data(), &KMessageWidget::hideAnimationFinished, this, &KateAnimation::widgetHidden);
0032         connect(m_widget.data(), &KMessageWidget::showAnimationFinished, this, &KateAnimation::widgetShown);
0033     }
0034 }
0035 
0036 bool KateAnimation::isHideAnimationRunning() const
0037 {
0038     return m_fadeEffect ? m_fadeEffect->isHideAnimationRunning() : m_widget->isHideAnimationRunning();
0039 }
0040 
0041 bool KateAnimation::isShowAnimationRunning() const
0042 {
0043     return m_fadeEffect ? m_fadeEffect->isShowAnimationRunning() : m_widget->isShowAnimationRunning();
0044 }
0045 
0046 void KateAnimation::show()
0047 {
0048     Q_ASSERT(m_widget != nullptr);
0049 
0050     // show according to effects config
0051     if (m_widget->style()->styleHint(QStyle::SH_Widget_Animate, nullptr, m_widget)) {
0052         // launch show effect
0053         // NOTE: use a singleShot timer to avoid resizing issues when showing the message widget the first time (bug #316666)
0054         if (m_fadeEffect) {
0055             QTimer::singleShot(0, m_fadeEffect, &KateFadeEffect::fadeIn);
0056         } else {
0057             QTimer::singleShot(0, m_widget.data(), &KMessageWidget::animatedShow);
0058         }
0059     } else {
0060         m_widget->show();
0061         Q_EMIT widgetShown();
0062     }
0063 }
0064 
0065 void KateAnimation::hide()
0066 {
0067     Q_ASSERT(m_widget != nullptr);
0068 
0069     // hide according to effects config
0070     if (m_widget->style()->styleHint(QStyle::SH_Widget_Animate, nullptr, m_widget)
0071         || KTextEditor::EditorPrivate::unitTestMode() // due to timing issues in the unit test
0072     ) {
0073         // hide depending on effect
0074         if (m_fadeEffect) {
0075             m_fadeEffect->fadeOut();
0076         } else {
0077             m_widget->animatedHide();
0078         }
0079     } else {
0080         m_widget->hide();
0081         Q_EMIT widgetHidden();
0082     }
0083 }
0084 
0085 #include "moc_kateanimation.cpp"