The SvgVisual of dali-toolkit will use this instead of nanovg.
And this will use dali-extension which is using tizenvg.
Change-Id: Ic9dc1c68cf3ab266036848b32276b72920c33a71
SET( adaptor_vector_animation_dir ${ADAPTOR_ROOT}/dali/internal/vector-animation )
include( ${ADAPTOR_ROOT}/dali/internal/vector-animation/file.list )
+SET( adaptor_vector_image_dir ${ADAPTOR_ROOT}/dali/internal/vector-image )
+include( ${ADAPTOR_ROOT}/dali/internal/vector-image/file.list )
+
SET( adaptor_public_api_dir ${ADAPTOR_ROOT}/dali/public-api )
include( ${ADAPTOR_ROOT}/dali/public-api/file.list )
SET( adaptor_vector_animation_dir ${ADAPTOR_ROOT}/dali/internal/vector-animation )
include( ${ADAPTOR_ROOT}/dali/internal/vector-animation/file.list )
+SET( adaptor_vector_image_dir ${ADAPTOR_ROOT}/dali/internal/vector-image )
+include( ${ADAPTOR_ROOT}/dali/internal/vector-image/file.list )
+
SET( adaptor_public_api_dir ${ADAPTOR_ROOT}/dali/public-api )
include( ${ADAPTOR_ROOT}/dali/public-api/file.list )
${adaptor_text_common_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
${adaptor_text_common_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
${adaptor_text_common_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
${adaptor_text_common_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
${adaptor_text_common_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
${adaptor_text_ubuntu_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
${adaptor_text_common_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
${adaptor_text_common_src_files}
${adaptor_resampler_src_files}
${adaptor_vector_animation_common_src_files}
+ ${adaptor_vector_image_common_src_files}
${adaptor_video_common_src_files}
${adaptor_web_engine_common_src_files}
${adaptor_window_system_common_src_files}
--- /dev/null
+#ifndef DALI_VECTOR_IMAGE_RENDERER_PLUGIN_H
+#define DALI_VECTOR_IMAGE_RENDERER_PLUGIN_H
+
+/*
+ * Copyright (c) 2020 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 <string>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/vector-image-renderer.h>
+#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
+
+namespace Dali
+{
+
+/**
+ * VectorImageRendererPlugin is an abstract interface, used by dali-adaptor to render a vector image(SVG).
+ * A concrete implementation must be created for each platform and provided as a dynamic library which
+ * will be loaded at run time by the adaptor.
+ */
+class VectorImageRendererPlugin
+{
+public:
+ /**
+ * @brief Constructor
+ */
+ VectorImageRendererPlugin() {}
+
+ /**
+ * @brief Destructor
+ */
+ virtual ~VectorImageRendererPlugin() {}
+
+ /**
+ * @brief Second-phase constructor.
+ */
+ virtual bool Initialize() = 0;
+
+ /**
+ * @brief Sets the target buffer.
+ *
+ * @param[in] buffer The target buffer
+ */
+ virtual void SetBuffer( Dali::Devel::PixelBuffer &buffer ) = 0;
+
+ /**
+ * @brief Renders the content to the target buffer synchronously.
+ *
+ * @param[in] scale The target image scale
+ * @return True if the rendering success, false otherwise.
+ */
+ virtual bool Render(float scale) = 0;
+
+ /**
+ * @brief Load vector image data form url.
+ *
+ * @param[in] url The url of the vector image file
+ * @return True if the load success, false otherwise.
+ */
+ virtual bool Load( const std::string& url ) = 0;
+
+ /**
+ * @brief Load vector image data directly.
+ *
+ * @param[in] data The memory data of vector image
+ * @param[in] size The size of memory data
+ * @return True if the load success, false otherwise.
+ */
+ virtual bool Load( const char *data, uint32_t size ) = 0;
+
+ /**
+ * @brief Gets the default size of the file.
+ *
+ * @param[out] width The default width of the file
+ * @param[out] height The default height of the file
+ */
+ virtual void GetDefaultSize( uint32_t& width, uint32_t& height ) const = 0;
+
+ /**
+ * @brief Function pointer called in adaptor to create a plugin instance.
+ */
+ using CreateVectorImageRendererFunction = VectorImageRendererPlugin* (*)();
+};
+
+} // namespace Dali
+#endif // DALI_VECTOR_IMAGE_RENDERER_PLUGIN_H
--- /dev/null
+/*
+ * Copyright (c) 2020 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/vector-image-renderer.h>
+
+// INTERNAL INCLUDES
+#include <dali/internal/vector-image/common/vector-image-renderer-impl.h>
+
+namespace Dali
+{
+
+VectorImageRenderer VectorImageRenderer::New()
+{
+ Internal::Adaptor::VectorImageRendererPtr imageRenderer = Internal::Adaptor::VectorImageRenderer::New();
+ if( imageRenderer )
+ {
+ imageRenderer->Initialize();
+ }
+
+ return VectorImageRenderer( imageRenderer.Get() );
+}
+
+VectorImageRenderer::VectorImageRenderer()
+{
+}
+
+VectorImageRenderer::~VectorImageRenderer()
+{
+}
+
+VectorImageRenderer::VectorImageRenderer( Internal::Adaptor::VectorImageRenderer* internal )
+: BaseHandle( internal )
+{
+}
+
+void VectorImageRenderer::SetBuffer( Dali::Devel::PixelBuffer &buffer )
+{
+ GetImplementation( *this ).SetBuffer( buffer );
+}
+
+bool VectorImageRenderer::Render(float scale)
+{
+ return GetImplementation( *this ).Render(scale);
+}
+
+bool VectorImageRenderer::Load( const std::string& url )
+{
+ return GetImplementation( *this ).Load( url );
+}
+
+bool VectorImageRenderer::Load( const char *data, uint32_t size )
+{
+ return GetImplementation( *this ).Load( data, size );
+}
+
+void VectorImageRenderer::GetDefaultSize( uint32_t& width, uint32_t& height ) const
+{
+ GetImplementation( *this ).GetDefaultSize( width, height );
+}
+
+} // namespace Dali
--- /dev/null
+#ifndef DALI_VECTOR_IMAGE_RENDERER_H
+#define DALI_VECTOR_IMAGE_RENDERER_H
+
+/*
+ * Copyright (c) 2020 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/public-api/dali-adaptor-common.h>
+#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
+
+namespace Dali
+{
+/**
+ * @addtogroup dali_adaptor_framework
+ * @{
+ */
+
+namespace Internal DALI_INTERNAL
+{
+namespace Adaptor
+{
+class VectorImageRenderer;
+}
+}
+
+/**
+ * @brief Used for rendering a vector image file (SVG)
+ */
+class DALI_ADAPTOR_API VectorImageRenderer : public BaseHandle
+{
+public:
+
+ /**
+ * @brief Creates an initialized handle to a new VectorImageRenderer.
+ *
+ * @return A handle to a newly allocated VectorImageRenderer
+ */
+ static VectorImageRenderer New();
+
+
+ /**
+ * @brief Creates an empty handle.
+ * Use VectorImageRenderer::New() to create an initialized object.
+ */
+ VectorImageRenderer();
+
+ /**
+ * @brief Destructor.
+ */
+ ~VectorImageRenderer();
+
+ /**
+ * @brief This copy constructor is required for (smart) pointer semantics.
+ *
+ * @param[in] handle A reference to the copied handle
+ */
+ VectorImageRenderer( const VectorImageRenderer& handle ) = default;
+
+ /**
+ * @brief This assignment operator is required for (smart) pointer semantics.
+ *
+ * @param[in] rhs A reference to the copied handle
+ * @return A reference to this
+ */
+ VectorImageRenderer& operator=( const VectorImageRenderer& rhs ) = default;
+
+ /**
+ * @brief Sets the target buffer.
+ *
+ * @param[in] buffer The target buffer
+ */
+ void SetBuffer( Dali::Devel::PixelBuffer &buffer );
+
+ /**
+ * @brief Renders the content to the target buffer synchronously.
+ *
+ * @param[in] scale The target image scale
+ * @return True if the rendering success, false otherwise.
+ */
+ bool Render( float scale );
+
+ /**
+ * @brief Load vector image data form url.
+ *
+ * @param[in] url The url of the vector image file
+ * @return True if the rendering success, false otherwise.
+ */
+ bool Load( const std::string& url );
+
+ /**
+ * @brief Load vector image data directly.
+ *
+ * @param[in] data The memory data of vector image
+ * @param[in] size The size of memory data
+ * @return True if the load success, false otherwise.
+ */
+ bool Load( const char *data, uint32_t size );
+
+ /**
+ * @brief Gets the default size of the file.
+ *
+ * @param[out] width The default width of the file
+ * @param[out] height The default height of the file
+ */
+ void GetDefaultSize( uint32_t& width, uint32_t& height ) const;
+
+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 VectorImageRenderer
+ */
+ explicit DALI_INTERNAL VectorImageRenderer( Internal::Adaptor::VectorImageRenderer* internal );
+ /// @endcond
+
+};
+
+/**
+ * @}
+ */
+} // namespace Dali
+
+#endif // DALI_VECTOR_IMAGE_RENDERER_H
${adaptor_devel_api_dir}/adaptor-framework/tilt-sensor.cpp
${adaptor_devel_api_dir}/adaptor-framework/lifecycle-controller.cpp
${adaptor_devel_api_dir}/adaptor-framework/vector-animation-renderer.cpp
+ ${adaptor_devel_api_dir}/adaptor-framework/vector-image-renderer.cpp
${adaptor_devel_api_dir}/adaptor-framework/video-player.cpp
${adaptor_devel_api_dir}/adaptor-framework/virtual-keyboard.cpp
${adaptor_devel_api_dir}/adaptor-framework/thread-settings.cpp
${adaptor_devel_api_dir}/adaptor-framework/tilt-sensor.h
${adaptor_devel_api_dir}/adaptor-framework/vector-animation-renderer.h
${adaptor_devel_api_dir}/adaptor-framework/vector-animation-renderer-plugin.h
+ ${adaptor_devel_api_dir}/adaptor-framework/vector-image-renderer.h
+ ${adaptor_devel_api_dir}/adaptor-framework/vector-image-renderer-plugin.h
${adaptor_devel_api_dir}/adaptor-framework/video-player.h
${adaptor_devel_api_dir}/adaptor-framework/video-player-plugin.h
${adaptor_devel_api_dir}/adaptor-framework/web-engine.h
--- /dev/null
+/*
+ * Copyright (c) 2020 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/vector-image/common/vector-image-renderer-impl.h>
+
+// EXTERNAL INCLUDES
+#include <dali/public-api/object/type-registry.h>
+
+// INTERNAL INCLUDES
+
+namespace Dali
+{
+
+namespace Internal
+{
+
+namespace Adaptor
+{
+
+namespace // unnamed namespace
+{
+
+// Type Registration
+Dali::BaseHandle Create()
+{
+ return Dali::BaseHandle();
+}
+
+Dali::TypeRegistration type( typeid( Dali::VectorImageRenderer ), typeid( Dali::BaseHandle ), Create );
+
+} // unnamed namespace
+
+VectorImageRendererPtr VectorImageRenderer::New()
+{
+ VectorImageRendererPtr renderer = new VectorImageRenderer();
+ return renderer;
+}
+
+VectorImageRenderer::VectorImageRenderer()
+: mPlugin( std::string() )
+{
+}
+
+void VectorImageRenderer::Initialize()
+{
+ mPlugin.Initialize();
+}
+
+void VectorImageRenderer::SetBuffer( Dali::Devel::PixelBuffer &buffer )
+{
+ mPlugin.SetBuffer( buffer );
+}
+
+bool VectorImageRenderer::Render(float scale)
+{
+ return mPlugin.Render( scale );
+}
+
+bool VectorImageRenderer::Load( const std::string& url )
+{
+ return mPlugin.Load( url );
+}
+
+bool VectorImageRenderer::Load( const char *data, uint32_t size )
+{
+ return mPlugin.Load( data, size );
+}
+
+void VectorImageRenderer::GetDefaultSize( uint32_t& width, uint32_t& height ) const
+{
+ mPlugin.GetDefaultSize( width, height );
+}
+
+} // namespace Adaptor
+
+} // namespace internal
+
+} // namespace Dali
--- /dev/null
+#ifndef DALI_INTERNAL_VECTOR_IMAGE_RENDERER_IMPL_H
+#define DALI_INTERNAL_VECTOR_IMAGE_RENDERER_IMPL_H
+
+/*
+ * Copyright (c) 2020 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>
+#include <dali/public-api/signals/connection-tracker.h>
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/vector-image-renderer.h>
+#include <dali/internal/vector-image/common/vector-image-renderer-plugin-proxy.h>
+#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
+
+namespace Dali
+{
+
+namespace Internal
+{
+
+namespace Adaptor
+{
+
+class VectorImageRenderer;
+using VectorImageRendererPtr = IntrusivePtr< VectorImageRenderer >;
+
+/**
+ * Dali internal VectorImageRenderer.
+ */
+class VectorImageRenderer : public BaseObject, public ConnectionTracker
+{
+public:
+
+ /**
+ * @brief Creates a VectorImageRenderer object.
+ *
+ * @return A handle to a newly allocated VectorImageRenderer
+ */
+ static VectorImageRendererPtr New();
+
+ /**
+ * @brief Initializes member data.
+ */
+ void Initialize();
+
+ /**
+ * @copydoc Dali::VectorImageRenderer::SetBuffer()
+ */
+ void SetBuffer( Dali::Devel::PixelBuffer &buffer );
+
+ /**
+ * @copydoc Dali::VectorImageRenderer::Render()
+ */
+ bool Render(float scale);
+
+ /**
+ * @copydoc Dali::VectorImageRenderer::Load()
+ */
+ bool Load( const std::string& url );
+
+ /**
+ * @copydoc Dali::VectorImageRenderer::Load()
+ */
+ bool Load( const char *data, uint32_t size );
+
+ /**
+ * @copydoc Dali::VectorImageRenderer::GetDefaultSize()
+ */
+ void GetDefaultSize( uint32_t& width, uint32_t& height ) const;
+
+ VectorImageRenderer( const VectorImageRenderer& ) = delete;
+ VectorImageRenderer& operator=( VectorImageRenderer& ) = delete;
+ VectorImageRenderer( VectorImageRenderer&& ) = delete;
+ VectorImageRenderer& operator=( VectorImageRenderer&& ) = delete;
+
+private:
+
+ /**
+ * @brief Constructor
+ */
+ VectorImageRenderer();
+
+ /**
+ * @brief Destructor.
+ */
+ ~VectorImageRenderer() = default;
+
+private:
+
+ VectorImageRendererPluginProxy mPlugin;
+};
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+inline static Internal::Adaptor::VectorImageRenderer& GetImplementation( Dali::VectorImageRenderer& renderer )
+{
+ DALI_ASSERT_ALWAYS( renderer && "VectorImageRenderer handle is empty." );
+
+ BaseObject& handle = renderer.GetBaseObject();
+
+ return static_cast< Internal::Adaptor::VectorImageRenderer& >( handle );
+}
+
+inline static const Internal::Adaptor::VectorImageRenderer& GetImplementation( const Dali::VectorImageRenderer& renderer )
+{
+ DALI_ASSERT_ALWAYS( renderer && "VectorImageRenderer handle is empty." );
+
+ const BaseObject& handle = renderer.GetBaseObject();
+
+ return static_cast< const Internal::Adaptor::VectorImageRenderer& >( handle );
+}
+
+} // namespace Dali
+
+#endif // DALI_INTERNAL_VECTOR_IMAGE_RENDERER_IMPL_H
--- /dev/null
+/*
+ * Copyright (c) 2020 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/vector-image/common/vector-image-renderer-plugin-proxy.h>
+
+// EXTERNAL INCLUDES
+#include <dlfcn.h>
+#include <dali/integration-api/debug.h>
+
+namespace Dali
+{
+
+namespace Internal
+{
+
+namespace Adaptor
+{
+
+namespace
+{
+
+// The default plugin name
+const char* DEFAULT_OBJECT_NAME( "libdali2-vector-image-renderer-plugin.so" );
+
+}
+
+VectorImageRendererPluginProxy::VectorImageRendererPluginProxy( std::string sharedObjectName )
+: mSharedObjectName(std::move(sharedObjectName)),
+ mLibHandle( nullptr ),
+ mPlugin( nullptr ),
+ mCreateVectorImageRendererPtr( nullptr )
+{
+ if( mSharedObjectName.empty() )
+ {
+ mSharedObjectName = DEFAULT_OBJECT_NAME;
+ }
+
+ InitializePlugin();
+}
+
+VectorImageRendererPluginProxy::~VectorImageRendererPluginProxy()
+{
+ if( mPlugin )
+ {
+ delete mPlugin;
+ mPlugin = nullptr;
+
+ if( mLibHandle && dlclose( mLibHandle ) )
+ {
+ DALI_LOG_ERROR( "Error closing vector image renderer plugin library: %s\n", dlerror() );
+ }
+ }
+}
+
+void VectorImageRendererPluginProxy::InitializePlugin()
+{
+ mLibHandle = dlopen( mSharedObjectName.c_str(), RTLD_LAZY );
+
+ char* error = dlerror();
+ if( mLibHandle == nullptr || error != nullptr )
+ {
+ DALI_LOG_ERROR( "VectorImageRendererPluginProxy::Initialize: dlopen error [%s]\n", error );
+ return;
+ }
+
+ // load plugin
+ mCreateVectorImageRendererPtr = reinterpret_cast< CreateVectorImageRendererFunction >( dlsym( mLibHandle, "CreateVectorImageRendererPlugin" ) );
+
+ error = dlerror();
+ if( mCreateVectorImageRendererPtr == nullptr || error != nullptr )
+ {
+ DALI_LOG_ERROR( "VectorImageRendererPluginProxy::Initialize: Cannot load symbol: %s\n", error );
+ return;
+ }
+
+ mPlugin = mCreateVectorImageRendererPtr();
+ if( !mPlugin )
+ {
+ DALI_LOG_ERROR("VectorImageRendererPluginProxy::Initialize: Plugin creation failed\n");
+ return;
+ }
+}
+
+bool VectorImageRendererPluginProxy::Initialize()
+{
+ if( mPlugin )
+ {
+ return mPlugin->Initialize();
+ }
+ return false;
+}
+
+void VectorImageRendererPluginProxy::SetBuffer( Dali::Devel::PixelBuffer &buffer )
+{
+ if( mPlugin )
+ {
+ mPlugin->SetBuffer( buffer );
+ }
+}
+
+bool VectorImageRendererPluginProxy::Render(float scale)
+{
+ if( mPlugin )
+ {
+ return mPlugin->Render( scale );
+ }
+ return false;
+}
+
+bool VectorImageRendererPluginProxy::Load( const std::string& url )
+{
+ if( mPlugin )
+ {
+ return mPlugin->Load( url );
+ }
+ return false;
+}
+
+bool VectorImageRendererPluginProxy::Load( const char *data, uint32_t size )
+{
+ if( mPlugin )
+ {
+ return mPlugin->Load( data, size );
+ }
+ return false;
+}
+
+void VectorImageRendererPluginProxy::GetDefaultSize( uint32_t& width, uint32_t& height ) const
+{
+ if( mPlugin )
+ {
+ mPlugin->GetDefaultSize( width, height );
+ }
+}
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
--- /dev/null
+#ifndef DALI_INTERNAL_VECTOR_IMAGE_RENDERER_PLUGIN_PROXY_H
+#define DALI_INTERNAL_VECTOR_IMAGE_RENDERER_PLUGIN_PROXY_H
+
+/*
+ * Copyright (c) 2020 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.
+ *
+ */
+
+// INTERNAL INCLUDES
+#include <dali/devel-api/adaptor-framework/vector-image-renderer-plugin.h>
+#include <dali/devel-api/adaptor-framework/pixel-buffer.h>
+#include <memory>
+
+namespace Dali
+{
+
+namespace Internal
+{
+
+namespace Adaptor
+{
+
+/**
+ * Proxy class to dynamically load, use and unload vector image renderer plugin.
+ */
+class VectorImageRendererPluginProxy
+{
+public:
+
+ /**
+ * @brief Constructor
+ */
+ VectorImageRendererPluginProxy( std::string sharedObjectName );
+
+ /**
+ * @brief Destructor
+ */
+ ~VectorImageRendererPluginProxy();
+
+ /**
+ * @copydoc Dali::VectorImageRendererPlugin::Initialize()
+ */
+ bool Initialize();
+
+ /**
+ * @copydoc Dali::VectorImageRendererPlugin::SetBuffer()
+ */
+ void SetBuffer( Dali::Devel::PixelBuffer &buffer );
+
+ /**
+ * @copydoc Dali::VectorImageRendererPlugin::Render()
+ */
+ bool Render(float scale);
+
+ /**
+ * @copydoc Dali::VectorImageRendererPlugin::Load()
+ */
+ bool Load( const std::string& url );
+
+ /**
+ * @copydoc Dali::VectorImageRendererPlugin::Load()
+ */
+ bool Load( const char *data, uint32_t size );
+
+ /**
+ * @copydoc Dali::VectorImageRendererPlugin::GetDefaultSize()
+ */
+ void GetDefaultSize( uint32_t& width, uint32_t& height ) const;
+
+ // Not copyable or movable
+ VectorImageRendererPluginProxy( const VectorImageRendererPluginProxy& ) = delete; ///< Deleted copy constructor
+ VectorImageRendererPluginProxy( VectorImageRendererPluginProxy&& ) = delete; ///< Deleted move constructor
+ VectorImageRendererPluginProxy& operator=( const VectorImageRendererPluginProxy& ) = delete; ///< Deleted copy assignment operator
+ VectorImageRendererPluginProxy& operator=( VectorImageRendererPluginProxy&& ) = delete; ///< Deleted move assignment operator
+
+private:
+
+ /**
+ * Dynamically loads the plugin.
+ */
+ void InitializePlugin();
+
+private:
+
+ using CreateVectorImageRendererFunction = Dali::VectorImageRendererPlugin* (*)();
+
+ std::string mSharedObjectName; ///< Shared object name
+ void* mLibHandle; ///< Handle for the loaded library
+ Dali::VectorImageRendererPlugin* mPlugin; ///< Plugin handle
+
+ CreateVectorImageRendererFunction mCreateVectorImageRendererPtr; ///< Function pointer called in adaptor to create a plugin instance
+
+};
+
+} // namespace Adaptor
+
+} // namespace Internal
+
+} // namespace Dali
+
+#endif // DALI_INTERNAL_VECTOR_IMAGE_RENDERER_PLUGIN_PROXY_H
--- /dev/null
+
+# module: vector-image, backend: common
+SET( adaptor_vector_image_common_src_files
+ ${adaptor_vector_image_dir}/common/vector-image-renderer-impl.cpp
+ ${adaptor_vector_image_dir}/common/vector-image-renderer-plugin-proxy.cpp
+)
+