diff --git a/inc/thorvg.h b/inc/thorvg.h index e3396479..5b42f399 100644 --- a/inc/thorvg.h +++ b/inc/thorvg.h @@ -148,7 +148,7 @@ public: Result reserve(uint32_t n) noexcept; virtual Result push(std::unique_ptr paint) noexcept; - virtual Result clear() noexcept; + virtual Result clear(bool free = true) noexcept; virtual Result update(Paint* paint) noexcept; virtual Result draw() noexcept; virtual Result sync() noexcept; diff --git a/src/lib/tvgBezier.cpp b/src/lib/tvgBezier.cpp index e597159c..06f593ea 100644 --- a/src/lib/tvgBezier.cpp +++ b/src/lib/tvgBezier.cpp @@ -147,4 +147,4 @@ void bezSplitAt(const Bezier& cur, float at, Bezier& left, Bezier& right) bezSplitLeft(right, t, left); } -} +} \ No newline at end of file diff --git a/src/lib/tvgCanvas.cpp b/src/lib/tvgCanvas.cpp index eb08768e..86b5e162 100644 --- a/src/lib/tvgCanvas.cpp +++ b/src/lib/tvgCanvas.cpp @@ -49,9 +49,9 @@ Result Canvas::push(unique_ptr paint) noexcept } -Result Canvas::clear() noexcept +Result Canvas::clear(bool free) noexcept { - return pImpl->clear(); + return pImpl->clear(free); } diff --git a/src/lib/tvgCanvasImpl.h b/src/lib/tvgCanvasImpl.h index 2aeef06d..06a54af2 100644 --- a/src/lib/tvgCanvasImpl.h +++ b/src/lib/tvgCanvasImpl.h @@ -40,7 +40,7 @@ struct Canvas::Impl ~Impl() { - clear(); + clear(true); delete(renderer); } @@ -53,16 +53,19 @@ struct Canvas::Impl return update(p); } - Result clear() + Result clear(bool free) { if (!renderer) return Result::InsufficientCondition; //Clear render target before drawing if (!renderer->clear()) return Result::InsufficientCondition; - for (auto paint : paints) { - paint->pImpl->dispose(*renderer); - delete(paint); + //free paints + if (free) { + for (auto paint : paints) { + paint->pImpl->dispose(*renderer); + delete(paint); + } } paints.clear(); @@ -79,7 +82,7 @@ struct Canvas::Impl //Update single paint node if (paint) { paint->pImpl->update(*renderer, nullptr, compList, RenderUpdateFlag::None); - //Update retained all paint nodes + //Update all retained paint nodes } else { for (auto paint: paints) { paint->pImpl->update(*renderer, nullptr, compList, RenderUpdateFlag::None); diff --git a/src/lib/tvgPaint.h b/src/lib/tvgPaint.h index b84a7e1a..2c4a63d1 100644 --- a/src/lib/tvgPaint.h +++ b/src/lib/tvgPaint.h @@ -123,7 +123,7 @@ namespace tvg bool dispose(RenderMethod& renderer) { - if (this->compTarget) this->compTarget->pImpl->dispose(renderer); + if (compTarget) compTarget->pImpl->dispose(renderer); return smethod->dispose(renderer); }