From 0b4e0176b41f88be8c5408d1134ad6a374bb7bf3 Mon Sep 17 00:00:00 2001 From: JunsuChoi Date: Tue, 27 Apr 2021 15:31:04 +0900 Subject: [PATCH] Add CanvasRenderer::DrawableGroup class 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 --- .../canvas-renderer-drawable-group.cpp | 56 ++++++++ .../canvas-renderer-drawable-group.h | 110 ++++++++++++++ dali/devel-api/adaptor-framework/canvas-renderer.h | 1 + dali/devel-api/file.list | 2 + .../common/drawable-group-factory.cpp | 41 ++++++ .../common/drawable-group-factory.h | 46 ++++++ .../canvas-renderer/common/drawable-group-impl.cpp | 45 ++++++ .../canvas-renderer/common/drawable-group-impl.h | 90 ++++++++++++ .../canvas-renderer/common/drawable-impl.cpp | 9 ++ .../canvas-renderer/common/drawable-impl.h | 6 + dali/internal/canvas-renderer/file.list | 15 ++ .../generic/canvas-renderer-factory-generic.cpp | 2 +- .../generic/drawable-factory-generic.cpp | 2 +- .../generic/drawable-group-factory-generic.cpp | 39 +++++ .../generic/drawable-group-impl-generic.cpp | 69 +++++++++ .../generic/drawable-group-impl-generic.h | 79 ++++++++++ .../generic/drawable-impl-generic.cpp | 5 + .../generic/drawable-impl-generic.h | 5 + .../generic/shape-factory-generic.cpp | 2 +- .../tizen/canvas-renderer-factory-tizen.cpp | 2 +- .../tizen/canvas-renderer-impl-tizen.h | 6 +- .../tizen/drawable-factory-tizen.cpp | 2 +- .../tizen/drawable-group-factory-tizen.cpp | 39 +++++ .../tizen/drawable-group-impl-tizen.cpp | 159 +++++++++++++++++++++ .../tizen/drawable-group-impl-tizen.h | 97 +++++++++++++ .../canvas-renderer/tizen/drawable-impl-tizen.cpp | 5 + .../canvas-renderer/tizen/drawable-impl-tizen.h | 5 + .../canvas-renderer/tizen/shape-factory-tizen.cpp | 2 +- .../canvas-renderer/tizen/shape-impl-tizen.h | 3 + .../ubuntu/canvas-renderer-factory-ubuntu.cpp | 2 +- .../ubuntu/canvas-renderer-impl-ubuntu.h | 6 +- .../ubuntu/drawable-factory-ubuntu.cpp | 2 +- .../ubuntu/drawable-group-factory-ubuntu.cpp | 39 +++++ .../ubuntu/drawable-group-impl-ubuntu.cpp | 159 +++++++++++++++++++++ .../ubuntu/drawable-group-impl-ubuntu.h | 97 +++++++++++++ .../ubuntu/drawable-impl-ubuntu.cpp | 5 + .../canvas-renderer/ubuntu/drawable-impl-ubuntu.h | 7 +- .../ubuntu/shape-factory-ubuntu.cpp | 2 +- .../canvas-renderer/ubuntu/shape-impl-ubuntu.h | 3 + 39 files changed, 1250 insertions(+), 16 deletions(-) create mode 100644 dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.cpp create mode 100644 dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h create mode 100644 dali/internal/canvas-renderer/common/drawable-group-factory.cpp create mode 100644 dali/internal/canvas-renderer/common/drawable-group-factory.h create mode 100644 dali/internal/canvas-renderer/common/drawable-group-impl.cpp create mode 100644 dali/internal/canvas-renderer/common/drawable-group-impl.h create mode 100644 dali/internal/canvas-renderer/generic/drawable-group-factory-generic.cpp create mode 100644 dali/internal/canvas-renderer/generic/drawable-group-impl-generic.cpp create mode 100644 dali/internal/canvas-renderer/generic/drawable-group-impl-generic.h create mode 100644 dali/internal/canvas-renderer/tizen/drawable-group-factory-tizen.cpp create mode 100644 dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.cpp create mode 100644 dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.h create mode 100644 dali/internal/canvas-renderer/ubuntu/drawable-group-factory-ubuntu.cpp create mode 100644 dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.cpp create mode 100644 dali/internal/canvas-renderer/ubuntu/drawable-group-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 index 0000000..da7d450 --- /dev/null +++ b/dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.cpp @@ -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 + +// INTERNAL INCLUDES +#include +#include +#include + +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 index 0000000..ae2dded --- /dev/null +++ b/dali/devel-api/adaptor-framework/canvas-renderer-drawable-group.h @@ -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 + +// INTERNAL INCLUDES +#include +#include +#include + +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 diff --git a/dali/devel-api/adaptor-framework/canvas-renderer.h b/dali/devel-api/adaptor-framework/canvas-renderer.h index 9216ced..3d866b8 100644 --- a/dali/devel-api/adaptor-framework/canvas-renderer.h +++ b/dali/devel-api/adaptor-framework/canvas-renderer.h @@ -84,6 +84,7 @@ public: public: class Drawable; class Shape; + class DrawableGroup; public: /** diff --git a/dali/devel-api/file.list b/dali/devel-api/file.list index 9564cc7..afabe67 100755 --- a/dali/devel-api/file.list +++ b/dali/devel-api/file.list @@ -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 index 0000000..e462c8e --- /dev/null +++ b/dali/internal/canvas-renderer/common/drawable-group-factory.cpp @@ -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 +#include + +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 index 0000000..7ccc996 --- /dev/null +++ b/dali/internal/canvas-renderer/common/drawable-group-factory.h @@ -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 + +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 index 0000000..ff3132f --- /dev/null +++ b/dali/internal/canvas-renderer/common/drawable-group-impl.cpp @@ -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 + +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 index 0000000..5a22054 --- /dev/null +++ b/dali/internal/canvas-renderer/common/drawable-group-impl.h @@ -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 + +// INTERNAL INCLUDES +#include +#include + +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(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(handle); +} + +} // namespace Dali + +#endif // DALI_INTERNAL_DRAWABLE_GROUP_IMPL_H diff --git a/dali/internal/canvas-renderer/common/drawable-impl.cpp b/dali/internal/canvas-renderer/common/drawable-impl.cpp index 27e6e05..8c0decf 100644 --- a/dali/internal/canvas-renderer/common/drawable-impl.cpp +++ b/dali/internal/canvas-renderer/common/drawable-impl.cpp @@ -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) diff --git a/dali/internal/canvas-renderer/common/drawable-impl.h b/dali/internal/canvas-renderer/common/drawable-impl.h index ed302d3..10e25f5 100644 --- a/dali/internal/canvas-renderer/common/drawable-impl.h +++ b/dali/internal/canvas-renderer/common/drawable-impl.h @@ -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. */ diff --git a/dali/internal/canvas-renderer/file.list b/dali/internal/canvas-renderer/file.list index baa5950..7152811 100644 --- a/dali/internal/canvas-renderer/file.list +++ b/dali/internal/canvas-renderer/file.list @@ -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 ) diff --git a/dali/internal/canvas-renderer/generic/canvas-renderer-factory-generic.cpp b/dali/internal/canvas-renderer/generic/canvas-renderer-factory-generic.cpp index 1d0e527..0ee7671 100644 --- a/dali/internal/canvas-renderer/generic/canvas-renderer-factory-generic.cpp +++ b/dali/internal/canvas-renderer/generic/canvas-renderer-factory-generic.cpp @@ -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-factory-generic.cpp b/dali/internal/canvas-renderer/generic/drawable-factory-generic.cpp index 77f85d5..b3065d8 100644 --- a/dali/internal/canvas-renderer/generic/drawable-factory-generic.cpp +++ b/dali/internal/canvas-renderer/generic/drawable-factory-generic.cpp @@ -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 index 0000000..0b38bc1 --- /dev/null +++ b/dali/internal/canvas-renderer/generic/drawable-group-factory-generic.cpp @@ -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 + +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 index 0000000..a1de291 --- /dev/null +++ b/dali/internal/canvas-renderer/generic/drawable-group-impl-generic.cpp @@ -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 + +// EXTERNAL INCLUDES +#include + +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 index 0000000..09f22f7 --- /dev/null +++ b/dali/internal/canvas-renderer/generic/drawable-group-impl-generic.h @@ -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 + +// INTERNAL INCLUDES +#include +#include + +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 diff --git a/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp b/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp index b9755a6..de3f80a 100644 --- a/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp +++ b/dali/internal/canvas-renderer/generic/drawable-impl-generic.cpp @@ -87,6 +87,11 @@ void DrawableGeneric::SetDrawableAdded(bool added) { } +bool DrawableGeneric::IsDrawableAdded() +{ + return false; +} + void DrawableGeneric::SetObject(const void* object) { } diff --git a/dali/internal/canvas-renderer/generic/drawable-impl-generic.h b/dali/internal/canvas-renderer/generic/drawable-impl-generic.h index e5af808..00a92bb 100644 --- a/dali/internal/canvas-renderer/generic/drawable-impl-generic.h +++ b/dali/internal/canvas-renderer/generic/drawable-impl-generic.h @@ -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; diff --git a/dali/internal/canvas-renderer/generic/shape-factory-generic.cpp b/dali/internal/canvas-renderer/generic/shape-factory-generic.cpp index 172e496..9fc5a0e 100644 --- a/dali/internal/canvas-renderer/generic/shape-factory-generic.cpp +++ b/dali/internal/canvas-renderer/generic/shape-factory-generic.cpp @@ -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/canvas-renderer-factory-tizen.cpp b/dali/internal/canvas-renderer/tizen/canvas-renderer-factory-tizen.cpp index bad2472..64cd98c 100644 --- a/dali/internal/canvas-renderer/tizen/canvas-renderer-factory-tizen.cpp +++ b/dali/internal/canvas-renderer/tizen/canvas-renderer-factory-tizen.cpp @@ -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/canvas-renderer-impl-tizen.h b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h index eea66be..a6f4e1f 100644 --- a/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h +++ b/dali/internal/canvas-renderer/tizen/canvas-renderer-impl-tizen.h @@ -110,9 +110,9 @@ private: std::unique_ptr mTvgCanvas; tvg::Scene* mTvgRoot; #endif - typedef std::vector > DrawableVector; - typedef DrawableVector::iterator DrawableVectorIterator; - DrawableVector mDrawables; + using DrawableVector = std::vector>; + using DrawableVectorIterator = DrawableVector::iterator; + DrawableVector mDrawables; Vector2 mSize; Vector2 mViewBox; diff --git a/dali/internal/canvas-renderer/tizen/drawable-factory-tizen.cpp b/dali/internal/canvas-renderer/tizen/drawable-factory-tizen.cpp index a0800ea..8618279 100644 --- a/dali/internal/canvas-renderer/tizen/drawable-factory-tizen.cpp +++ b/dali/internal/canvas-renderer/tizen/drawable-factory-tizen.cpp @@ -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 index 0000000..5728042 --- /dev/null +++ b/dali/internal/canvas-renderer/tizen/drawable-group-factory-tizen.cpp @@ -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 + +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 index 0000000..45c8824 --- /dev/null +++ b/dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.cpp @@ -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 + +// EXTERNAL INCLUDES +#include +#include + +// INTERNAL INCLUDES +#include + +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(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(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(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(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 index 0000000..dd9acfd --- /dev/null +++ b/dali/internal/canvas-renderer/tizen/drawable-group-impl-tizen.h @@ -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 +#endif +#include +#include + +// INTERNAL INCLUDES +#include +#include + +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>; + using DrawableVectorIterator = DrawableVector::iterator; + DrawableVector mDrawables; +}; + +} // namespace Adaptor + +} // namespace Internal + +} // namespace Dali + +#endif // DALI_INTERNAL_TIZEN_DRAWABLE_GROUP_IMPL_TIZEN_H diff --git a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp index a3b453e..7978cae 100644 --- a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp +++ b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.cpp @@ -191,6 +191,11 @@ void DrawableTizen::SetDrawableAdded(bool added) mAdded = !!added; } +bool DrawableTizen::IsDrawableAdded() +{ + return mAdded; +} + void* DrawableTizen::GetObject() const { #ifdef THORVG_SUPPORT diff --git a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h index 836dd57..fb1a2cb 100644 --- a/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h +++ b/dali/internal/canvas-renderer/tizen/drawable-impl-tizen.h @@ -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; diff --git a/dali/internal/canvas-renderer/tizen/shape-factory-tizen.cpp b/dali/internal/canvas-renderer/tizen/shape-factory-tizen.cpp index 89c724a..191beea 100644 --- a/dali/internal/canvas-renderer/tizen/shape-factory-tizen.cpp +++ b/dali/internal/canvas-renderer/tizen/shape-factory-tizen.cpp @@ -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/shape-impl-tizen.h b/dali/internal/canvas-renderer/tizen/shape-impl-tizen.h index 3b6fdb0..5fd56a9 100644 --- a/dali/internal/canvas-renderer/tizen/shape-impl-tizen.h +++ b/dali/internal/canvas-renderer/tizen/shape-impl-tizen.h @@ -174,6 +174,9 @@ private: virtual ~ShapeTizen() override; private: + /** + * @brief Initializes member data. + */ void Initialize(); #ifdef THORVG_SUPPORT diff --git a/dali/internal/canvas-renderer/ubuntu/canvas-renderer-factory-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-factory-ubuntu.cpp index 058a48f..7a4919b 100644 --- a/dali/internal/canvas-renderer/ubuntu/canvas-renderer-factory-ubuntu.cpp +++ b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-factory-ubuntu.cpp @@ -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/canvas-renderer-impl-ubuntu.h b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h index b3ea460..de5188a 100644 --- a/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h +++ b/dali/internal/canvas-renderer/ubuntu/canvas-renderer-impl-ubuntu.h @@ -111,9 +111,9 @@ private: std::unique_ptr mTvgCanvas; tvg::Scene* mTvgRoot; #endif - typedef std::vector > DrawableVector; - typedef DrawableVector::iterator DrawableVectorIterator; - DrawableVector mDrawables; + using DrawableVector = std::vector>; + using DrawableVectorIterator = DrawableVector::iterator; + DrawableVector mDrawables; Vector2 mSize; Vector2 mViewBox; diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-factory-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/drawable-factory-ubuntu.cpp index c4fe443..5dd5bef 100644 --- a/dali/internal/canvas-renderer/ubuntu/drawable-factory-ubuntu.cpp +++ b/dali/internal/canvas-renderer/ubuntu/drawable-factory-ubuntu.cpp @@ -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 index 0000000..b19895c --- /dev/null +++ b/dali/internal/canvas-renderer/ubuntu/drawable-group-factory-ubuntu.cpp @@ -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 + +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 index 0000000..60b4fb2 --- /dev/null +++ b/dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.cpp @@ -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 + +// EXTERNAL INCLUDES +#include +#include + +// INTERNAL INCLUDES +#include + +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(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(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(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(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 index 0000000..4b01b41 --- /dev/null +++ b/dali/internal/canvas-renderer/ubuntu/drawable-group-impl-ubuntu.h @@ -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 +#endif +#include +#include + +// INTERNAL INCLUDES +#include +#include + +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>; + using DrawableVectorIterator = DrawableVector::iterator; + DrawableVector mDrawables; +}; + +} // namespace Adaptor + +} // namespace Internal + +} // namespace Dali + +#endif // DALI_INTERNAL_UBUNTU_DRAWABLE_GROUP_IMPL_UBUNTU_H diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp index cc3de91..55cc6f6 100644 --- a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp +++ b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.cpp @@ -191,6 +191,11 @@ void DrawableUbuntu::SetDrawableAdded(bool added) mAdded = !!added; } +bool DrawableUbuntu::IsDrawableAdded() +{ + return mAdded; +} + void* DrawableUbuntu::GetObject() const { #ifdef THORVG_SUPPORT diff --git a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h index 10451e8..def6c3a 100644 --- a/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h +++ b/dali/internal/canvas-renderer/ubuntu/drawable-impl-ubuntu.h @@ -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; diff --git a/dali/internal/canvas-renderer/ubuntu/shape-factory-ubuntu.cpp b/dali/internal/canvas-renderer/ubuntu/shape-factory-ubuntu.cpp index 5b56929..975f84e 100644 --- a/dali/internal/canvas-renderer/ubuntu/shape-factory-ubuntu.cpp +++ b/dali/internal/canvas-renderer/ubuntu/shape-factory-ubuntu.cpp @@ -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/shape-impl-ubuntu.h b/dali/internal/canvas-renderer/ubuntu/shape-impl-ubuntu.h index bd4b087..0225e4a 100644 --- a/dali/internal/canvas-renderer/ubuntu/shape-impl-ubuntu.h +++ b/dali/internal/canvas-renderer/ubuntu/shape-impl-ubuntu.h @@ -174,6 +174,9 @@ private: virtual ~ShapeUbuntu() override; private: + /** + * @brief Initializes member data. + */ void Initialize(); #ifdef THORVG_SUPPORT -- 2.7.4