From 80d47fd7d342828ab06bc710ee234514552f9fbb Mon Sep 17 00:00:00 2001 From: Hermet Park Date: Thu, 30 Jul 2020 13:40:18 +0900 Subject: [PATCH] common: revise canvas interfaces. 1. removed async option which doesn't work currently, rather than it, we can add async option in initiailizer class. 2. removed update() method. Instead, we can call update(paint = nullptr); which has exactly same behavior. Change-Id: I7909a50d804b97baf413a2ff6365a3cf79a3689e --- inc/thorvg.h | 3 +-- inc/thorvg_capi.h | 2 +- src/bindings/capi/tvgCapi.cpp | 6 +++--- src/lib/tvgCanvas.cpp | 8 +------- src/lib/tvgCanvasImpl.h | 30 ++++++++++++++---------------- test/testCapi.c | 2 +- 6 files changed, 21 insertions(+), 30 deletions(-) diff --git a/inc/thorvg.h b/inc/thorvg.h index c8dafaf..6475890 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 efb135b..7189599 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 5c6fd59..55fdecc 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 d110aee..e9db461 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 5960f02..77af3d5 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 5b8b91b..6a46e97 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); -- 2.7.4