canvas: code refactoring

accept an extra argument in the clear() to clear paints node

and clear buffer selectively.

Change-Id: I83721e74358f546f325bb03fd1f36c7565174dd7
This commit is contained in:
Hermet Park 2020-05-02 11:14:14 +09:00
parent c923d881aa
commit a8864390e2
7 changed files with 25 additions and 26 deletions

View file

@ -92,7 +92,7 @@ public:
int reserve(size_t n) noexcept;
virtual int push(std::unique_ptr<PaintNode> paint) noexcept;
virtual int clear() noexcept;
virtual int clear(bool clearPaints = true) noexcept;
virtual int update() noexcept;
virtual int draw(bool async = true) noexcept;
virtual int sync() = 0;
@ -179,7 +179,6 @@ class TIZENVG_EXPORT SwCanvas final : public Canvas
public:
~SwCanvas();
int clear() noexcept override;
int target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept;
int sync() noexcept override;
static std::unique_ptr<SwCanvas> gen() noexcept;

View file

@ -35,6 +35,11 @@ struct GlShape
/* External Class Implementation */
/************************************************************************/
bool GlRenderer::clear()
{
return true;
}
bool GlRenderer::render(const ShapeNode& shape, void *data)
{
GlShape* sdata = static_cast<GlShape*>(data);

View file

@ -26,6 +26,7 @@ public:
void* prepare(const ShapeNode& shape, void* data, UpdateFlag flags) override;
bool dispose(const ShapeNode& shape, void *data) override;
bool render(const ShapeNode& shape, void *data) override;
bool clear() override;
size_t ref() override;
size_t unref() override;

View file

@ -26,7 +26,7 @@ public:
bool dispose(const ShapeNode& shape, void *data) override;
bool render(const ShapeNode& shape, void *data) override;
bool target(uint32_t* buffer, size_t stride, size_t w, size_t h);
bool clear();
bool clear() override;
size_t ref() override;
size_t unref() override;

View file

@ -36,7 +36,7 @@ struct Canvas::Impl
~Impl()
{
clear();
clearPaints();
renderer->unref();
}
@ -55,23 +55,27 @@ struct Canvas::Impl
return node->update(renderer);
}
int clear()
bool clearRender()
{
assert(renderer);
return renderer->clear());
}
auto ret = 0;
int clearPaints()
{
assert(renderer);
for (auto node : nodes) {
if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) {
cout << "TODO: " << scene << endl;
} else if (ShapeNode *shape = dynamic_cast<ShapeNode *>(node)) {
ret |= renderer->dispose(*shape, shape->engine());
if (!renderer->dispose(*shape, shape->engine())) return -1;
}
delete(node);
}
nodes.clear();
return ret;
return 0;
}
int update()
@ -91,16 +95,14 @@ struct Canvas::Impl
{
assert(renderer);
auto ret = 0;
for(auto node: nodes) {
if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) {
cout << "TODO: " << scene << endl;
} else if (ShapeNode *shape = dynamic_cast<ShapeNode *>(node)) {
ret |= renderer->render(*shape, shape->engine());
if (!renderer->render(*shape, shape->engine())) return -1;
}
}
return ret;
return 0;
}
};
@ -137,11 +139,14 @@ int Canvas::push(unique_ptr<PaintNode> paint) noexcept
}
int Canvas::clear() noexcept
int Canvas::clear(bool clearPaints) noexcept
{
auto impl = pImpl.get();
assert(impl);
return impl->clear();
auto ret = 0;
if (clearPaints) ret |= impl->clearPaints();
ret |= impl->clearRender();
return ret;
}

View file

@ -36,6 +36,7 @@ public:
virtual void* prepare(const ShapeNode& shape, void* data, UpdateFlag flags) = 0;
virtual bool dispose(const ShapeNode& shape, void *data) = 0;
virtual bool render(const ShapeNode& shape, void *data) = 0;
virtual bool clear() = 0;
virtual size_t ref() = 0;
virtual size_t unref() = 0;
};

View file

@ -44,18 +44,6 @@ SwCanvas::~SwCanvas()
{
}
int SwCanvas::clear() noexcept
{
auto renderer = dynamic_cast<SwRenderer*>(engine());
assert(renderer);
if (!renderer->clear()) return -1;
return Canvas::clear();
}
int SwCanvas::target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept
{
auto renderer = dynamic_cast<SwRenderer*>(engine());