From 36ae33349090621976b5234908a0dfc1f5ed7565 Mon Sep 17 00:00:00 2001 From: falkTX Date: Tue, 2 Aug 2022 00:56:54 +0100 Subject: [PATCH] Fix light mode nsvg cleanup Signed-off-by: falkTX --- dpf | 2 +- src/CardinalPlugin.cpp | 4 ++++ src/custom/dep.cpp | 25 ++++++++++++++++++++++++- 3 files changed, 29 insertions(+), 2 deletions(-) diff --git a/dpf b/dpf index 11e76be..1cc5641 160000 --- a/dpf +++ b/dpf @@ -1 +1 @@ -Subproject commit 11e76be7057c8b189a593ca328aa871fe61fc699 +Subproject commit 1cc5641ba765dcb22da32c66faf3a09f808bfb27 diff --git a/src/CardinalPlugin.cpp b/src/CardinalPlugin.cpp index 91b10df..b87e308 100644 --- a/src/CardinalPlugin.cpp +++ b/src/CardinalPlugin.cpp @@ -76,6 +76,7 @@ static const constexpr uint kCardinalStateCount = kCardinalStateBaseCount; namespace rack { namespace asset { std::string patchesPath(); +void destroy(); } namespace engine { void Engine_setAboutToClose(Engine*); @@ -290,6 +291,9 @@ struct Initializer INFO("Destroying plugins"); plugin::destroyStaticPlugins(); + INFO("Destroying colourized assets"); + asset::destroy(); + INFO("Destroying settings"); settings::destroy(); diff --git a/src/custom/dep.cpp b/src/custom/dep.cpp index d060b92..278368e 100644 --- a/src/custom/dep.cpp +++ b/src/custom/dep.cpp @@ -775,7 +775,7 @@ void nsvgDeleteCardinal(NSVGimage*); } struct ExtendedNSVGimage { - NSVGimage* handle; + NSVGimage* const handle; NSVGimage* handleOrig; NSVGimage* handleMOD; NSVGshape* shapesOrig; @@ -1088,3 +1088,26 @@ void switchDarkMode(const bool darkMode) std::memcpy(ext.handle, !darkMode ? ext.handleMOD : ext.handleOrig, sizeof(NSVGimage)); } } + +namespace rack { +namespace asset { + +void destroy() { + for (auto it = loadedDarkSVGs.begin(), end = loadedDarkSVGs.end(); it != end; ++it) + { + ExtendedNSVGimage& ext(*it); + deleteExtendedNSVGimage(ext); + } + + for (auto it = loadedLightSVGs.begin(), end = loadedLightSVGs.end(); it != end; ++it) + { + ExtendedNSVGimage& ext(*it); + deleteExtendedNSVGimage(ext); + } + + loadedDarkSVGs.clear(); + loadedLightSVGs.clear(); +} + +} +}