From bf534cf29fee904e03d953b5af167c51bf56bee8 Mon Sep 17 00:00:00 2001 From: Rodney Date: Apr 26 2023 14:29:10 +0000 Subject: Merge pull request #4853 from shun-iwasawa/fix_clear_unfinished_preview Fix viewer preview fails to restart after canceling while rendering --- diff --git a/toonz/sources/toonz/previewer.cpp b/toonz/sources/toonz/previewer.cpp index 8ec40c6..0902d94 100644 --- a/toonz/sources/toonz/previewer.cpp +++ b/toonz/sources/toonz/previewer.cpp @@ -1281,6 +1281,17 @@ bool Previewer::isFrameReady(int frame) const { //----------------------------------------------------------------------------- +void Previewer::clearAllUnfinishedFrames() { + for (int f = 0; f < m_imp->m_pbStatus.size(); f++) { + if (m_imp->m_pbStatus[f] == FlipSlider::PBFrameStarted) { + m_imp->remove(f); + } + } + m_imp->updateProgressBarStatus(); +} + +//----------------------------------------------------------------------------- + bool Previewer::isActive() const { return !m_imp->m_listeners.empty(); } //----------------------------------------------------------------------------- diff --git a/toonz/sources/toonz/previewer.h b/toonz/sources/toonz/previewer.h index 6cb270e..046ec38 100644 --- a/toonz/sources/toonz/previewer.h +++ b/toonz/sources/toonz/previewer.h @@ -88,6 +88,8 @@ public: std::vector &getProgressBarStatus() const; + void clearAllUnfinishedFrames(); + private: friend class Imp; void emitStartedFrame(const TRenderPort::RenderData &renderData); diff --git a/toonz/sources/toonz/sceneviewer.cpp b/toonz/sources/toonz/sceneviewer.cpp index ca4e52c..d22e441 100644 --- a/toonz/sources/toonz/sceneviewer.cpp +++ b/toonz/sources/toonz/sceneviewer.cpp @@ -948,9 +948,12 @@ void SceneViewer::enablePreview(int previewMode) { emit freezeStateChanged(false); } - if (m_previewMode != NO_PREVIEW) + if (m_previewMode != NO_PREVIEW) { Previewer::instance(m_previewMode == SUBCAMERA_PREVIEW) ->removeListener(this); + Previewer::instance(m_previewMode == SUBCAMERA_PREVIEW) + ->clearAllUnfinishedFrames(); + } m_previewMode = previewMode;