Merge branch 'devel/master' into tizen
[platform/core/uifw/dali-adaptor.git] / dali / internal / vector-image / common / vector-image-renderer-impl.h
1 #ifndef DALI_INTERNAL_VECTOR_IMAGE_RENDERER_IMPL_H
2 #define DALI_INTERNAL_VECTOR_IMAGE_RENDERER_IMPL_H
3
4 /*
5  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/object/base-object.h>
23 #include <dali/public-api/signals/connection-tracker.h>
24 #ifdef THORVG_SUPPORT
25 #include <thorvg.h>
26 #endif
27
28 // INTERNAL INCLUDES
29 #include <dali/devel-api/adaptor-framework/pixel-buffer.h>
30 #include <dali/devel-api/adaptor-framework/vector-image-renderer.h>
31
32 #ifndef THORVG_SUPPORT
33 struct NSVGrasterizer;
34 struct NSVGimage;
35 #endif
36
37 namespace Dali
38 {
39 namespace Internal
40 {
41 namespace Adaptor
42 {
43 class VectorImageRenderer;
44 using VectorImageRendererPtr = IntrusivePtr<VectorImageRenderer>;
45
46 /**
47  * Dali internal VectorImageRenderer.
48  */
49 class VectorImageRenderer : public BaseObject
50 {
51 public:
52   /**
53    * @brief Creates a VectorImageRenderer object.
54    *
55    * @return A handle to a newly allocated VectorImageRenderer
56    */
57   static VectorImageRendererPtr New();
58
59   /**
60    * @copydoc Dali::VectorImageRenderer::Load()
61    */
62   bool Load(const Vector<uint8_t>& data, float dpi);
63
64   /**
65    * @copydoc Dali::VectorImageRenderer::IsLoaded()
66    */
67   bool IsLoaded() const;
68
69   /**
70    * @copydoc Dali::VectorImageRenderer::Rasterize()
71    */
72   Dali::Devel::PixelBuffer Rasterize(uint32_t width, uint32_t height);
73
74   /**
75    * @copydoc Dali::VectorImageRenderer::GetDefaultSize()
76    */
77   void GetDefaultSize(uint32_t& width, uint32_t& height) const;
78
79   VectorImageRenderer(const VectorImageRenderer&) = delete;
80   VectorImageRenderer& operator=(VectorImageRenderer&) = delete;
81   VectorImageRenderer(VectorImageRenderer&&)           = delete;
82   VectorImageRenderer& operator=(VectorImageRenderer&&) = delete;
83
84 private:
85   /**
86    * @brief Constructor
87    */
88   VectorImageRenderer();
89
90   /**
91    * @brief Destructor.
92    */
93   virtual ~VectorImageRenderer();
94
95   /**
96    * @brief Initializes member data.
97    */
98   void Initialize();
99
100 private:
101 #ifdef THORVG_SUPPORT
102   std::unique_ptr<tvg::SwCanvas> mSwCanvas{nullptr};
103   tvg::Picture*                  mPicture{nullptr}; ///< The pointer to the picture
104 #else
105   NSVGimage*      mParsedImage{nullptr};
106   NSVGrasterizer* mRasterizer{nullptr};
107 #endif
108   uint32_t mDefaultWidth{0};  ///< The default width of the file
109   uint32_t mDefaultHeight{0}; ///< The default height of the file
110 };
111
112 } // namespace Adaptor
113
114 } // namespace Internal
115
116 inline static Internal::Adaptor::VectorImageRenderer& GetImplementation(Dali::VectorImageRenderer& renderer)
117 {
118   DALI_ASSERT_ALWAYS(renderer && "VectorImageRenderer handle is empty.");
119
120   BaseObject& handle = renderer.GetBaseObject();
121
122   return static_cast<Internal::Adaptor::VectorImageRenderer&>(handle);
123 }
124
125 inline static const Internal::Adaptor::VectorImageRenderer& GetImplementation(const Dali::VectorImageRenderer& renderer)
126 {
127   DALI_ASSERT_ALWAYS(renderer && "VectorImageRenderer handle is empty.");
128
129   const BaseObject& handle = renderer.GetBaseObject();
130
131   return static_cast<const Internal::Adaptor::VectorImageRenderer&>(handle);
132 }
133
134 } // namespace Dali
135
136 #endif // DALI_INTERNAL_VECTOR_IMAGE_RENDERER_IMPL_H