d809e66d2444afac726d6888070030347c328426
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / toolkit-vector-image-renderer.cpp
1 /*
2  * Copyright (c) 2022 Samsung Electronics Co., Ltd.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  *
16  */
17
18 #include <dali/devel-api/adaptor-framework/vector-image-renderer.h>
19 #include <dali/public-api/object/base-object.h>
20 #include <dali/public-api/rendering/renderer.h>
21 #include <sys/stat.h>
22 #include <toolkit-application.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <toolkit-vector-image-renderer.h>
25 #include <cstring>
26 #include <memory>
27
28 namespace Dali
29 {
30 namespace Internal
31 {
32 namespace Adaptor
33 {
34 namespace
35 {
36 Dali::Internal::Adaptor::VectorImageRenderer* gVectorImageRenderer = nullptr;
37 }
38
39 class VectorImageRenderer : public Dali::BaseObject
40 {
41 public:
42   VectorImageRenderer()
43   {
44   }
45
46   ~VectorImageRenderer()
47   {
48   }
49
50   bool Load(const Vector<uint8_t>& data, float dpi)
51   {
52     mLoadCount++;
53     if(strncmp(reinterpret_cast<char*>(data.Begin()), "invalid", 7) == 0)
54     {
55       return false;
56     }
57     else if(strncmp(reinterpret_cast<char*>(data.Begin()), "Fail to rasterize", strlen("Fail to rasterize")) == 0)
58     {
59       mRasterizeSuccess = false;
60     }
61     return true;
62   }
63
64   bool IsLoaded() const
65   {
66     return mLoadCount > 0 ? true : false;
67   }
68
69   Dali::Devel::PixelBuffer Rasterize(uint32_t width, uint32_t height)
70   {
71     if(mRasterizeSuccess)
72     {
73       Devel::PixelBuffer pixelBuffer = Devel::PixelBuffer::New(width, height, Dali::Pixel::RGBA8888);
74       return pixelBuffer;
75     }
76     return Dali::Devel::PixelBuffer();
77   }
78
79   void GetDefaultSize(uint32_t& width, uint32_t& height) const
80   {
81     width  = 100;
82     height = 100;
83   }
84
85 public:
86   uint32_t mWidth{0};
87   uint32_t mHeight{0};
88   uint32_t mLoadCount{0};
89   bool     mRasterizeSuccess{true};
90 };
91
92 inline VectorImageRenderer& GetImplementation(Dali::VectorImageRenderer& renderer)
93 {
94   DALI_ASSERT_ALWAYS(renderer && "VectorImageRenderer handle is empty.");
95   BaseObject& handle = renderer.GetBaseObject();
96   return static_cast<Internal::Adaptor::VectorImageRenderer&>(handle);
97 }
98
99 inline const VectorImageRenderer& GetImplementation(const Dali::VectorImageRenderer& renderer)
100 {
101   DALI_ASSERT_ALWAYS(renderer && "VectorImageRenderer handle is empty.");
102   const BaseObject& handle = renderer.GetBaseObject();
103   return static_cast<const Internal::Adaptor::VectorImageRenderer&>(handle);
104 }
105
106 } // namespace Adaptor
107
108 } // namespace Internal
109
110 /********************************************************************************/
111 /*********************************  PUBLIC CLASS  *******************************/
112 /********************************************************************************/
113
114 VectorImageRenderer VectorImageRenderer::New()
115 {
116   Internal::Adaptor::VectorImageRenderer* imageRenderer = new Internal::Adaptor::VectorImageRenderer();
117
118   Internal::Adaptor::gVectorImageRenderer = imageRenderer;
119
120   return VectorImageRenderer(imageRenderer);
121 }
122
123 VectorImageRenderer::VectorImageRenderer()
124 {
125 }
126
127 VectorImageRenderer::~VectorImageRenderer()
128 {
129 }
130
131 VectorImageRenderer::VectorImageRenderer(Internal::Adaptor::VectorImageRenderer* internal)
132 : BaseHandle(internal)
133 {
134 }
135
136 bool VectorImageRenderer::Load(const Vector<uint8_t>& data, float dpi)
137 {
138   return Internal::Adaptor::GetImplementation(*this).Load(data, dpi);
139 }
140
141 bool VectorImageRenderer::IsLoaded() const
142 {
143   return Internal::Adaptor::GetImplementation(*this).IsLoaded();
144 }
145
146 Dali::Devel::PixelBuffer VectorImageRenderer::Rasterize(uint32_t width, uint32_t height)
147 {
148   return Internal::Adaptor::GetImplementation(*this).Rasterize(width, height);
149 }
150
151 void VectorImageRenderer::GetDefaultSize(uint32_t& width, uint32_t& height) const
152 {
153   Internal::Adaptor::GetImplementation(*this).GetDefaultSize(width, height);
154 }
155
156 } // namespace Dali
157
158 namespace Test
159 {
160 namespace VectorImageRenderer
161 {
162 uint32_t GetLoadCount()
163 {
164   return Dali::Internal::Adaptor::gVectorImageRenderer->mLoadCount;
165 }
166
167 } // namespace VectorImageRenderer
168 } // namespace Test