DALi Version 2.0.37
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / toolkit-canvas-renderer.cpp
1 /*
2  * Copyright (c) 2021 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/canvas-renderer.h>
19 #include <dali/devel-api/adaptor-framework/canvas-renderer-drawable.h>
20 #include <dali/public-api/object/base-object.h>
21 #include <dali/public-api/rendering/renderer.h>
22 #include <toolkit-application.h>
23 #include <toolkit-event-thread-callback.h>
24 #include <memory>
25 #include <cstring>
26 #include <sys/stat.h>
27
28 namespace Dali
29 {
30
31 namespace Internal
32 {
33
34 namespace Adaptor
35 {
36
37 class CanvasRenderer: public Dali::BaseObject
38 {
39 public:
40   CanvasRenderer( const Vector2& size )
41   : mDrawable(nullptr),
42     mPixelBuffer( Devel::PixelBuffer::New(size.width, size.height, Dali::Pixel::RGBA8888) ),
43     mSize(size),
44     mViewBox(size)
45   {
46   }
47
48   ~CanvasRenderer()
49   {
50   }
51
52   bool Commit()
53   {
54      return true;
55   }
56
57   bool IsCanvasChanged() const
58   {
59      return true;
60   }
61
62   bool Rasterize()
63   {
64      return true;
65   }
66
67   bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
68   {
69     if (!drawable)
70     {
71       return false;
72     }
73     mDrawable = &drawable;
74     return true;
75   }
76
77   bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
78   {
79     if (!drawable)
80     {
81       return false;
82     }
83     if (mDrawable == &drawable)
84     {
85       mDrawable = nullptr;
86       return true;
87     }
88     return false;
89   }
90
91   bool RemoveAllDrawables()
92   {
93     if (mDrawable)
94     {
95       return true;
96     }
97     return false;
98   }
99
100   Devel::PixelBuffer GetPixelBuffer()
101   {
102     return mPixelBuffer;
103   }
104
105
106   bool SetSize(const Vector2& size)
107   {
108     mSize = size;
109     // For negative test
110     if ( size.width == -999 && size.height == -999 )
111     {
112       return false;
113     }
114     return true;
115   }
116
117   const Vector2& GetSize()
118   {
119     mSize = Vector2(200, 200);
120     return mSize;
121   }
122
123   bool SetViewBox(const Vector2& viewBox)
124   {
125     mViewBox = viewBox;
126     // For negative test
127     if ( viewBox.width == -999 && viewBox.height == -999 )
128     {
129       return false;
130     }
131     return true;
132   }
133
134   const Vector2& GetViewBox()
135   {
136     return mViewBox;
137   }
138
139 public:
140    Dali::CanvasRenderer::Drawable* mDrawable;
141    Devel::PixelBuffer mPixelBuffer;
142    Vector2 mSize;
143    Vector2 mViewBox;
144 };
145
146 inline CanvasRenderer& GetImplementation( Dali::CanvasRenderer& renderer )
147 {
148   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
149   BaseObject& handle = renderer.GetBaseObject();
150   return static_cast< Internal::Adaptor::CanvasRenderer& >( handle );
151 }
152
153 inline const CanvasRenderer& GetImplementation( const Dali::CanvasRenderer& renderer )
154 {
155   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
156   const BaseObject& handle = renderer.GetBaseObject();
157   return static_cast< const Internal::Adaptor::CanvasRenderer& >( handle );
158 }
159
160 } // namespace Adaptor
161
162 } // namespace Internal
163
164
165 /********************************************************************************/
166 /*********************************  PUBLIC CLASS  *******************************/
167 /********************************************************************************/
168
169 CanvasRenderer CanvasRenderer::New( const Vector2& size )
170 {
171   Internal::Adaptor::CanvasRenderer* imageRenderer = new Internal::Adaptor::CanvasRenderer(size);
172
173   return CanvasRenderer( imageRenderer );
174 }
175
176 CanvasRenderer::CanvasRenderer()
177 {
178 }
179
180 CanvasRenderer::~CanvasRenderer()
181 {
182 }
183
184 CanvasRenderer::CanvasRenderer( Internal::Adaptor::CanvasRenderer* internal )
185 : BaseHandle( internal )
186 {
187 }
188
189 bool CanvasRenderer::Commit()
190 {
191   return Internal::Adaptor::GetImplementation(*this).Commit();
192 }
193
194 bool CanvasRenderer::IsCanvasChanged() const
195 {
196   return Internal::Adaptor::GetImplementation(*this).IsCanvasChanged();
197 }
198
199 bool CanvasRenderer::Rasterize()
200 {
201   return Internal::Adaptor::GetImplementation(*this).Rasterize();
202 }
203
204 Devel::PixelBuffer CanvasRenderer::GetPixelBuffer()
205 {
206   return Internal::Adaptor::GetImplementation(*this).GetPixelBuffer();
207 }
208
209 bool CanvasRenderer::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
210 {
211   return Internal::Adaptor::GetImplementation(*this).AddDrawable(drawable);
212 }
213
214 bool CanvasRenderer::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
215 {
216   return Internal::Adaptor::GetImplementation(*this).RemoveDrawable(drawable);
217 }
218
219 bool CanvasRenderer::RemoveAllDrawables()
220 {
221   return Internal::Adaptor::GetImplementation(*this).RemoveAllDrawables();
222 }
223
224 bool CanvasRenderer::SetSize(const Vector2& size)
225 {
226   return Internal::Adaptor::GetImplementation(*this).SetSize(size);
227 }
228
229 const Vector2& CanvasRenderer::GetSize()
230 {
231   return Internal::Adaptor::GetImplementation(*this).GetSize();
232 }
233
234 bool CanvasRenderer::SetViewBox(const Vector2& viewBox)
235 {
236   return Internal::Adaptor::GetImplementation(*this).SetViewBox(viewBox);
237 }
238
239 const Vector2& CanvasRenderer::GetViewBox()
240 {
241   return Internal::Adaptor::GetImplementation(*this).GetViewBox();
242 }
243
244 } // namespace Dali