mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-07 21:23:32 +00:00
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:
parent
c923d881aa
commit
a8864390e2
7 changed files with 25 additions and 26 deletions
|
@ -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;
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
|
|
@ -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());
|
||||
|
|
Loading…
Add table
Reference in a new issue