Merge "DALi Version 2.0.39" into 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) 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(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   Vector2 GetSize() const
118   {
119     return Vector2(200, 200);
120   }
121
122   bool SetViewBox(const Vector2& viewBox)
123   {
124     mViewBox = viewBox;
125     // For negative test
126     if ( viewBox.width == -999 && viewBox.height == -999 )
127     {
128       return false;
129     }
130     return true;
131   }
132
133   const Vector2& GetViewBox()
134   {
135     return mViewBox;
136   }
137
138 public:
139    Dali::CanvasRenderer::Drawable* mDrawable;
140    Devel::PixelBuffer mPixelBuffer;
141    Vector2 mSize;
142    Vector2 mViewBox;
143 };
144
145 inline CanvasRenderer& GetImplementation( Dali::CanvasRenderer& renderer )
146 {
147   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
148   BaseObject& handle = renderer.GetBaseObject();
149   return static_cast< Internal::Adaptor::CanvasRenderer& >( handle );
150 }
151
152 inline const CanvasRenderer& GetImplementation( const Dali::CanvasRenderer& renderer )
153 {
154   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
155   const BaseObject& handle = renderer.GetBaseObject();
156   return static_cast< const Internal::Adaptor::CanvasRenderer& >( handle );
157 }
158
159 } // namespace Adaptor
160
161 } // namespace Internal
162
163
164 /********************************************************************************/
165 /*********************************  PUBLIC CLASS  *******************************/
166 /********************************************************************************/
167
168 CanvasRenderer CanvasRenderer::New( const Vector2& size )
169 {
170   Internal::Adaptor::CanvasRenderer* imageRenderer = new Internal::Adaptor::CanvasRenderer(size);
171
172   return CanvasRenderer( imageRenderer );
173 }
174
175 CanvasRenderer::CanvasRenderer()
176 {
177 }
178
179 CanvasRenderer::~CanvasRenderer()
180 {
181 }
182
183 CanvasRenderer::CanvasRenderer( Internal::Adaptor::CanvasRenderer* internal )
184 : BaseHandle( internal )
185 {
186 }
187
188 bool CanvasRenderer::Commit()
189 {
190   return Internal::Adaptor::GetImplementation(*this).Commit();
191 }
192
193 bool CanvasRenderer::IsCanvasChanged() const
194 {
195   return Internal::Adaptor::GetImplementation(*this).IsCanvasChanged();
196 }
197
198 bool CanvasRenderer::Rasterize()
199 {
200   return Internal::Adaptor::GetImplementation(*this).Rasterize();
201 }
202
203 Devel::PixelBuffer CanvasRenderer::GetPixelBuffer()
204 {
205   return Internal::Adaptor::GetImplementation(*this).GetPixelBuffer();
206 }
207
208 bool CanvasRenderer::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
209 {
210   return Internal::Adaptor::GetImplementation(*this).AddDrawable(drawable);
211 }
212
213 bool CanvasRenderer::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
214 {
215   return Internal::Adaptor::GetImplementation(*this).RemoveDrawable(drawable);
216 }
217
218 bool CanvasRenderer::RemoveAllDrawables()
219 {
220   return Internal::Adaptor::GetImplementation(*this).RemoveAllDrawables();
221 }
222
223 bool CanvasRenderer::SetSize(Vector2 size)
224 {
225   return Internal::Adaptor::GetImplementation(*this).SetSize(size);
226 }
227
228 Vector2 CanvasRenderer::GetSize() const
229 {
230   return Internal::Adaptor::GetImplementation(*this).GetSize();
231 }
232
233 bool CanvasRenderer::SetViewBox(const Vector2& viewBox)
234 {
235   return Internal::Adaptor::GetImplementation(*this).SetViewBox(viewBox);
236 }
237
238 const Vector2& CanvasRenderer::GetViewBox()
239 {
240   return Internal::Adaptor::GetImplementation(*this).GetViewBox();
241 }
242
243 } // namespace Dali