diff --git a/inc/thorvg.h b/inc/thorvg.h index c8dafafa..6475890e 100644 --- a/inc/thorvg.h +++ b/inc/thorvg.h @@ -157,9 +157,8 @@ public: Result reserve(uint32_t n) noexcept; virtual Result push(std::unique_ptr paint) noexcept; virtual Result clear() noexcept; - virtual Result update() noexcept; virtual Result update(Paint* paint) noexcept; - virtual Result draw(bool async = true) noexcept; + virtual Result draw() noexcept; virtual Result sync() noexcept; _TVG_DECLARE_ACCESSOR(Scene); diff --git a/inc/thorvg_capi.h b/inc/thorvg_capi.h index efb135b8..7189599b 100644 --- a/inc/thorvg_capi.h +++ b/inc/thorvg_capi.h @@ -117,7 +117,7 @@ TVG_EXPORT Tvg_Result tvg_canvas_reserve(Tvg_Canvas* canvas, uint32_t n); TVG_EXPORT Tvg_Result tvg_canvas_clear(Tvg_Canvas* canvas); TVG_EXPORT Tvg_Result tvg_canvas_update(Tvg_Canvas* canvas); TVG_EXPORT Tvg_Result tvg_canvas_update_paint(Tvg_Canvas* canvas, Tvg_Paint* paint); -TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas, unsigned char async); +TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas); TVG_EXPORT Tvg_Result tvg_canvas_sync(Tvg_Canvas* canvas); diff --git a/src/bindings/capi/tvgCapi.cpp b/src/bindings/capi/tvgCapi.cpp index 5c6fd59d..55fdecc7 100644 --- a/src/bindings/capi/tvgCapi.cpp +++ b/src/bindings/capi/tvgCapi.cpp @@ -104,7 +104,7 @@ TVG_EXPORT Tvg_Result tvg_canvas_clear(Tvg_Canvas* canvas) TVG_EXPORT Tvg_Result tvg_canvas_update(Tvg_Canvas* canvas) { - return (Tvg_Result) reinterpret_cast(canvas)->update(); + return (Tvg_Result) reinterpret_cast(canvas)->update(nullptr); } @@ -114,9 +114,9 @@ TVG_EXPORT Tvg_Result tvg_canvas_update_paint(Tvg_Canvas* canvas, Tvg_Paint* pai } -TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas, unsigned char async) +TVG_EXPORT Tvg_Result tvg_canvas_draw(Tvg_Canvas* canvas) { - return (Tvg_Result) reinterpret_cast(canvas)->draw(async); + return (Tvg_Result) reinterpret_cast(canvas)->draw(); } diff --git a/src/lib/tvgCanvas.cpp b/src/lib/tvgCanvas.cpp index d110aee5..e9db4610 100644 --- a/src/lib/tvgCanvas.cpp +++ b/src/lib/tvgCanvas.cpp @@ -53,18 +53,12 @@ Result Canvas::clear() noexcept } -Result Canvas::draw(bool async) noexcept +Result Canvas::draw() noexcept { return IMPL->draw(); } -Result Canvas::update() noexcept -{ - return IMPL->update(); -} - - Result Canvas::update(Paint* paint) noexcept { return IMPL->update(paint); diff --git a/src/lib/tvgCanvasImpl.h b/src/lib/tvgCanvasImpl.h index 5960f02c..77af3d57 100644 --- a/src/lib/tvgCanvasImpl.h +++ b/src/lib/tvgCanvasImpl.h @@ -71,11 +71,12 @@ struct Canvas::Impl return Result::Success; } - Result update() + Result update(Paint* paint) { if (!renderer) return Result::InsufficientCondition; - for(auto paint: paints) { + //Update single paint node + if (paint) { if (paint->id() == PAINT_ID_SCENE) { //We know renderer type, avoid dynamic_cast for performance. auto scene = static_cast(paint); @@ -84,21 +85,18 @@ struct Canvas::Impl auto shape = static_cast(paint); if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition; } - } - return Result::Success; - } - - Result update(Paint* paint) - { - if (!renderer) return Result::InsufficientCondition; - - if (paint->id() == PAINT_ID_SCENE) { - //We know renderer type, avoid dynamic_cast for performance. - auto scene = static_cast(paint); - if (!SCENE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition; + //Update retained all paint nodes } else { - auto shape = static_cast(paint); - if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition; + for(auto paint: paints) { + if (paint->id() == PAINT_ID_SCENE) { + //We know renderer type, avoid dynamic_cast for performance. + auto scene = static_cast(paint); + if (!SCENE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition; + } else { + auto shape = static_cast(paint); + if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition; + } + } } return Result::Success; } diff --git a/test/testCapi.c b/test/testCapi.c index 5b8b91bc..6a46e97e 100644 --- a/test/testCapi.c +++ b/test/testCapi.c @@ -26,7 +26,7 @@ void testCapi() tvg_shape_fill_color(shape, 255, 255, 0, 255); tvg_canvas_push(canvas, shape); - tvg_canvas_draw(canvas, 1); + tvg_canvas_draw(canvas); tvg_canvas_sync(canvas); tvg_canvas_destroy(canvas);