diff --git a/src/lib/tvgCanvas.cpp b/src/lib/tvgCanvas.cpp index b1b8b265..2e20ccb1 100644 --- a/src/lib/tvgCanvas.cpp +++ b/src/lib/tvgCanvas.cpp @@ -63,7 +63,7 @@ Result Canvas::draw() noexcept Result Canvas::update(Paint* paint) noexcept { - return pImpl->update(paint); + return pImpl->update(paint, false); } @@ -72,4 +72,4 @@ Result Canvas::sync() noexcept if (pImpl->renderer->sync()) return Result::Success; return Result::InsufficientCondition; -} \ No newline at end of file +} diff --git a/src/lib/tvgCanvasImpl.h b/src/lib/tvgCanvasImpl.h index ef63238d..6eb3319a 100644 --- a/src/lib/tvgCanvasImpl.h +++ b/src/lib/tvgCanvasImpl.h @@ -31,7 +31,7 @@ struct Canvas::Impl { Array paints; - RenderMethod* renderer; + RenderMethod* renderer; Impl(RenderMethod* pRenderer):renderer(pRenderer) { @@ -49,7 +49,7 @@ struct Canvas::Impl if (!p) return Result::MemoryCorruption; paints.push(p); - return update(p); + return update(p, true); } Result clear(bool free) @@ -72,19 +72,20 @@ struct Canvas::Impl return Result::Success; } - Result update(Paint* paint) + Result update(Paint* paint, bool force) { if (!renderer) return Result::InsufficientCondition; Array clips; + auto flag = force ? RenderUpdateFlag::All : RenderUpdateFlag::None; //Update single paint node if (paint) { - paint->pImpl->update(*renderer, nullptr, 255, clips, RenderUpdateFlag::None); + paint->pImpl->update(*renderer, nullptr, 255, clips, flag); //Update all retained paint nodes } else { for (auto paint = paints.data; paint < (paints.data + paints.count); ++paint) { - (*paint)->pImpl->update(*renderer, nullptr, 255, clips, RenderUpdateFlag::None); + (*paint)->pImpl->update(*renderer, nullptr, 255, clips, flag); } } return Result::Success; diff --git a/src/lib/tvgPictureImpl.h b/src/lib/tvgPictureImpl.h index fed1d127..35945d6d 100644 --- a/src/lib/tvgPictureImpl.h +++ b/src/lib/tvgPictureImpl.h @@ -49,13 +49,14 @@ struct Picture::Impl if (paint) { paint->pImpl->dispose(renderer); delete(paint); - return true; } else if (pixels) { - return renderer.dispose(rdata); + auto ret = renderer.dispose(rdata); + rdata = nullptr; + return ret; } - return false; + return true; } void resize() diff --git a/src/lib/tvgShapeImpl.h b/src/lib/tvgShapeImpl.h index 9a81d0c6..14f911e0 100644 --- a/src/lib/tvgShapeImpl.h +++ b/src/lib/tvgShapeImpl.h @@ -215,7 +215,9 @@ struct Shape::Impl bool dispose(RenderMethod& renderer) { - return renderer.dispose(rdata); + auto ret = renderer.dispose(rdata); + rdata = nullptr; + return ret; } bool render(RenderMethod& renderer)