diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/animationlayer.cpp | 21 | ||||
| -rw-r--r-- | src/animationlayer.h | 2 | ||||
| -rw-r--r-- | src/courtroom.cpp | 4 |
3 files changed, 22 insertions, 5 deletions
diff --git a/src/animationlayer.cpp b/src/animationlayer.cpp index a21e20c..708aef2 100644 --- a/src/animationlayer.cpp +++ b/src/animationlayer.cpp @@ -143,6 +143,11 @@ void AnimationLayer::jumpToFrame(int number) } } +bool AnimationLayer::isPlayOnce() +{ + return m_play_once; +} + void AnimationLayer::setPlayOnce(bool enabled) { m_play_once = enabled; @@ -324,6 +329,7 @@ void AnimationLayer::frameTicker() return; } + stopPlayback(); return; } @@ -595,11 +601,20 @@ void BackgroundAnimationLayer::loadAndPlayAnimation(QString fileName) } #endif - setFileName(file_path); + bool is_different_file = file_path != this->fileName(); + if (is_different_file) + { + setFileName(file_path); + } + VPath design_path = ao_app->get_background_path("design.ini"); setTransformationMode(ao_app->get_scaling(ao_app->read_design_ini("scaling", design_path))); setStretchToFit(ao_app->read_design_ini("stretch", design_path).startsWith("true")); - startPlayback(); + + if (is_different_file) + { + startPlayback(); + } } SplashAnimationLayer::SplashAnimationLayer(AOApplication *ao_app, QWidget *parent) @@ -640,7 +655,7 @@ void EffectAnimationLayer::setHideWhenStopped(bool enabled) void EffectAnimationLayer::maybeHide() { - if (m_hide_when_stopped) + if (m_hide_when_stopped && isPlayOnce()) { hide(); } diff --git a/src/animationlayer.h b/src/animationlayer.h index c67f702..820703d 100644 --- a/src/animationlayer.h +++ b/src/animationlayer.h @@ -62,6 +62,8 @@ public: int currentFrameNumber(); void jumpToFrame(int number); + bool isPlayOnce(); + void setPlayOnce(bool enabled); void setStretchToFit(bool enabled); void setResetCacheWhenStopped(bool enabled); diff --git a/src/courtroom.cpp b/src/courtroom.cpp index 1346797..4540c27 100644 --- a/src/courtroom.cpp +++ b/src/courtroom.cpp @@ -3157,6 +3157,8 @@ void Courtroom::do_effect(QString fx_path, QString fx_sound, QString p_char, QSt QString effect = ao_app->get_effect(fx_path, p_char, p_folder); if (effect == "") { + ui_vp_effect->stopPlayback(); + ui_vp_effect->hide(); return; } @@ -3173,8 +3175,6 @@ void Courtroom::do_effect(QString fx_path, QString fx_sound, QString p_char, QSt ui_vp_effect->setTransformationMode(ao_app->get_scaling(ao_app->get_effect_property(fx_path, p_char, p_folder, "scaling"))); ui_vp_effect->setStretchToFit(ao_app->get_effect_property(fx_path, p_char, p_folder, "stretch").startsWith("true")); ui_vp_effect->setFlipped(ao_app->get_effect_property(fx_path, p_char, p_folder, "respect_flip").startsWith("true") && m_chatmessage[FLIP].toInt() == 1); - ui_vp_effect->setPlayOnce(false); // The effects themselves dictate whether or not they're looping. - // Static effects will linger. bool looping = ao_app->get_effect_property(fx_path, p_char, p_folder, "loop").startsWith("true"); |
