Add CanvasRenderer::DrawableGroup class 38/257538/9
authorJunsuChoi <jsuya.choi@samsung.com>
Tue, 27 Apr 2021 06:31:04 +0000 (15:31 +0900)
committerJunsuChoi <jsuya.choi@samsung.com>
Thu, 20 May 2021 04:23:56 +0000 (13:23 +0900)
DrawableGroup is a class that implements ThorVG's tvg::Scene 1:1.
This feature can add and control multiple Drawable objects.
Since this class inherits Drawable, user can use Drawable's Opacity and Transformation methods.

class DALI_ADAPTOR_API DrawableGroup : public Drawable
AddDrawable
Clear

Change-Id: I61bcf56f025bf8c01f9211eac2112ebd3dc90fdb

39 files changed:
dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.cpp [new file with mode: 0644]
dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h [new file with mode: 0644]
dali/devel-api/adaptor-framework/canvas-renderer.h
dali/devel-api/file.list
dali/internal/canvas-renderer/common/drawable-group-factory.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/common/drawable-group-factory.h [new file with mode: 0644]
dali/internal/canvas-renderer/common/drawable-group-impl.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/common/drawable-group-impl.h [new file with mode: 0644]
dali/internal/canvas-renderer/common/drawable-impl.cpp
dali/internal/canvas-renderer/common/drawable-impl.h
dali/internal/canvas-renderer/file.list
dali/internal/canvas-renderer/generic/canvas-renderer-factory-generic.cpp
dali/internal/canvas-renderer/generic/drawable-factory-generic.cpp
dali/internal/canvas-renderer/generic/drawable-group-factory-generic.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/generic/drawable-group-impl-generic.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/generic/drawable-group-impl-generic.h [new file with mode: 0644]
dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp
dali/internal/canvas-renderer/generic/drawable-impl-generic.h
dali/internal/canvas-renderer/generic/shape-factory-generic.cpp
dali/internal/canvas-renderer/tizen/canvas-renderer-factory-tizen.cpp
dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h
dali/internal/canvas-renderer/tizen/drawable-factory-tizen.cpp
dali/internal/canvas-renderer/tizen/drawable-group-factory-tizen.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.h [new file with mode: 0644]
dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp
dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h
dali/internal/canvas-renderer/tizen/shape-factory-tizen.cpp
dali/internal/canvas-renderer/tizen/shape-impl-tizen.h
dali/internal/canvas-renderer/ubuntu/canvas-renderer-factory-ubuntu.cpp
dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h
dali/internal/canvas-renderer/ubuntu/drawable-factory-ubuntu.cpp
dali/internal/canvas-renderer/ubuntu/drawable-group-factory-ubuntu.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.cpp [new file with mode: 0644]
dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.h [new file with mode: 0644]
dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp
dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h
dali/internal/canvas-renderer/ubuntu/shape-factory-ubuntu.cpp
dali/internal/canvas-renderer/ubuntu/shape-impl-ubuntu.h

diff --git a/dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.cpp b/dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.cpp
new file mode 100644 (file)
index 0000000..da7d450
--- /dev/null
@@ -0,0 +1,56 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h>
+
+// INTERNAL INCLUDES
+#include <dali/internal/canvas-renderer/common/canvas-renderer-impl.h>
+#include <dali/internal/canvas-renderer/common/drawable-group-factory.h>
+#include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+
+namespace Dali
+{
+CanvasRenderer::DrawableGroup CanvasRenderer::DrawableGroup::New()
+{
+  return DrawableGroup(Internal::Adaptor::DrawableGroupFactory::New());
+}
+
+CanvasRenderer::DrawableGroup::DrawableGroup()
+{
+}
+
+CanvasRenderer::DrawableGroup::~DrawableGroup()
+{
+}
+
+CanvasRenderer::DrawableGroup::DrawableGroup(Internal::Adaptor::DrawableGroup* impl)
+: CanvasRenderer::Drawable(impl)
+{
+}
+
+bool CanvasRenderer::DrawableGroup::AddDrawable(Drawable& drawable)
+{
+  return GetImplementation(*this).AddDrawable(drawable);
+}
+
+bool CanvasRenderer::DrawableGroup::Clear()
+{
+  return GetImplementation(*this).Clear();
+}
+
+} // namespace Dali
diff --git a/dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h b/dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h
new file mode 100644 (file)
index 0000000..ae2dded
--- /dev/null
@@ -0,0 +1,110 @@
+#ifndef DALI_CANVAS_RENDERER_DRAWABLE_GROUP_H
+#define DALI_CANVAS_RENDERER_DRAWABLE_GROUP_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/base-handle.h>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
+#include <dali/devel-api/adaptor-framework/canvas-renderer.h>
+#include <dali/public-api/dali-adaptor-common.h>
+
+namespace Dali
+{
+/**
+ * @addtogroup dali_adaptor_framework
+ * @{
+ */
+
+namespace Internal DALI_INTERNAL
+{
+namespace Adaptor
+{
+class CanvasRenderer;
+class DrawableGroup;
+} // namespace Adaptor
+} // namespace DALI_INTERNAL
+
+/**
+ * @brief A class enabling to hold many Drawable objects.
+ * As a whole they can be transformed, their transparency can be changed.
+ */
+class DALI_ADAPTOR_API CanvasRenderer::DrawableGroup : public CanvasRenderer::Drawable
+{
+public:
+  /**
+   * @brief Creates an initialized handle to a new CanvasRenderer::DrawableGroup.
+   *
+   * @return A handle to a newly allocated DrawableGroup
+   */
+  static DrawableGroup New();
+
+public:
+  /**
+   * @brief Creates an empty handle.
+   * Use CanvasRenderer::DrawableGroup::New() to create an initialized object.
+   */
+  DrawableGroup();
+
+  /**
+   * @brief Destructor.
+   */
+  ~DrawableGroup();
+
+  /**
+   * @brief This copy constructor is required for (smart) pointer semantics.
+   *
+   * @param[in] handle A reference to the copied handle
+   */
+  DrawableGroup(const DrawableGroup& handle) = default;
+
+public:
+  /**
+   * @brief Add drawable object to the DrawableGroup. This method is similar to registration.
+   * @param[in] drawable The drawable object.
+   * @return Returns True when it's successful. False otherwise.
+   */
+  bool AddDrawable(Drawable& drawable);
+
+  /**
+   * @brief Clears the drawable object added to the DrawableGroup.
+   * This method does not free the memory of the added drawable object.
+   * @return Returns True when it's successful. False otherwise.
+   */
+  bool Clear();
+
+public: // Not intended for application developers
+  /// @cond internal
+  /**
+   * @brief The constructor.
+   * @note  Not intended for application developers.
+   *
+   * @param[in] pointer A pointer to a newly allocated CanvasRenderer::DrawableGroup
+   */
+  explicit DALI_INTERNAL DrawableGroup(Internal::Adaptor::DrawableGroup* impl);
+  /// @endcond
+};
+
+/**
+ * @}
+ */
+} // namespace Dali
+
+#endif // DALI_CANVAS_RENDERER_DRAWABLE_GROUP_H
index 9216ced..3d866b8 100644 (file)
@@ -84,6 +84,7 @@ public:
 public:
   class Drawable;
   class Shape;
+  class DrawableGroup;
 
 public:
   /**
index 9564cc7..afabe67 100755 (executable)
@@ -9,6 +9,7 @@ SET( devel_api_src_files
   ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer.cpp
   ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer-drawable.cpp
   ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer-shape.cpp
+  ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer-drawable-group.cpp
   ${adaptor_devel_api_dir}/adaptor-framework/clipboard.cpp
   ${adaptor_devel_api_dir}/adaptor-framework/clipboard-event-notifier.cpp
   ${adaptor_devel_api_dir}/adaptor-framework/color-controller.cpp
@@ -56,6 +57,7 @@ SET( devel_api_adaptor_framework_header_files
   ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer.h
   ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer-drawable.h
   ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer-shape.h
+  ${adaptor_devel_api_dir}/adaptor-framework/canvas-renderer-drawable-group.h
   ${adaptor_devel_api_dir}/adaptor-framework/clipboard-event-notifier.h
   ${adaptor_devel_api_dir}/adaptor-framework/clipboard.h
   ${adaptor_devel_api_dir}/adaptor-framework/color-controller-plugin.h
diff --git a/dali/internal/canvas-renderer/common/drawable-group-factory.cpp b/dali/internal/canvas-renderer/common/drawable-group-factory.cpp
new file mode 100644 (file)
index 0000000..e462c8e
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali/internal/canvas-renderer/common/drawable-group-factory.h>
+#include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace DrawableGroupFactory
+{
+__attribute__((weak)) Dali::Internal::Adaptor::DrawableGroup* New()
+{
+  // default implementation returns 'dummy'.
+  return new Internal::Adaptor::DrawableGroup();
+}
+
+} // namespace DrawableGroupFactory
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/common/drawable-group-factory.h b/dali/internal/canvas-renderer/common/drawable-group-factory.h
new file mode 100644 (file)
index 0000000..7ccc996
--- /dev/null
@@ -0,0 +1,46 @@
+#ifndef DALI_INTERNAL_DRAWABLE_GROUP_FACTORY_H
+#define DALI_INTERNAL_DRAWABLE_GROUP_FACTORY_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace DrawableGroupFactory
+{
+/**
+   * @brief Creates new instance of DrawableGroup implementation
+   * @return pointer to DrawableGroup implementation instance
+   */
+Dali::Internal::Adaptor::DrawableGroup* New();
+
+} // namespace DrawableGroupFactory
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
+
+#endif // DALI_INTERNAL_DRAWABLE_GROUP_FACTORY_H
diff --git a/dali/internal/canvas-renderer/common/drawable-group-impl.cpp b/dali/internal/canvas-renderer/common/drawable-group-impl.cpp
new file mode 100644 (file)
index 0000000..ff3132f
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+DrawableGroup::DrawableGroup() = default;
+
+DrawableGroup::~DrawableGroup() = default;
+
+bool DrawableGroup::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+  return false;
+}
+
+bool DrawableGroup::Clear()
+{
+  return false;
+}
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/common/drawable-group-impl.h b/dali/internal/canvas-renderer/common/drawable-group-impl.h
new file mode 100644 (file)
index 0000000..5a22054
--- /dev/null
@@ -0,0 +1,90 @@
+#ifndef DALI_INTERNAL_DRAWABLE_GROUP_IMPL_H
+#define DALI_INTERNAL_DRAWABLE_GROUP_IMPL_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/base-object.h>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h>
+#include <dali/internal/canvas-renderer/common/drawable-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+/**
+ * Dali internal DrawableGroup.
+ */
+class DrawableGroup : public Internal::Adaptor::Drawable
+{
+public:
+  /**
+   * @brief Constructor
+   */
+  DrawableGroup();
+
+  /**
+   * @brief Destructor.
+   */
+  ~DrawableGroup() override;
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::AddDrawable()
+   */
+  virtual bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable);
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::Clear
+   */
+  virtual bool Clear();
+
+  DrawableGroup(const DrawableGroup&) = delete;
+  DrawableGroup& operator=(DrawableGroup&) = delete;
+  DrawableGroup(DrawableGroup&&)           = delete;
+  DrawableGroup& operator=(DrawableGroup&&) = delete;
+};
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+inline static Internal::Adaptor::DrawableGroup& GetImplementation(Dali::CanvasRenderer::DrawableGroup& drawablegroup)
+{
+  DALI_ASSERT_ALWAYS(drawablegroup && "DrawableGroup handle is empty.");
+
+  BaseObject& handle = drawablegroup.GetBaseObject();
+
+  return static_cast<Internal::Adaptor::DrawableGroup&>(handle);
+}
+
+inline static const Internal::Adaptor::DrawableGroup& GetImplementation(const Dali::CanvasRenderer::DrawableGroup& drawablegroup)
+{
+  DALI_ASSERT_ALWAYS(drawablegroup && "DrawableGroup handle is empty.");
+
+  const BaseObject& handle = drawablegroup.GetBaseObject();
+
+  return static_cast<const Internal::Adaptor::DrawableGroup&>(handle);
+}
+
+} // namespace Dali
+
+#endif // DALI_INTERNAL_DRAWABLE_GROUP_IMPL_H
index 27e6e05..8c0decf 100644 (file)
@@ -106,6 +106,15 @@ void Drawable::SetDrawableAdded(bool added)
   pImpl->SetDrawableAdded(added);
 }
 
+bool Drawable::IsDrawableAdded()
+{
+  if(!pImpl)
+  {
+    return false;
+  }
+  return pImpl->IsDrawableAdded();
+}
+
 void* Drawable::GetObject() const
 {
   if(!pImpl)
index ed302d3..10e25f5 100644 (file)
@@ -92,6 +92,12 @@ public:
   virtual void SetDrawableAdded(bool added);
 
   /**
+   * @brief Returns whether this object was added to another object(canvas or drawable).
+   * @return Returns Ture if added, false otherwise.
+   */
+  virtual bool IsDrawableAdded();
+
+  /**
    * @brief Returns a drawable object pointer.
    * @return Returns a drawable object pointer.
    */
index baa5950..7152811 100644 (file)
@@ -12,6 +12,11 @@ SET( adaptor_canvas_renderer_generic_src_files
     ${adaptor_canvas_renderer_dir}/common/shape-impl.cpp
     ${adaptor_canvas_renderer_dir}/generic/shape-factory-generic.cpp
     ${adaptor_canvas_renderer_dir}/generic/shape-impl-generic.cpp
+
+    ${adaptor_canvas_renderer_dir}/common/drawable-group-factory.cpp
+    ${adaptor_canvas_renderer_dir}/common/drawable-group-impl.cpp
+    ${adaptor_canvas_renderer_dir}/generic/drawable-group-factory-generic.cpp
+    ${adaptor_canvas_renderer_dir}/generic/drawable-group-impl-generic.cpp
 )
 
 # module: canvas-renderer, backend: ubuntu
@@ -27,6 +32,11 @@ SET( adaptor_canvas_renderer_ubuntu_src_files
     ${adaptor_canvas_renderer_dir}/common/shape-impl.cpp
     ${adaptor_canvas_renderer_dir}/ubuntu/shape-factory-ubuntu.cpp
     ${adaptor_canvas_renderer_dir}/ubuntu/shape-impl-ubuntu.cpp
+
+    ${adaptor_canvas_renderer_dir}/common/drawable-group-factory.cpp
+    ${adaptor_canvas_renderer_dir}/common/drawable-group-impl.cpp
+    ${adaptor_canvas_renderer_dir}/ubuntu/drawable-group-factory-ubuntu.cpp
+    ${adaptor_canvas_renderer_dir}/ubuntu/drawable-group-impl-ubuntu.cpp
 )
 
 # module: canvas-renderer, backend: tizen (generic, ivi, mobile, tizen-post, tv, wearable)
@@ -42,4 +52,9 @@ SET( adaptor_canvas_renderer_tizen_src_files
     ${adaptor_canvas_renderer_dir}/common/shape-impl.cpp
     ${adaptor_canvas_renderer_dir}/tizen/shape-factory-tizen.cpp
     ${adaptor_canvas_renderer_dir}/tizen/shape-impl-tizen.cpp
+
+    ${adaptor_canvas_renderer_dir}/common/drawable-group-factory.cpp
+    ${adaptor_canvas_renderer_dir}/common/drawable-group-impl.cpp
+    ${adaptor_canvas_renderer_dir}/tizen/drawable-group-factory-tizen.cpp
+    ${adaptor_canvas_renderer_dir}/tizen/drawable-group-impl-tizen.cpp
 )
index 1d0e527..0ee7671 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index 77f85d5..b3065d8 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/dali/internal/canvas-renderer/generic/drawable-group-factory-generic.cpp b/dali/internal/canvas-renderer/generic/drawable-group-factory-generic.cpp
new file mode 100644 (file)
index 0000000..0b38bc1
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali/internal/canvas-renderer/generic/drawable-group-impl-generic.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace DrawableGroupFactory
+{
+Dali::Internal::Adaptor::DrawableGroup* New()
+{
+  return Dali::Internal::Adaptor::DrawableGroupGeneric::New();
+}
+
+} // namespace DrawableGroupFactory
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/generic/drawable-group-impl-generic.cpp b/dali/internal/canvas-renderer/generic/drawable-group-impl-generic.cpp
new file mode 100644 (file)
index 0000000..a1de291
--- /dev/null
@@ -0,0 +1,69 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali/internal/canvas-renderer/generic/drawable-group-impl-generic.h>
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/type-registry.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace // unnamed namespace
+{
+// Type Registration
+Dali::BaseHandle Create()
+{
+  return Dali::BaseHandle();
+}
+
+Dali::TypeRegistration type(typeid(Dali::CanvasRenderer::DrawableGroup), typeid(Dali::BaseHandle), Create);
+
+} // unnamed namespace
+
+DrawableGroupGeneric* DrawableGroupGeneric::New()
+{
+  return new DrawableGroupGeneric();
+}
+
+DrawableGroupGeneric::DrawableGroupGeneric()
+{
+}
+
+DrawableGroupGeneric::~DrawableGroupGeneric()
+{
+}
+
+bool DrawableGroupGeneric::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+  return false;
+}
+
+bool DrawableGroupGeneric::Clear()
+{
+  return false;
+}
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/generic/drawable-group-impl-generic.h b/dali/internal/canvas-renderer/generic/drawable-group-impl-generic.h
new file mode 100644 (file)
index 0000000..09f22f7
--- /dev/null
@@ -0,0 +1,79 @@
+#ifndef DALI_INTERNAL_GENERIC_DRAWABLE_GROUP_INTERFACE_GENERIC_H
+#define DALI_INTERNAL_GENERIC_DRAWABLE_GROUP_INTERFACE_GENERIC_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/base-object.h>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h>
+#include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+/**
+ * Dali internal DrawableGroup.
+ */
+class DrawableGroupGeneric : public Dali::Internal::Adaptor::DrawableGroup
+{
+public:
+  /**
+   * @brief Creates a DrawableGroup object.
+   * @return A pointer to a newly allocated drawablegroup
+   */
+  static DrawableGroupGeneric* New();
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::AddDrawable()
+   */
+  bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::Clear
+   */
+  bool Clear() override;
+
+private:
+  DrawableGroupGeneric(const DrawableGroupGeneric&) = delete;
+  DrawableGroupGeneric& operator=(DrawableGroupGeneric&) = delete;
+  DrawableGroupGeneric(DrawableGroupGeneric&&)           = delete;
+  DrawableGroupGeneric& operator=(DrawableGroupGeneric&&) = delete;
+
+  /**
+   * @brief Constructor
+   */
+  DrawableGroupGeneric();
+
+  /**
+   * @brief Destructor.
+   */
+  virtual ~DrawableGroupGeneric() override;
+};
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
+
+#endif // DALI_INTERNAL_GENERIC_DRAWABLE_GROUP_INTERFACE_GENERIC_H
index b9755a6..de3f80a 100644 (file)
@@ -87,6 +87,11 @@ void DrawableGeneric::SetDrawableAdded(bool added)
 {
 }
 
+bool DrawableGeneric::IsDrawableAdded()
+{
+  return false;
+}
+
 void DrawableGeneric::SetObject(const void* object)
 {
 }
index e5af808..00a92bb 100644 (file)
@@ -83,6 +83,11 @@ public:
   void SetDrawableAdded(bool added) override;
 
   /**
+   * @copydoc Internal::Adaptor::Drawable::IsDrawableAdded
+   */
+  bool IsDrawableAdded() override;
+
+  /**
    * @copydoc Internal::Adaptor::Drawable::SetObject
    */
   void SetObject(const void* object) override;
index 172e496..9fc5a0e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index bad2472..64cd98c 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index eea66be..a6f4e1f 100644 (file)
@@ -110,9 +110,9 @@ private:
   std::unique_ptr<tvg::SwCanvas> mTvgCanvas;
   tvg::Scene*                    mTvgRoot;
 #endif
-  typedef std::vector<WeakHandle<Dali::CanvasRenderer::Drawable> > DrawableVector;
-  typedef DrawableVector::iterator                                 DrawableVectorIterator;
-  DrawableVector                                                   mDrawables;
+  using DrawableVector         = std::vector<WeakHandle<Dali::CanvasRenderer::Drawable>>;
+  using DrawableVectorIterator = DrawableVector::iterator;
+  DrawableVector mDrawables;
 
   Vector2 mSize;
   Vector2 mViewBox;
index a0800ea..8618279 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/dali/internal/canvas-renderer/tizen/drawable-group-factory-tizen.cpp b/dali/internal/canvas-renderer/tizen/drawable-group-factory-tizen.cpp
new file mode 100644 (file)
index 0000000..5728042
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace DrawableGroupFactory
+{
+Dali::Internal::Adaptor::DrawableGroup* New()
+{
+  return Dali::Internal::Adaptor::DrawableGroupTizen::New();
+}
+
+} // namespace DrawableGroupFactory
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.cpp b/dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.cpp
new file mode 100644 (file)
index 0000000..45c8824
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.h>
+
+// EXTERNAL INCLUDES
+#include <dali/integration-api/debug.h>
+#include <dali/public-api/object/type-registry.h>
+
+// INTERNAL INCLUDES
+#include <dali/internal/canvas-renderer/common/drawable-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace // unnamed namespace
+{
+// Type Registration
+Dali::BaseHandle Create()
+{
+  return Dali::BaseHandle();
+}
+
+Dali::TypeRegistration type(typeid(Dali::CanvasRenderer::DrawableGroup), typeid(Dali::BaseHandle), Create);
+
+} // unnamed namespace
+
+DrawableGroupTizen* DrawableGroupTizen::New()
+{
+  return new DrawableGroupTizen();
+}
+
+DrawableGroupTizen::DrawableGroupTizen()
+#ifdef THORVG_SUPPORT
+: mTvgScene(nullptr)
+#endif
+{
+  Initialize();
+}
+
+DrawableGroupTizen::~DrawableGroupTizen()
+{
+}
+
+void DrawableGroupTizen::Initialize()
+{
+#ifdef THORVG_SUPPORT
+  mTvgScene = tvg::Scene::gen().release();
+  if(!mTvgScene)
+  {
+    DALI_LOG_ERROR("DrawableGroup is null [%p]\n", this);
+  }
+
+  Drawable::Create();
+  Drawable::SetObject(static_cast<void*>(mTvgScene));
+#endif
+}
+
+bool DrawableGroupTizen::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+#ifdef THORVG_SUPPORT
+  for(auto& it : mDrawables)
+  {
+    if(it.GetHandle() == drawable)
+    {
+      DALI_LOG_ERROR("Already added [%p][%p]\n", this, &drawable);
+      return false;
+    }
+  }
+
+  Internal::Adaptor::Drawable& drawableImpl = Dali::GetImplementation(drawable);
+  tvg::Paint*                  pDrawable    = static_cast<tvg::Paint*>(drawableImpl.GetObject());
+  if(!pDrawable)
+  {
+    DALI_LOG_ERROR("Invalid drawable object [%p]\n", this);
+    return false;
+  }
+
+  if(drawableImpl.IsDrawableAdded())
+  {
+    DALI_LOG_ERROR("Already added somewhere [%p][%p]\n", this, &drawable);
+    return false;
+  }
+
+  if(mTvgScene->push(std::unique_ptr<tvg::Paint>(pDrawable)) != tvg::Result::Success)
+  {
+    DALI_LOG_ERROR("Tvg push fail [%p]\n", this);
+    return false;
+  }
+
+  drawableImpl.SetDrawableAdded(true);
+  mDrawables.push_back(drawable);
+  Drawable::SetChanged(true);
+
+  return true;
+#else
+  return false;
+#endif
+}
+
+bool DrawableGroupTizen::Clear()
+{
+#ifdef THORVG_SUPPORT
+  if(!mTvgScene)
+  {
+    DALI_LOG_ERROR("DrawableGroup is null\n");
+    return false;
+  }
+
+  for(auto& it : mDrawables)
+  {
+    Dali::CanvasRenderer::Drawable drawable = it.GetHandle();
+    if(DALI_UNLIKELY(!drawable))
+    {
+      continue;
+    }
+    Internal::Adaptor::Drawable& drawableImpl = Dali::GetImplementation(drawable);
+    drawableImpl.SetDrawableAdded(false);
+  }
+
+  mDrawables.clear();
+
+  if(static_cast<tvg::Scene*>(mTvgScene)->clear() != tvg::Result::Success)
+  {
+    DALI_LOG_ERROR("Clear() fail.\n");
+    return false;
+  }
+
+  Drawable::SetChanged(true);
+
+  return true;
+#else
+  return false;
+#endif
+}
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.h b/dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.h
new file mode 100644 (file)
index 0000000..dd9acfd
--- /dev/null
@@ -0,0 +1,97 @@
+#ifndef DALI_INTERNAL_TIZEN_DRAWABLE_GROUP_IMPL_TIZEN_H
+#define DALI_INTERNAL_TIZEN_DRAWABLE_GROUP_IMPL_TIZEN_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#ifdef THORVG_SUPPORT
+#include <thorvg.h>
+#endif
+#include <dali/public-api/object/base-object.h>
+#include <dali/public-api/object/weak-handle.h>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h>
+#include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+/**
+ * Dali internal DrawableGroup.
+ */
+class DrawableGroupTizen : public Dali::Internal::Adaptor::DrawableGroup
+{
+public:
+  /**
+   * @brief Creates a DrawableGroup object.
+   * @return A pointer to a newly allocated drawablegroup
+   */
+  static DrawableGroupTizen* New();
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::AddDrawable()
+   */
+  bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::Clear
+   */
+  bool Clear() override;
+
+private:
+  DrawableGroupTizen(const DrawableGroupTizen&) = delete;
+  DrawableGroupTizen& operator=(DrawableGroupTizen&) = delete;
+  DrawableGroupTizen(DrawableGroupTizen&&)           = delete;
+  DrawableGroupTizen& operator=(DrawableGroupTizen&&) = delete;
+
+  /**
+   * @brief Constructor
+   */
+  DrawableGroupTizen();
+
+  /**
+   * @brief Destructor.
+   */
+  virtual ~DrawableGroupTizen() override;
+
+private:
+  /**
+   * @brief Initializes member data.
+   */
+  void Initialize();
+
+private:
+#ifdef THORVG_SUPPORT
+  tvg::Scene* mTvgScene;
+#endif
+  using DrawableVector         = std::vector<WeakHandle<Dali::CanvasRenderer::Drawable>>;
+  using DrawableVectorIterator = DrawableVector::iterator;
+  DrawableVector mDrawables;
+};
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
+
+#endif // DALI_INTERNAL_TIZEN_DRAWABLE_GROUP_IMPL_TIZEN_H
index a3b453e..7978cae 100644 (file)
@@ -191,6 +191,11 @@ void DrawableTizen::SetDrawableAdded(bool added)
   mAdded = !!added;
 }
 
+bool DrawableTizen::IsDrawableAdded()
+{
+  return mAdded;
+}
+
 void* DrawableTizen::GetObject() const
 {
 #ifdef THORVG_SUPPORT
index 836dd57..fb1a2cb 100644 (file)
@@ -84,6 +84,11 @@ public:
   void SetDrawableAdded(bool added) override;
 
   /**
+   * @copydoc Internal::Adaptor::Drawable::IsDrawableAdded
+   */
+  bool IsDrawableAdded() override;
+
+  /**
    * @copydoc Internal::Adaptor::Drawable::SetObject
    */
   void* GetObject() const override;
index 89c724a..191beea 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index 3b6fdb0..5fd56a9 100644 (file)
@@ -174,6 +174,9 @@ private:
   virtual ~ShapeTizen() override;
 
 private:
+  /**
+   * @brief Initializes member data.
+   */
   void Initialize();
 
 #ifdef THORVG_SUPPORT
index 058a48f..7a4919b 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index b3ea460..de5188a 100644 (file)
@@ -111,9 +111,9 @@ private:
   std::unique_ptr<tvg::SwCanvas> mTvgCanvas;
   tvg::Scene*                    mTvgRoot;
 #endif
-  typedef std::vector<WeakHandle<Dali::CanvasRenderer::Drawable> > DrawableVector;
-  typedef DrawableVector::iterator                                 DrawableVectorIterator;
-  DrawableVector                                                   mDrawables;
+  using DrawableVector         = std::vector<WeakHandle<Dali::CanvasRenderer::Drawable>>;
+  using DrawableVectorIterator = DrawableVector::iterator;
+  DrawableVector mDrawables;
 
   Vector2 mSize;
   Vector2 mViewBox;
index c4fe443..5dd5bef 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-group-factory-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/drawable-group-factory-ubuntu.cpp
new file mode 100644 (file)
index 0000000..b19895c
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+#include <dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace DrawableGroupFactory
+{
+Dali::Internal::Adaptor::DrawableGroup* New()
+{
+  return Dali::Internal::Adaptor::DrawableGroupUbuntu::New();
+}
+
+} // namespace DrawableGroupFactory
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.cpp
new file mode 100644 (file)
index 0000000..60b4fb2
--- /dev/null
@@ -0,0 +1,159 @@
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// CLASS HEADER
+#include <dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.h>
+
+// EXTERNAL INCLUDES
+#include <dali/integration-api/debug.h>
+#include <dali/public-api/object/type-registry.h>
+
+// INTERNAL INCLUDES
+#include <dali/internal/canvas-renderer/common/drawable-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+namespace // unnamed namespace
+{
+// Type Registration
+Dali::BaseHandle Create()
+{
+  return Dali::BaseHandle();
+}
+
+Dali::TypeRegistration type(typeid(Dali::CanvasRenderer::DrawableGroup), typeid(Dali::BaseHandle), Create);
+
+} // unnamed namespace
+
+DrawableGroupUbuntu* DrawableGroupUbuntu::New()
+{
+  return new DrawableGroupUbuntu();
+}
+
+DrawableGroupUbuntu::DrawableGroupUbuntu()
+#ifdef THORVG_SUPPORT
+: mTvgScene(nullptr)
+#endif
+{
+  Initialize();
+}
+
+DrawableGroupUbuntu::~DrawableGroupUbuntu()
+{
+}
+
+void DrawableGroupUbuntu::Initialize()
+{
+#ifdef THORVG_SUPPORT
+  mTvgScene = tvg::Scene::gen().release();
+  if(!mTvgScene)
+  {
+    DALI_LOG_ERROR("DrawableGroup is null [%p]\n", this);
+  }
+
+  Drawable::Create();
+  Drawable::SetObject(static_cast<void*>(mTvgScene));
+#endif
+}
+
+bool DrawableGroupUbuntu::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
+{
+#ifdef THORVG_SUPPORT
+  for(auto& it : mDrawables)
+  {
+    if(it.GetHandle() == drawable)
+    {
+      DALI_LOG_ERROR("Already added [%p][%p]\n", this, &drawable);
+      return false;
+    }
+  }
+
+  Internal::Adaptor::Drawable& drawableImpl = Dali::GetImplementation(drawable);
+  tvg::Paint*                  pDrawable    = static_cast<tvg::Paint*>(drawableImpl.GetObject());
+  if(!pDrawable)
+  {
+    DALI_LOG_ERROR("Invalid drawable object [%p]\n", this);
+    return false;
+  }
+
+  if(drawableImpl.IsDrawableAdded())
+  {
+    DALI_LOG_ERROR("Already added somewhere [%p][%p]\n", this, &drawable);
+    return false;
+  }
+
+  if(mTvgScene->push(std::unique_ptr<tvg::Paint>(pDrawable)) != tvg::Result::Success)
+  {
+    DALI_LOG_ERROR("Tvg push fail [%p]\n", this);
+    return false;
+  }
+
+  drawableImpl.SetDrawableAdded(true);
+  mDrawables.push_back(drawable);
+  Drawable::SetChanged(true);
+
+  return true;
+#else
+  return false;
+#endif
+}
+
+bool DrawableGroupUbuntu::Clear()
+{
+#ifdef THORVG_SUPPORT
+  if(!mTvgScene)
+  {
+    DALI_LOG_ERROR("DrawableGroup is null\n");
+    return false;
+  }
+
+  for(auto& it : mDrawables)
+  {
+    Dali::CanvasRenderer::Drawable drawable = it.GetHandle();
+    if(DALI_UNLIKELY(!drawable))
+    {
+      continue;
+    }
+    Internal::Adaptor::Drawable& drawableImpl = Dali::GetImplementation(drawable);
+    drawableImpl.SetDrawableAdded(false);
+  }
+
+  mDrawables.clear();
+
+  if(static_cast<tvg::Scene*>(mTvgScene)->clear() != tvg::Result::Success)
+  {
+    DALI_LOG_ERROR("Clear() fail.\n");
+    return false;
+  }
+
+  Drawable::SetChanged(true);
+
+  return true;
+#else
+  return false;
+#endif
+}
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.h b/dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.h
new file mode 100644 (file)
index 0000000..4b01b41
--- /dev/null
@@ -0,0 +1,97 @@
+#ifndef DALI_INTERNAL_UBUNTU_DRAWABLE_GROUP_IMPL_UBUNTU_H
+#define DALI_INTERNAL_UBUNTU_DRAWABLE_GROUP_IMPL_UBUNTU_H
+
+/*
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ *
+ */
+
+// EXTERNAL INCLUDES
+#ifdef THORVG_SUPPORT
+#include <thorvg.h>
+#endif
+#include <dali/public-api/object/base-object.h>
+#include <dali/public-api/object/weak-handle.h>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h>
+#include <dali/internal/canvas-renderer/common/drawable-group-impl.h>
+
+namespace Dali
+{
+namespace Internal
+{
+namespace Adaptor
+{
+/**
+ * Dali internal DrawableGroup.
+ */
+class DrawableGroupUbuntu : public Dali::Internal::Adaptor::DrawableGroup
+{
+public:
+  /**
+   * @brief Creates a DrawableGroup object.
+   * @return A pointer to a newly allocated drawablegroup
+   */
+  static DrawableGroupUbuntu* New();
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::AddDrawable()
+   */
+  bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable) override;
+
+  /**
+   * @copydoc Dali::CanvasRenderer::DrawableGroup::Clear
+   */
+  bool Clear() override;
+
+private:
+  DrawableGroupUbuntu(const DrawableGroupUbuntu&) = delete;
+  DrawableGroupUbuntu& operator=(DrawableGroupUbuntu&) = delete;
+  DrawableGroupUbuntu(DrawableGroupUbuntu&&)           = delete;
+  DrawableGroupUbuntu& operator=(DrawableGroupUbuntu&&) = delete;
+
+  /**
+   * @brief Constructor
+   */
+  DrawableGroupUbuntu();
+
+  /**
+   * @brief Destructor.
+   */
+  virtual ~DrawableGroupUbuntu() override;
+
+private:
+  /**
+   * @brief Initializes member data.
+   */
+  void Initialize();
+
+private:
+#ifdef THORVG_SUPPORT
+  tvg::Scene* mTvgScene;
+#endif
+  using DrawableVector         = std::vector<WeakHandle<Dali::CanvasRenderer::Drawable>>;
+  using DrawableVectorIterator = DrawableVector::iterator;
+  DrawableVector mDrawables;
+};
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
+
+#endif // DALI_INTERNAL_UBUNTU_DRAWABLE_GROUP_IMPL_UBUNTU_H
index cc3de91..55cc6f6 100644 (file)
@@ -191,6 +191,11 @@ void DrawableUbuntu::SetDrawableAdded(bool added)
   mAdded = !!added;
 }
 
+bool DrawableUbuntu::IsDrawableAdded()
+{
+  return mAdded;
+}
+
 void* DrawableUbuntu::GetObject() const
 {
 #ifdef THORVG_SUPPORT
index 10451e8..def6c3a 100644 (file)
@@ -79,11 +79,16 @@ public:
   bool Transform(const Dali::Matrix3& matrix) override;
 
   /**
-   * @copydoc Internal::Adaptor::Drawable::SetdrawableAdded
+   * @copydoc Internal::Adaptor::Drawable::SetDrawableAdded
    */
   void SetDrawableAdded(bool added) override;
 
   /**
+   * @copydoc Internal::Adaptor::Drawable::IsDrawableAdded
+   */
+  bool IsDrawableAdded() override;
+
+  /**
    * @copydoc Internal::Adaptor::Drawable::SetObject
    */
   void* GetObject() const override;
index 5b56929..975f84e 100644 (file)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2014 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
index bd4b087..0225e4a 100644 (file)
@@ -174,6 +174,9 @@ private:
   virtual ~ShapeUbuntu() override;
 
 private:
+  /**
+   * @brief Initializes member data.
+   */
   void Initialize();
 
 #ifdef THORVG_SUPPORT