mirror of
https://github.com/thorvg/thorvg.git
synced 2025-06-08 13:43:43 +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;
|
int reserve(size_t n) noexcept;
|
||||||
virtual int push(std::unique_ptr<PaintNode> paint) 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 update() noexcept;
|
||||||
virtual int draw(bool async = true) noexcept;
|
virtual int draw(bool async = true) noexcept;
|
||||||
virtual int sync() = 0;
|
virtual int sync() = 0;
|
||||||
|
@ -179,7 +179,6 @@ class TIZENVG_EXPORT SwCanvas final : public Canvas
|
||||||
public:
|
public:
|
||||||
~SwCanvas();
|
~SwCanvas();
|
||||||
|
|
||||||
int clear() noexcept override;
|
|
||||||
int target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept;
|
int target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept;
|
||||||
int sync() noexcept override;
|
int sync() noexcept override;
|
||||||
static std::unique_ptr<SwCanvas> gen() noexcept;
|
static std::unique_ptr<SwCanvas> gen() noexcept;
|
||||||
|
|
|
@ -35,6 +35,11 @@ struct GlShape
|
||||||
/* External Class Implementation */
|
/* External Class Implementation */
|
||||||
/************************************************************************/
|
/************************************************************************/
|
||||||
|
|
||||||
|
bool GlRenderer::clear()
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
bool GlRenderer::render(const ShapeNode& shape, void *data)
|
bool GlRenderer::render(const ShapeNode& shape, void *data)
|
||||||
{
|
{
|
||||||
GlShape* sdata = static_cast<GlShape*>(data);
|
GlShape* sdata = static_cast<GlShape*>(data);
|
||||||
|
|
|
@ -26,6 +26,7 @@ public:
|
||||||
void* prepare(const ShapeNode& shape, void* data, UpdateFlag flags) override;
|
void* prepare(const ShapeNode& shape, void* data, UpdateFlag flags) override;
|
||||||
bool dispose(const ShapeNode& shape, void *data) override;
|
bool dispose(const ShapeNode& shape, void *data) override;
|
||||||
bool render(const ShapeNode& shape, void *data) override;
|
bool render(const ShapeNode& shape, void *data) override;
|
||||||
|
bool clear() override;
|
||||||
size_t ref() override;
|
size_t ref() override;
|
||||||
size_t unref() override;
|
size_t unref() override;
|
||||||
|
|
||||||
|
|
|
@ -26,7 +26,7 @@ public:
|
||||||
bool dispose(const ShapeNode& shape, void *data) override;
|
bool dispose(const ShapeNode& shape, void *data) override;
|
||||||
bool render(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 target(uint32_t* buffer, size_t stride, size_t w, size_t h);
|
||||||
bool clear();
|
bool clear() override;
|
||||||
size_t ref() override;
|
size_t ref() override;
|
||||||
size_t unref() override;
|
size_t unref() override;
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ struct Canvas::Impl
|
||||||
|
|
||||||
~Impl()
|
~Impl()
|
||||||
{
|
{
|
||||||
clear();
|
clearPaints();
|
||||||
renderer->unref();
|
renderer->unref();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -55,23 +55,27 @@ struct Canvas::Impl
|
||||||
return node->update(renderer);
|
return node->update(renderer);
|
||||||
}
|
}
|
||||||
|
|
||||||
int clear()
|
bool clearRender()
|
||||||
{
|
{
|
||||||
assert(renderer);
|
assert(renderer);
|
||||||
|
return renderer->clear());
|
||||||
|
}
|
||||||
|
|
||||||
auto ret = 0;
|
int clearPaints()
|
||||||
|
{
|
||||||
|
assert(renderer);
|
||||||
|
|
||||||
for (auto node : nodes) {
|
for (auto node : nodes) {
|
||||||
if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) {
|
if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) {
|
||||||
cout << "TODO: " << scene << endl;
|
cout << "TODO: " << scene << endl;
|
||||||
} else if (ShapeNode *shape = dynamic_cast<ShapeNode *>(node)) {
|
} else if (ShapeNode *shape = dynamic_cast<ShapeNode *>(node)) {
|
||||||
ret |= renderer->dispose(*shape, shape->engine());
|
if (!renderer->dispose(*shape, shape->engine())) return -1;
|
||||||
}
|
}
|
||||||
delete(node);
|
delete(node);
|
||||||
}
|
}
|
||||||
nodes.clear();
|
nodes.clear();
|
||||||
|
|
||||||
return ret;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int update()
|
int update()
|
||||||
|
@ -91,16 +95,14 @@ struct Canvas::Impl
|
||||||
{
|
{
|
||||||
assert(renderer);
|
assert(renderer);
|
||||||
|
|
||||||
auto ret = 0;
|
|
||||||
|
|
||||||
for(auto node: nodes) {
|
for(auto node: nodes) {
|
||||||
if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) {
|
if (SceneNode *scene = dynamic_cast<SceneNode *>(node)) {
|
||||||
cout << "TODO: " << scene << endl;
|
cout << "TODO: " << scene << endl;
|
||||||
} else if (ShapeNode *shape = dynamic_cast<ShapeNode *>(node)) {
|
} 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();
|
auto impl = pImpl.get();
|
||||||
assert(impl);
|
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 void* prepare(const ShapeNode& shape, void* data, UpdateFlag flags) = 0;
|
||||||
virtual bool dispose(const ShapeNode& shape, void *data) = 0;
|
virtual bool dispose(const ShapeNode& shape, void *data) = 0;
|
||||||
virtual bool render(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 ref() = 0;
|
||||||
virtual size_t unref() = 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
|
int SwCanvas::target(uint32_t* buffer, size_t stride, size_t w, size_t h) noexcept
|
||||||
{
|
{
|
||||||
auto renderer = dynamic_cast<SwRenderer*>(engine());
|
auto renderer = dynamic_cast<SwRenderer*>(engine());
|
||||||
|
|
Loading…
Add table
Reference in a new issue