3093fcb8220aeb59563ab508edb89ccf86b7c923
[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     mLoadSuccess = true;
62     return true;
63   }
64
65   bool IsLoaded() const
66   {
67     return mLoadSuccess;
68   }
69
70   Dali::Devel::PixelBuffer Rasterize(uint32_t width, uint32_t height)
71   {
72     if(mRasterizeSuccess)
73     {
74       Devel::PixelBuffer pixelBuffer = Devel::PixelBuffer::New(width, height, Dali::Pixel::RGBA8888);
75       return pixelBuffer;
76     }
77     return Dali::Devel::PixelBuffer();
78   }
79
80   void GetDefaultSize(uint32_t& width, uint32_t& height) const
81   {
82     width  = 100;
83     height = 100;
84   }
85
86 public:
87   uint32_t mWidth{0};
88   uint32_t mHeight{0};
89   uint32_t mLoadCount{0};
90   bool     mLoadSuccess{false};
91   bool     mRasterizeSuccess{true};
92 };
93
94 inline VectorImageRenderer& GetImplementation(Dali::VectorImageRenderer& renderer)
95 {
96   DALI_ASSERT_ALWAYS(renderer && "VectorImageRenderer handle is empty.");
97   BaseObject& handle = renderer.GetBaseObject();
98   return static_cast<Internal::Adaptor::VectorImageRenderer&>(handle);
99 }
100
101 inline const VectorImageRenderer& GetImplementation(const Dali::VectorImageRenderer& renderer)
102 {
103   DALI_ASSERT_ALWAYS(renderer && "VectorImageRenderer handle is empty.");
104   const BaseObject& handle = renderer.GetBaseObject();
105   return static_cast<const Internal::Adaptor::VectorImageRenderer&>(handle);
106 }
107
108 } // namespace Adaptor
109
110 } // namespace Internal
111
112 /********************************************************************************/
113 /*********************************  PUBLIC CLASS  *******************************/
114 /********************************************************************************/
115
116 VectorImageRenderer VectorImageRenderer::New()
117 {
118   Internal::Adaptor::VectorImageRenderer* imageRenderer = new Internal::Adaptor::VectorImageRenderer();
119
120   Internal::Adaptor::gVectorImageRenderer = imageRenderer;
121
122   return VectorImageRenderer(imageRenderer);
123 }
124
125 VectorImageRenderer::VectorImageRenderer()
126 {
127 }
128
129 VectorImageRenderer::~VectorImageRenderer()
130 {
131 }
132
133 VectorImageRenderer::VectorImageRenderer(Internal::Adaptor::VectorImageRenderer* internal)
134 : BaseHandle(internal)
135 {
136 }
137
138 bool VectorImageRenderer::Load(const Vector<uint8_t>& data, float dpi)
139 {
140   return Internal::Adaptor::GetImplementation(*this).Load(data, dpi);
141 }
142
143 bool VectorImageRenderer::IsLoaded() const
144 {
145   return Internal::Adaptor::GetImplementation(*this).IsLoaded();
146 }
147
148 Dali::Devel::PixelBuffer VectorImageRenderer::Rasterize(uint32_t width, uint32_t height)
149 {
150   return Internal::Adaptor::GetImplementation(*this).Rasterize(width, height);
151 }
152
153 void VectorImageRenderer::GetDefaultSize(uint32_t& width, uint32_t& height) const
154 {
155   Internal::Adaptor::GetImplementation(*this).GetDefaultSize(width, height);
156 }
157
158 } // namespace Dali
159
160 namespace Test
161 {
162 namespace VectorImageRenderer
163 {
164 uint32_t GetLoadCount()
165 {
166   return Dali::Internal::Adaptor::gVectorImageRenderer->mLoadCount;
167 }
168
169 } // namespace VectorImageRenderer
170 } // namespace Test