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 f3252765573cb77210149ce5568f8c4d4bca44fa..40f38acb393233ace070af3486b8f9e9d29d2fcb 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 38fb4deea028e7b925d72a25996af4c6cb275513..8cf84da3110f5df19431d8f1f36d08725386f3b9 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 881d1efa6d7417d9d85065d8d261dfade9236a58..b6b9563133f2e259403f9108f27dd1885d7f2d55 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 5de6c128b95dc203dd94a27280a9a13a49bfd537..95c5a0a11a958cf3fbab9f69eb20650e15f60b9d 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 37230838b8305825f2708329c5aa568879f43b03..e1f41b74f35a5250074256d9d6349c6875b5f2b5 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 ccbc4151baf2f027cdb7f27817d0c7e65cc76b79..07b33cd850a8e10fde8e99d19bbd75e3d8bdb85a 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 cc26cbd8a07ddd1aa50f44fce042c848a3361753..f75d79c1223c745b5ee1ae4d1a1eb4988e02b5c2 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());