common: code refactoring. 23/231923/2
authorHermet Park <chuneon.park@samsung.com>
Sun, 26 Apr 2020 16:45:52 +0000 (01:45 +0900)
committerHermet Park <chuneon.park@samsung.com>
Sun, 26 Apr 2020 16:48:48 +0000 (01:48 +0900)
introduce Canvas class to replace the CanvasBase.
now, SwCanvas, GlCanvas inherits this Canvas for polymorphism
and remove duplicated interfaces.

Change-Id: I65a87e3aa2289d04997930a54aeccd14f57dd73a

inc/tizenvg.h
src/lib/meson.build
src/lib/tvgCanvas.cpp [moved from src/lib/tvgCanvasBase.h with 61% similarity]
src/lib/tvgGlCanvas.cpp
src/lib/tvgSwCanvas.cpp

index e897439..babca5d 100644 (file)
@@ -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<PaintNode> 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<PaintNode> 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<SwCanvas> 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<PaintNode> 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<GlCanvas> gen() noexcept;
 
     _TIZENVG_DECLARE_PRIVATE(GlCanvas);
index ffecb2a..976aa5e 100644 (file)
@@ -5,8 +5,8 @@ source_file = [
    'tvgCommon.h',
    'tvgRenderCommon.h',
    'tvgEngine.cpp',
-   'tvgCanvasBase.h',
    'tvgShapePath.h',
+   'tvgCanvas.cpp',
    'tvgSwCanvas.cpp',
    'tvgGlCanvas.cpp',
    'tvgSceneNode.cpp',
similarity index 61%
rename from src/lib/tvgCanvasBase.h
rename to src/lib/tvgCanvas.cpp
index a2ed34b..3bde24f 100644 (file)
  *  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<PaintNode*> 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<PaintNode> 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<PaintNode> 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<Impl>(pRenderer))
+{
+}
+
+
+Canvas::~Canvas()
+{
+}
+
+
+int Canvas::push(unique_ptr<PaintNode> 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_ */
index 386778d..a7719d3 100644 (file)
 #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<Impl>())
+GlCanvas::GlCanvas() : Canvas(GlRenderer::inst()), pImpl(make_unique<Impl>())
 {
 }
 
@@ -45,51 +44,19 @@ GlCanvas::~GlCanvas()
 }
 
 
-unique_ptr<GlCanvas> GlCanvas::gen() noexcept
-{
-    auto canvas = unique_ptr<GlCanvas>(new GlCanvas);
-    assert(canvas);
-
-    return canvas;
-}
-
-
-int GlCanvas::push(unique_ptr<PaintNode> paint) noexcept
-{
-    auto impl = pImpl.get();
-    assert(impl);
-    return impl->push(move(paint));
-}
-
-int GlCanvas::clear() noexcept
+int GlCanvas::sync() noexcept
 {
-    auto impl = pImpl.get();
-    assert(impl);
-    return impl->clear();
+    return 0;
 }
 
 
-int GlCanvas::update() noexcept
+unique_ptr<GlCanvas> GlCanvas::gen() noexcept
 {
-    auto impl = pImpl.get();
-    assert(impl);
-    return impl->update();
-}
-
+    auto canvas = unique_ptr<GlCanvas>(new GlCanvas);
+    assert(canvas);
 
-RenderMethod* GlCanvas::engine() noexcept
-{
-    auto impl = pImpl.get();
-    assert(impl);
-    return impl->renderer;
+    return canvas;
 }
 
 
-int GlCanvas::draw(bool async) noexcept
-{
-    auto impl = pImpl.get();
-    assert(impl);
-    return impl->draw();
-}
-
 #endif /* _TVG_GLCANVAS_CPP_ */
index 442b0d7..04902fc 100644 (file)
@@ -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,55 +35,30 @@ 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<SwRenderer*>(impl->renderer)->target(buffer, stride, height);
-
-    return 0;
-}
-
-
-int SwCanvas::draw(bool async) noexcept
+SwCanvas::SwCanvas() : Canvas(SwRenderer::inst()), pImpl(make_unique<Impl>())
 {
-    auto impl = pImpl.get();
-    assert(impl);
-    return impl->draw();
 }
 
 
-int SwCanvas::sync() noexcept
-{
-    return 0;
-}
-
-
-int SwCanvas::push(unique_ptr<PaintNode> paint) noexcept
+SwCanvas::~SwCanvas()
 {
-    auto impl = pImpl.get();
-    assert(impl);
-
-    return impl->push(move(paint));
 }
 
 
-int SwCanvas::clear() noexcept
+int SwCanvas::target(uint32_t* buffer, size_t stride, size_t height) noexcept
 {
-    auto impl = pImpl.get();
-    assert(impl);
-    return impl->clear();
-}
+    auto renderer = dynamic_cast<SwRenderer*>(engine());
+    assert(renderer);
 
+    if (!renderer->target(buffer, stride, height)) return -1;
 
-SwCanvas::SwCanvas() : pImpl(make_unique<Impl>())
-{
+    return 0;
 }
 
 
-SwCanvas::~SwCanvas()
+int SwCanvas::sync() noexcept
 {
+    return 0;
 }
 
 
@@ -99,20 +73,4 @@ unique_ptr<SwCanvas> 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_ */