diff --git a/inc/tizenvg.h b/inc/tizenvg.h index e8974396..babca5d4 100644 --- a/inc/tizenvg.h +++ b/inc/tizenvg.h @@ -72,7 +72,33 @@ class TIZENVG_EXPORT PaintNode { public: virtual ~PaintNode() {} - virtual int update(RenderMethod* engine) = 0; + virtual int update(RenderMethod*) = 0; +}; + + +/** + * @class Canvas + * + * @ingroup TizenVG + * + * @brief description... + * + */ +class TIZENVG_EXPORT Canvas +{ +public: + Canvas(RenderMethod*); + virtual ~Canvas(); + + virtual int push(std::unique_ptr paint) noexcept; + virtual int clear() noexcept; + virtual int update() noexcept; + virtual int draw(bool async = true) noexcept; + virtual int sync() = 0; + + RenderMethod* engine() noexcept; + + _TIZENVG_DECLARE_PRIVATE(Canvas); }; @@ -141,21 +167,13 @@ public: @brief description... * */ -class TIZENVG_EXPORT SwCanvas final +class TIZENVG_EXPORT SwCanvas final : public Canvas { public: ~SwCanvas(); - int push(std::unique_ptr paint) noexcept; - int clear() noexcept; - - int update() noexcept; - int draw(bool async = true) noexcept; - int sync() noexcept; - RenderMethod* engine() noexcept; - int target(uint32_t* buffer, size_t stride, size_t height) noexcept; - + int sync() noexcept override; static std::unique_ptr gen(uint32_t* buffer = nullptr, size_t stride = 0, size_t height = 0) noexcept; _TIZENVG_DECLARE_PRIVATE(SwCanvas); @@ -170,20 +188,14 @@ public: * @brief description... * */ -class TIZENVG_EXPORT GlCanvas final +class TIZENVG_EXPORT GlCanvas final : public Canvas { public: ~GlCanvas(); - int push(std::unique_ptr paint) noexcept; - int clear() noexcept; - //TODO: Gl Specific methods. Need gl backend configuration methods as well. - int update() noexcept; - int draw(bool async = true) noexcept; - int sync() noexcept { return 0; } - RenderMethod* engine() noexcept; + int sync() noexcept override; static std::unique_ptr gen() noexcept; _TIZENVG_DECLARE_PRIVATE(GlCanvas); diff --git a/src/lib/meson.build b/src/lib/meson.build index ffecb2a5..976aa5ee 100644 --- a/src/lib/meson.build +++ b/src/lib/meson.build @@ -5,8 +5,8 @@ source_file = [ 'tvgCommon.h', 'tvgRenderCommon.h', 'tvgEngine.cpp', - 'tvgCanvasBase.h', 'tvgShapePath.h', + 'tvgCanvas.cpp', 'tvgSwCanvas.cpp', 'tvgGlCanvas.cpp', 'tvgSceneNode.cpp', diff --git a/src/lib/tvgCanvasBase.h b/src/lib/tvgCanvas.cpp similarity index 61% rename from src/lib/tvgCanvasBase.h rename to src/lib/tvgCanvas.cpp index a2ed34b9..3bde24f6 100644 --- a/src/lib/tvgCanvasBase.h +++ b/src/lib/tvgCanvas.cpp @@ -14,26 +14,30 @@ * limitations under the License. * */ -#ifndef _TVG_CANVAS_BASE_CPP_ -#define _TVG_CANVAS_BASE_CPP_ +#ifndef _TVG_CANVAS_CPP_ +#define _TVG_CANVAS_CPP_ #include "tvgCommon.h" -struct CanvasBase +/************************************************************************/ +/* Internal Class Implementation */ +/************************************************************************/ + +struct Canvas::Impl { vector nodes; RenderMethod* renderer; - CanvasBase(RenderMethod *pRenderer):renderer(pRenderer) + Impl(RenderMethod *pRenderer):renderer(pRenderer) { renderer->ref(); } - ~CanvasBase() + ~Impl() { - clear(); - renderer->unref(); + clear(); + renderer->unref(); } int reserve(size_t n) @@ -43,6 +47,14 @@ struct CanvasBase return 0; } + int push(unique_ptr paint) + { + PaintNode *node = paint.release(); + assert(node); + nodes.push_back(node); + return node->update(renderer); + } + int clear() { assert(renderer); @@ -75,14 +87,6 @@ struct CanvasBase return ret; } - int push(unique_ptr paint) - { - PaintNode *node = paint.release(); - assert(node); - nodes.push_back(node); - return node->update(renderer); - } - int draw() { assert(renderer); @@ -101,4 +105,59 @@ struct CanvasBase }; -#endif /* _TVG_CANVAS_BASE_CPP_ */ + +/************************************************************************/ +/* External Class Implementation */ +/************************************************************************/ + +Canvas::Canvas(RenderMethod *pRenderer):pImpl(make_unique(pRenderer)) +{ +} + + +Canvas::~Canvas() +{ +} + + +int Canvas::push(unique_ptr paint) noexcept +{ + auto impl = pImpl.get(); + assert(impl); + + return impl->push(move(paint)); +} + + +int Canvas::clear() noexcept +{ + auto impl = pImpl.get(); + assert(impl); + return impl->clear(); +} + + +int Canvas::draw(bool async) noexcept +{ + auto impl = pImpl.get(); + assert(impl); + return impl->draw(); +} + + +int Canvas::update() noexcept +{ + auto impl = pImpl.get(); + assert(impl); + return impl->update(); +} + + +RenderMethod* Canvas::engine() noexcept +{ + auto impl = pImpl.get(); + assert(impl); + return impl->renderer; +} + +#endif /* _TVG_CANVAS_CPP_ */ diff --git a/src/lib/tvgGlCanvas.cpp b/src/lib/tvgGlCanvas.cpp index 386778d7..a7719d30 100644 --- a/src/lib/tvgGlCanvas.cpp +++ b/src/lib/tvgGlCanvas.cpp @@ -18,16 +18,15 @@ #define _TVG_GLCANVAS_CPP_ #include "tvgCommon.h" -#include "tvgCanvasBase.h" #include "tvgGlRenderer.h" /************************************************************************/ /* Internal Class Implementation */ /************************************************************************/ -struct GlCanvas::Impl : CanvasBase +struct GlCanvas::Impl { - Impl() : CanvasBase(GlRenderer::inst()) {} + Impl() {} }; @@ -35,7 +34,7 @@ struct GlCanvas::Impl : CanvasBase /* External Class Implementation */ /************************************************************************/ -GlCanvas::GlCanvas() : pImpl(make_unique()) +GlCanvas::GlCanvas() : Canvas(GlRenderer::inst()), pImpl(make_unique()) { } @@ -45,6 +44,12 @@ GlCanvas::~GlCanvas() } +int GlCanvas::sync() noexcept +{ + return 0; +} + + unique_ptr GlCanvas::gen() noexcept { auto canvas = unique_ptr(new GlCanvas); @@ -54,42 +59,4 @@ unique_ptr GlCanvas::gen() noexcept } -int GlCanvas::push(unique_ptr paint) noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->push(move(paint)); -} - -int GlCanvas::clear() noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->clear(); -} - - -int GlCanvas::update() noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->update(); -} - - -RenderMethod* GlCanvas::engine() noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->renderer; -} - - -int GlCanvas::draw(bool async) noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->draw(); -} - #endif /* _TVG_GLCANVAS_CPP_ */ diff --git a/src/lib/tvgSwCanvas.cpp b/src/lib/tvgSwCanvas.cpp index 442b0d7c..04902fc6 100644 --- a/src/lib/tvgSwCanvas.cpp +++ b/src/lib/tvgSwCanvas.cpp @@ -18,7 +18,6 @@ #define _TVG_SWCANVAS_CPP_ #include "tvgCommon.h" -#include "tvgCanvasBase.h" #include "tvgSwRenderer.h" @@ -26,9 +25,9 @@ /* Internal Class Implementation */ /************************************************************************/ -struct SwCanvas::Impl : CanvasBase +struct SwCanvas::Impl { - Impl() : CanvasBase(SwRenderer::inst()) {} + Impl() {} }; @@ -36,49 +35,7 @@ struct SwCanvas::Impl : CanvasBase /* External Class Implementation */ /************************************************************************/ -int SwCanvas::target(uint32_t* buffer, size_t stride, size_t height) noexcept -{ - auto impl = pImpl.get(); - assert(impl); - - dynamic_cast(impl->renderer)->target(buffer, stride, height); - - return 0; -} - - -int SwCanvas::draw(bool async) noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->draw(); -} - - -int SwCanvas::sync() noexcept -{ - return 0; -} - - -int SwCanvas::push(unique_ptr paint) noexcept -{ - auto impl = pImpl.get(); - assert(impl); - - return impl->push(move(paint)); -} - - -int SwCanvas::clear() noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->clear(); -} - - -SwCanvas::SwCanvas() : pImpl(make_unique()) +SwCanvas::SwCanvas() : Canvas(SwRenderer::inst()), pImpl(make_unique()) { } @@ -88,6 +45,23 @@ SwCanvas::~SwCanvas() } +int SwCanvas::target(uint32_t* buffer, size_t stride, size_t height) noexcept +{ + auto renderer = dynamic_cast(engine()); + assert(renderer); + + if (!renderer->target(buffer, stride, height)) return -1; + + return 0; +} + + +int SwCanvas::sync() noexcept +{ + return 0; +} + + unique_ptr SwCanvas::gen(uint32_t* buffer, size_t stride, size_t height) noexcept { auto canvas = unique_ptr(new SwCanvas); @@ -99,20 +73,4 @@ unique_ptr SwCanvas::gen(uint32_t* buffer, size_t stride, size_t heigh return canvas; } - -int SwCanvas::update() noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->update(); -} - - -RenderMethod* SwCanvas::engine() noexcept -{ - auto impl = pImpl.get(); - assert(impl); - return impl->renderer; -} - #endif /* _TVG_SWCANVAS_CPP_ */