[dali_2.1.31] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / automated-tests / src / dali-toolkit / dali-toolkit-test-utils / toolkit-canvas-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/canvas-renderer/canvas-renderer.h>
19 #include <dali/devel-api/adaptor-framework/canvas-renderer/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     mTexture ( Dali::Texture::New( Dali::TextureType::TEXTURE_2D, Pixel::RGBA8888, size.width, size.height ) ),
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   Dali::Texture GetRasterizedTexture()
63   {
64     return mTexture;
65   }
66
67   bool Rasterize()
68   {
69      return true;
70   }
71
72   bool AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
73   {
74     if (!drawable)
75     {
76       return false;
77     }
78     mDrawable = &drawable;
79     return true;
80   }
81
82   bool RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
83   {
84     if (!drawable)
85     {
86       return false;
87     }
88     if (mDrawable == &drawable)
89     {
90       mDrawable = nullptr;
91       return true;
92     }
93     return false;
94   }
95
96   bool RemoveAllDrawables()
97   {
98     if (mDrawable)
99     {
100       return true;
101     }
102     return false;
103   }
104
105   bool SetSize(Vector2 size)
106   {
107     mSize = size;
108     // For negative test
109     if ( size.width == -999 && size.height == -999 )
110     {
111       return false;
112     }
113     return true;
114   }
115
116   Vector2 GetSize() const
117   {
118     return Vector2(200, 200);
119   }
120
121   bool SetViewBox(const Vector2& viewBox)
122   {
123     mViewBox = viewBox;
124     // For negative test
125     if ( viewBox.width == -999 && viewBox.height == -999 )
126     {
127       return false;
128     }
129     return true;
130   }
131
132   const Vector2& GetViewBox()
133   {
134     return mViewBox;
135   }
136
137 public:
138    Dali::CanvasRenderer::Drawable* mDrawable;
139    Dali::Texture mTexture;
140    Vector2 mSize;
141    Vector2 mViewBox;
142 };
143
144 inline CanvasRenderer& GetImplementation( Dali::CanvasRenderer& renderer )
145 {
146   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
147   BaseObject& handle = renderer.GetBaseObject();
148   return static_cast< Internal::Adaptor::CanvasRenderer& >( handle );
149 }
150
151 inline const CanvasRenderer& GetImplementation( const Dali::CanvasRenderer& renderer )
152 {
153   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
154   const BaseObject& handle = renderer.GetBaseObject();
155   return static_cast< const Internal::Adaptor::CanvasRenderer& >( handle );
156 }
157
158 } // namespace Adaptor
159
160 } // namespace Internal
161
162
163 /********************************************************************************/
164 /*********************************  PUBLIC CLASS  *******************************/
165 /********************************************************************************/
166
167 CanvasRenderer CanvasRenderer::New( const Vector2& size )
168 {
169   Internal::Adaptor::CanvasRenderer* imageRenderer = new Internal::Adaptor::CanvasRenderer(size);
170
171   return CanvasRenderer( imageRenderer );
172 }
173
174 CanvasRenderer::CanvasRenderer()
175 {
176 }
177
178 CanvasRenderer::~CanvasRenderer()
179 {
180 }
181
182 CanvasRenderer::CanvasRenderer( Internal::Adaptor::CanvasRenderer* internal )
183 : BaseHandle( internal )
184 {
185 }
186
187 bool CanvasRenderer::Commit()
188 {
189   return Internal::Adaptor::GetImplementation(*this).Commit();
190 }
191
192 bool CanvasRenderer::IsCanvasChanged() const
193 {
194   return Internal::Adaptor::GetImplementation(*this).IsCanvasChanged();
195 }
196
197 bool CanvasRenderer::Rasterize()
198 {
199   return Internal::Adaptor::GetImplementation(*this).Rasterize();
200 }
201
202 Dali::Texture CanvasRenderer::GetRasterizedTexture()
203 {
204   return Internal::Adaptor::GetImplementation(*this).GetRasterizedTexture();
205 }
206
207 bool CanvasRenderer::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
208 {
209   return Internal::Adaptor::GetImplementation(*this).AddDrawable(drawable);
210 }
211
212 bool CanvasRenderer::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
213 {
214   return Internal::Adaptor::GetImplementation(*this).RemoveDrawable(drawable);
215 }
216
217 bool CanvasRenderer::RemoveAllDrawables()
218 {
219   return Internal::Adaptor::GetImplementation(*this).RemoveAllDrawables();
220 }
221
222 bool CanvasRenderer::SetSize(Vector2 size)
223 {
224   return Internal::Adaptor::GetImplementation(*this).SetSize(size);
225 }
226
227 Vector2 CanvasRenderer::GetSize() const
228 {
229   return Internal::Adaptor::GetImplementation(*this).GetSize();
230 }
231
232 bool CanvasRenderer::SetViewBox(const Vector2& viewBox)
233 {
234   return Internal::Adaptor::GetImplementation(*this).SetViewBox(viewBox);
235 }
236
237 const Vector2& CanvasRenderer::GetViewBox()
238 {
239   return Internal::Adaptor::GetImplementation(*this).GetViewBox();
240 }
241
242 } // namespace Dali