CanvasView: Add RemoveDrawable() API 77/261177/5
authorJunsuChoi <jsuya.choi@samsung.com>
Tue, 13 Jul 2021 02:05:56 +0000 (11:05 +0900)
committerjunsu choi <jsuya.choi@samsung.com>
Thu, 29 Jul 2021 04:15:31 +0000 (04:15 +0000)
Add an API that removes the Drawable registered with AddDrawable().

Change-Id: Icf5796ca03093d20f13e5fe12db8c75aa5965a7e

automated-tests/src/dali-toolkit/dali-toolkit-test-utils/toolkit-canvas-renderer.cpp
automated-tests/src/dali-toolkit/utc-Dali-CanvasView.cpp
dali-toolkit/devel-api/controls/canvas-view/canvas-view.cpp
dali-toolkit/devel-api/controls/canvas-view/canvas-view.h
dali-toolkit/internal/controls/canvas-view/canvas-view-impl.cpp
dali-toolkit/internal/controls/canvas-view/canvas-view-impl.h

index 43807bf..5849f99 100644 (file)
@@ -38,7 +38,8 @@ class CanvasRenderer: public Dali::BaseObject
 {
 public:
   CanvasRenderer( const Vector2& size )
 {
 public:
   CanvasRenderer( const Vector2& size )
-  : mPixelBuffer( Devel::PixelBuffer::New(size.width, size.height, Dali::Pixel::RGBA8888) ),
+  : mDrawable(nullptr),
+    mPixelBuffer( Devel::PixelBuffer::New(size.width, size.height, Dali::Pixel::RGBA8888) ),
     mSize(size),
     mViewBox(size)
   {
     mSize(size),
     mViewBox(size)
   {
@@ -69,9 +70,24 @@ public:
     {
       return false;
     }
     {
       return false;
     }
+    mDrawable = &drawable;
     return true;
   }
 
     return true;
   }
 
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+  {
+    if (!drawable)
+    {
+      return false;
+    }
+    if (mDrawable == &drawable)
+    {
+      mDrawable = nullptr;
+      return true;
+    }
+    return false;
+  }
+
   Devel::PixelBuffer GetPixelBuffer()
   {
     return mPixelBuffer;
   Devel::PixelBuffer GetPixelBuffer()
   {
     return mPixelBuffer;
@@ -112,6 +128,7 @@ public:
   }
 
 public:
   }
 
 public:
+   Dali::CanvasRenderer::Drawable* mDrawable;
    Devel::PixelBuffer mPixelBuffer;
    Vector2 mSize;
    Vector2 mViewBox;
    Devel::PixelBuffer mPixelBuffer;
    Vector2 mSize;
    Vector2 mViewBox;
@@ -185,6 +202,11 @@ bool CanvasRenderer::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
   return Internal::Adaptor::GetImplementation(*this).AddDrawable(drawable);
 }
 
   return Internal::Adaptor::GetImplementation(*this).AddDrawable(drawable);
 }
 
+bool CanvasRenderer::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+  return Internal::Adaptor::GetImplementation(*this).RemoveDrawable(drawable);
+}
+
 bool CanvasRenderer::SetSize(const Vector2& size)
 {
   return Internal::Adaptor::GetImplementation(*this).SetSize(size);
 bool CanvasRenderer::SetSize(const Vector2& size)
 {
   return Internal::Adaptor::GetImplementation(*this).SetSize(size);
index 60a7a46..f6b3d10 100644 (file)
@@ -167,6 +167,35 @@ int UtcDaliCanvasViewAddN(void)
   END_TEST;
 }
 
   END_TEST;
 }
 
+int UtcDaliCanvasViewRemoveP(void)
+{
+  ToolkitTestApplication application;
+  CanvasView canvasView = CanvasView::New(Vector2(100,100));
+  DALI_TEST_CHECK( canvasView );
+
+  Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
+
+  canvasView.AddDrawable(shape);
+
+  DALI_TEST_CHECK( canvasView.RemoveDrawable(shape) );
+
+  END_TEST;
+}
+
+int UtcDaliCanvasViewRemoveN(void)
+{
+  ToolkitTestApplication application;
+
+  CanvasView canvasView = CanvasView::New(Vector2(100,100));
+  DALI_TEST_CHECK( canvasView );
+
+  Dali::CanvasRenderer::Shape shape = Dali::CanvasRenderer::Shape::New();
+
+  DALI_TEST_CHECK( !canvasView.RemoveDrawable(shape) );
+
+  END_TEST;
+}
+
 int UtcDaliCanvasViewChangeSizeP(void)
 {
   ToolkitTestApplication application;
 int UtcDaliCanvasViewChangeSizeP(void)
 {
   ToolkitTestApplication application;
index f2a4a2e..a0577d8 100644 (file)
@@ -73,6 +73,11 @@ void CanvasView::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
   Dali::Toolkit::GetImpl(*this).AddDrawable(drawable);
 }
 
   Dali::Toolkit::GetImpl(*this).AddDrawable(drawable);
 }
 
+bool CanvasView::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+  return Dali::Toolkit::GetImpl(*this).RemoveDrawable(drawable);
+}
+
 CanvasView::CanvasView(Internal::CanvasView& implementation)
 : Control(implementation)
 {
 CanvasView::CanvasView(Internal::CanvasView& implementation)
 : Control(implementation)
 {
index 9607d2c..5860539 100644 (file)
@@ -157,9 +157,18 @@ public:
   /**
    * @brief Add drawable object to the CanvasView.
    * This method is similar to registration. The added shape is drawn on the inner canvas.
   /**
    * @brief Add drawable object to the CanvasView.
    * This method is similar to registration. The added shape is drawn on the inner canvas.
+   * @param[in] drawable the drawable object.
    */
   void AddDrawable(Dali::CanvasRenderer::Drawable& drawable);
 
    */
   void AddDrawable(Dali::CanvasRenderer::Drawable& drawable);
 
+  /**
+   * @brief Remove drawable object to the CanvasView.
+   * This method is similar to deregistration.
+   * @param[in] drawable the drawable object.
+   * @return Returns True when it's successful. False otherwise.
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable);
+
 public: // Not intended for application developers
   /// @cond internal
   /**
 public: // Not intended for application developers
   /// @cond internal
   /**
index a87c040..1e93358 100644 (file)
@@ -251,6 +251,15 @@ bool CanvasView::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
   return false;
 }
 
   return false;
 }
 
+bool CanvasView::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+  if(mCanvasRenderer && mCanvasRenderer.RemoveDrawable(drawable))
+  {
+    return true;
+  }
+  return false;
+}
+
 bool CanvasView::SetViewBox(const Vector2& viewBox)
 {
   if(mCanvasRenderer && mCanvasRenderer.SetViewBox(viewBox))
 bool CanvasView::SetViewBox(const Vector2& viewBox)
 {
   if(mCanvasRenderer && mCanvasRenderer.SetViewBox(viewBox))
index ffc204e..842877d 100644 (file)
@@ -79,6 +79,11 @@ public:
    */
   static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex);
 
    */
   static Property::Value GetProperty(BaseObject* object, Property::Index propertyIndex);
 
+  /**
+   * @copydoc Toolkit::Control::CanvasView::RemoveDrawable
+   */
+  bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable);
+
 private: // From Control
   /**
    * @copydoc Control::OnRelayout
 private: // From Control
   /**
    * @copydoc Control::OnRelayout