CanvasRenderer::DrawableGroup: Add RemoveDrawable() API 44/262044/3
authorJunsuChoi <jsuya.choi@samsung.com>
Mon, 2 Aug 2021 05:24:18 +0000 (14:24 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Wed, 11 Aug 2021 00:34:26 +0000 (09:34 +0900)
Add an API that removes the Drawable registered with AddDrawable()
from list in DrawableGroup

Change-Id: I0fc908d5282e9bd7297670a66554d1500e2f262f

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

index f193277..31af7f8 100644 (file)
@@ -48,6 +48,11 @@ bool CanvasRenderer::DrawableGroup::AddDrawable(Drawable& drawable)
   return GetImplementation(*this).AddDrawable(drawable);
 }
 
+bool CanvasRenderer::DrawableGroup::RemoveDrawable(Drawable drawable)
+{
+  return GetImplementation(*this).RemoveDrawable(drawable);
+}
+
 bool CanvasRenderer::DrawableGroup::RemoveAllDrawables()
 {
   return GetImplementation(*this).RemoveAllDrawables();
index 272da3b..4c35e37 100644 (file)
@@ -81,6 +81,14 @@ public:
   bool AddDrawable(Drawable& drawable);
 
   /**
+   * @brief Remove drawable object to the DrawableGroup.
+   * 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 Remove all drawable objects added to the DrawableGroup.
    * @return Returns True when it's successful. False otherwise.
    */
index e621e77..d022c51 100644 (file)
@@ -33,6 +33,11 @@ bool DrawableGroup::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
   return false;
 }
 
+bool DrawableGroup::RemoveDrawable(Dali::CanvasRenderer::Drawable drawable)
+{
+  return false;
+}
+
 bool DrawableGroup::RemoveAllDrawables()
 {
   return false;
index ba8623d..dbfd0fd 100644 (file)
@@ -59,6 +59,11 @@ public:
   virtual bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable);
 
   /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveDrawable()
+   */
+  virtual bool RemoveDrawable(Dali::CanvasRenderer::Drawable drawable);
+
+  /**
    * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveAllDrawables()
    */
   virtual bool RemoveAllDrawables();
index 55ecb7d..d2de436 100644 (file)
@@ -57,6 +57,11 @@ bool DrawableGroupGeneric::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
   return false;
 }
 
+bool DrawableGroupGeneric::RemoveDrawable(Dali::CanvasRenderer::Drawable drawable)
+{
+  return false;
+}
+
 bool DrawableGroupGeneric::RemoveAllDrawables()
 {
   return false;
index 677b1d2..d14a676 100644 (file)
@@ -49,6 +49,11 @@ public:
   bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
 
   /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveDrawable()
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable drawable) override;
+
+  /**
    * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveAllDrawables()
    */
   bool RemoveAllDrawables() override;
index 0ced4f1..44f8794 100644 (file)
@@ -101,6 +101,26 @@ bool DrawableGroupTizen::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
 #endif
 }
 
+bool DrawableGroupTizen::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 = Dali::GetImplementation(*it);
+    drawableImpl.SetAdded(false);
+
+    mDrawables.erase(it);
+
+    Drawable::SetChanged(true);
+
+    return true;
+  }
+
+#endif
+  return false;
+}
+
 bool DrawableGroupTizen::RemoveAllDrawables()
 {
 #ifdef THORVG_SUPPORT
index a403cbc..fccc857 100644 (file)
@@ -53,6 +53,11 @@ public:
   bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
 
   /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveDrawable()
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable drawable) override;
+
+  /**
    * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveAllDrawables()
    */
   bool RemoveAllDrawables() override;
index ccc590c..0bed4a6 100644 (file)
@@ -101,6 +101,26 @@ bool DrawableGroupUbuntu::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
 #endif
 }
 
+bool DrawableGroupUbuntu::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 = Dali::GetImplementation(*it);
+    drawableImpl.SetAdded(false);
+
+    mDrawables.erase(it);
+
+    Drawable::SetChanged(true);
+
+    return true;
+  }
+
+#endif
+  return false;
+}
+
 bool DrawableGroupUbuntu::RemoveAllDrawables()
 {
 #ifdef THORVG_SUPPORT
index 52c9608..5652501 100644 (file)
@@ -53,6 +53,11 @@ public:
   bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
 
   /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveDrawable()
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable drawable) override;
+
+  /**
    * @copydoc Dali::CanvasRenderer::DrawableGroup::RemoveAllDrawables()
    */
   bool RemoveAllDrawables() override;