File indexing completed on 2024-03-24 04:00:40
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"