canvas: code refactoring 59/232359/2
authorHermet Park <chuneon.park@samsung.com>
Sat, 2 May 2020 02:14:14 +0000 (11:14 +0900)
committerHermet Park <chuneon.park@samsung.com>
Sat, 2 May 2020 02:25:07 +0000 (11:25 +0900)
accept an extra argument in the clear() to clear paints node

and clear buffer selectively.

Change-Id: I83721e74358f546f325bb03fd1f36c7565174dd7

inc/tizenvg.h
src/lib/gl_engine/tvgGlRenderer.cpp
src/lib/gl_engine/tvgGlRenderer.h
src/lib/sw_engine/tvgSwRenderer.h
src/lib/tvgCanvas.cpp
src/lib/tvgRenderCommon.h
src/lib/tvgSwCanvas.cpp

index f325276..40f38ac 100644 (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;
index 38fb4de..8cf84da 100644 (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);
index 881d1ef..b6b9563 100644 (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;
 
index 5de6c12..95c5a0a 100644 (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;
 
index 3723083..e1f41b7 100644 (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;
 }
 
 
index ccbc415..07b33cd 100644 (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;
 };
index cc26cbd..f75d79c 100644 (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());