CanvasRenderer: Add RemoveDrawable() API 78/261178/7
authorJunsuChoi <jsuya.choi@samsung.com>
Tue, 13 Jul 2021 02:03:58 +0000 (11:03 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Mon, 26 Jul 2021 07:33:35 +0000 (16:33 +0900)
Add an API that removes the Drawable registered with AddDrawable()
from list in CanvasRenderer.

Change-Id: I70801e91df3e7d19dce4175b8274e351d12f5225

dali/devel-api/adaptor-framework/canvas-renderer.cpp
dali/devel-api/adaptor-framework/canvas-renderer.h
dali/internal/canvas-renderer/common/canvas-renderer-impl.cpp
dali/internal/canvas-renderer/common/canvas-renderer-impl.h
dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.cpp
dali/internal/canvas-renderer/generic/canvas-renderer-impl-generic.h
dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.cpp
dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h
dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.cpp
dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h

index 0445b6c..1ed7512 100644 (file)
@@ -68,6 +68,11 @@ bool CanvasRenderer::Rasterize()
   return GetImplementation(*this).Rasterize();
 }
 
+bool CanvasRenderer::RemoveDrawable(Drawable& drawable)
+{
+  return GetImplementation(*this).RemoveDrawable(drawable);
+}
+
 bool CanvasRenderer::SetSize(const Vector2& size)
 {
   return GetImplementation(*this).SetSize(size);
index 2a7d61d..85e898b 100644 (file)
@@ -102,6 +102,14 @@ public:
   bool AddDrawable(Drawable& drawable);
 
   /**
+   * @brief Remove drawable object to the CanvasView.
+   * This method is similar to deregistration. Freeing memory is not concerned for drawables being removed.
+   * @param[in] drawable the drawable object.
+   * @return Returns True when it's successful. False otherwise.
+   */
+  bool RemoveDrawable(Drawable& drawable);
+
+  /**
    * @brief Returns the PixelBuffer, which is the Render buffer of Canvas.
    *
    * @return Returns the pixel buffer.
index 6e66191..14892a2 100644 (file)
@@ -58,6 +58,11 @@ bool CanvasRenderer::Rasterize()
   return false;
 }
 
+bool CanvasRenderer::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+  return false;
+}
+
 bool CanvasRenderer::SetSize(const Vector2& size)
 {
   return false;
index b2d3239..6f12b51 100644 (file)
@@ -74,6 +74,11 @@ public:
   virtual bool Rasterize();
 
   /**
+   * @copydoc Dali::CanvasRenderer::RemoveDrawable()
+   */
+  virtual bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable);
+
+  /**
    * @copydoc Dali::CanvasRenderer::SetSize()
    */
   virtual bool SetSize(const Vector2& size);
index 40f2e90..cedccec 100644 (file)
@@ -80,6 +80,11 @@ bool CanvasRendererGeneric::Rasterize()
   return false;
 }
 
+bool CanvasRendererGeneric::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+  return false;
+}
+
 bool CanvasRendererGeneric::SetSize(const Vector2& size)
 {
   return false;
index 3f43078..9fea46f 100644 (file)
@@ -72,6 +72,11 @@ public:
   virtual bool Rasterize();
 
   /**
+   * @copydoc Dali::CanvasRenderer::RemoveDrawable()
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
+
+  /**
    * @copydoc Dali::CanvasRenderer::SetSize()
    */
   bool SetSize(const Vector2& size) override;
index 2455d65..72fe081 100644 (file)
@@ -267,6 +267,25 @@ bool CanvasRendererTizen::Rasterize()
 #endif
 }
 
+bool CanvasRendererTizen::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+#ifdef THORVG_SUPPORT
+  DrawableGroup::DrawableVector::iterator it = std::find(mDrawables.begin(), mDrawables.end(), drawable);
+  if(it != mDrawables.end())
+  {
+    Internal::Adaptor::Drawable& drawableImpl = GetImplementation(drawable);
+    drawableImpl.SetAdded(false);
+
+    mDrawables.erase(it);
+    mChanged = true;
+
+    return true;
+  }
+
+#endif
+  return false;
+}
+
 bool CanvasRendererTizen::SetSize(const Vector2& size)
 {
   if(size.width < 1.0f || size.height < 1.0f)
index c73e9be..e7fae0e 100644 (file)
@@ -77,6 +77,11 @@ public:
   bool Rasterize() override;
 
   /**
+   * @copydoc Dali::CanvasRenderer::RemoveDrawable()
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
+
+  /**
    * @copydoc Dali::CanvasRenderer::SetSize()
    */
   bool SetSize(const Vector2& size) override;
index d97cf98..1d9cc02 100644 (file)
@@ -267,6 +267,25 @@ bool CanvasRendererUbuntu::Rasterize()
 #endif
 }
 
+bool CanvasRendererUbuntu::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+#ifdef THORVG_SUPPORT
+  DrawableGroup::DrawableVector::iterator it = std::find(mDrawables.begin(), mDrawables.end(), drawable);
+  if(it != mDrawables.end())
+  {
+    Internal::Adaptor::Drawable& drawableImpl = GetImplementation(drawable);
+    drawableImpl.SetAdded(false);
+
+    mDrawables.erase(it);
+    mChanged = true;
+
+    return true;
+  }
+
+#endif
+  return false;
+}
+
 bool CanvasRendererUbuntu::SetSize(const Vector2& size)
 {
   if(size.width < 1.0f || size.height < 1.0f)
index 22aeb10..c5224f0 100644 (file)
@@ -77,6 +77,11 @@ public:
   bool Rasterize() override;
 
   /**
+   * @copydoc Dali::CanvasRenderer::RemoveDrawable()
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
+
+  /**
    * @copydoc Dali::CanvasRenderer::SetSize()
    */
   bool SetSize(const Vector2& size) override;