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
This commit is contained in:
Hermet Park 2020-07-30 13:40:18 +09:00
parent 8ed9edd33e
commit 80d47fd7d3
6 changed files with 21 additions and 30 deletions

View file

@ -157,9 +157,8 @@ public:
Result reserve(uint32_t n) noexcept; Result reserve(uint32_t n) noexcept;
virtual Result push(std::unique_ptr<Paint> paint) noexcept; virtual Result push(std::unique_ptr<Paint> paint) noexcept;
virtual Result clear() noexcept; virtual Result clear() noexcept;
virtual Result update() noexcept;
virtual Result update(Paint* paint) noexcept; virtual Result update(Paint* paint) noexcept;
virtual Result draw(bool async = true) noexcept; virtual Result draw() noexcept;
virtual Result sync() noexcept; virtual Result sync() noexcept;
_TVG_DECLARE_ACCESSOR(Scene); _TVG_DECLARE_ACCESSOR(Scene);

View file

@ -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_clear(Tvg_Canvas* canvas);
TVG_EXPORT Tvg_Result tvg_canvas_update(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_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); TVG_EXPORT Tvg_Result tvg_canvas_sync(Tvg_Canvas* canvas);

View file

@ -104,7 +104,7 @@ 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(Tvg_Canvas* canvas)
{ {
return (Tvg_Result) reinterpret_cast<Canvas*>(canvas)->update(); return (Tvg_Result) reinterpret_cast<Canvas*>(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*>(canvas)->draw(async); return (Tvg_Result) reinterpret_cast<Canvas*>(canvas)->draw();
} }

View file

@ -53,18 +53,12 @@ Result Canvas::clear() noexcept
} }
Result Canvas::draw(bool async) noexcept Result Canvas::draw() noexcept
{ {
return IMPL->draw(); return IMPL->draw();
} }
Result Canvas::update() noexcept
{
return IMPL->update();
}
Result Canvas::update(Paint* paint) noexcept Result Canvas::update(Paint* paint) noexcept
{ {
return IMPL->update(paint); return IMPL->update(paint);

View file

@ -71,11 +71,12 @@ struct Canvas::Impl
return Result::Success; return Result::Success;
} }
Result update() Result update(Paint* paint)
{ {
if (!renderer) return Result::InsufficientCondition; if (!renderer) return Result::InsufficientCondition;
for(auto paint: paints) { //Update single paint node
if (paint) {
if (paint->id() == PAINT_ID_SCENE) { if (paint->id() == PAINT_ID_SCENE) {
//We know renderer type, avoid dynamic_cast for performance. //We know renderer type, avoid dynamic_cast for performance.
auto scene = static_cast<Scene*>(paint); auto scene = static_cast<Scene*>(paint);
@ -84,21 +85,18 @@ struct Canvas::Impl
auto shape = static_cast<Shape*>(paint); auto shape = static_cast<Shape*>(paint);
if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition; if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
} }
} //Update retained all paint nodes
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<Scene*>(paint);
if (!SCENE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
} else { } else {
auto shape = static_cast<Shape*>(paint); for(auto paint: paints) {
if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition; if (paint->id() == PAINT_ID_SCENE) {
//We know renderer type, avoid dynamic_cast for performance.
auto scene = static_cast<Scene*>(paint);
if (!SCENE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
} else {
auto shape = static_cast<Shape*>(paint);
if (!SHAPE_IMPL->update(*renderer, nullptr, RenderUpdateFlag::None)) return Result::InsufficientCondition;
}
}
} }
return Result::Success; return Result::Success;
} }

View file

@ -26,7 +26,7 @@ void testCapi()
tvg_shape_fill_color(shape, 255, 255, 0, 255); tvg_shape_fill_color(shape, 255, 255, 0, 255);
tvg_canvas_push(canvas, shape); tvg_canvas_push(canvas, shape);
tvg_canvas_draw(canvas, 1); tvg_canvas_draw(canvas);
tvg_canvas_sync(canvas); tvg_canvas_sync(canvas);
tvg_canvas_destroy(canvas); tvg_canvas_destroy(canvas);