CanvasView: Add RemoveDrawable() API
[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   Devel::PixelBuffer GetPixelBuffer()
92   {
93     return mPixelBuffer;
94   }
95
96
97   bool SetSize(const Vector2& size)
98   {
99     mSize = size;
100     // For negative test
101     if ( size.width == -999 && size.height == -999 )
102     {
103       return false;
104     }
105     return true;
106   }
107
108   const Vector2& GetSize()
109   {
110     mSize = Vector2(200, 200);
111     return mSize;
112   }
113
114   bool SetViewBox(const Vector2& viewBox)
115   {
116     mViewBox = viewBox;
117     // For negative test
118     if ( viewBox.width == -999 && viewBox.height == -999 )
119     {
120       return false;
121     }
122     return true;
123   }
124
125   const Vector2& GetViewBox()
126   {
127     return mViewBox;
128   }
129
130 public:
131    Dali::CanvasRenderer::Drawable* mDrawable;
132    Devel::PixelBuffer mPixelBuffer;
133    Vector2 mSize;
134    Vector2 mViewBox;
135 };
136
137 inline CanvasRenderer& GetImplementation( Dali::CanvasRenderer& renderer )
138 {
139   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
140   BaseObject& handle = renderer.GetBaseObject();
141   return static_cast< Internal::Adaptor::CanvasRenderer& >( handle );
142 }
143
144 inline const CanvasRenderer& GetImplementation( const Dali::CanvasRenderer& renderer )
145 {
146   DALI_ASSERT_ALWAYS( renderer && "CanvasRenderer handle is empty." );
147   const BaseObject& handle = renderer.GetBaseObject();
148   return static_cast< const Internal::Adaptor::CanvasRenderer& >( handle );
149 }
150
151 } // namespace Adaptor
152
153 } // namespace Internal
154
155
156 /********************************************************************************/
157 /*********************************  PUBLIC CLASS  *******************************/
158 /********************************************************************************/
159
160 CanvasRenderer CanvasRenderer::New( const Vector2& size )
161 {
162   Internal::Adaptor::CanvasRenderer* imageRenderer = new Internal::Adaptor::CanvasRenderer(size);
163
164   return CanvasRenderer( imageRenderer );
165 }
166
167 CanvasRenderer::CanvasRenderer()
168 {
169 }
170
171 CanvasRenderer::~CanvasRenderer()
172 {
173 }
174
175 CanvasRenderer::CanvasRenderer( Internal::Adaptor::CanvasRenderer* internal )
176 : BaseHandle( internal )
177 {
178 }
179
180 bool CanvasRenderer::Commit()
181 {
182   return Internal::Adaptor::GetImplementation(*this).Commit();
183 }
184
185 bool CanvasRenderer::IsCanvasChanged() const
186 {
187   return Internal::Adaptor::GetImplementation(*this).IsCanvasChanged();
188 }
189
190 bool CanvasRenderer::Rasterize()
191 {
192   return Internal::Adaptor::GetImplementation(*this).Rasterize();
193 }
194
195 Devel::PixelBuffer CanvasRenderer::GetPixelBuffer()
196 {
197   return Internal::Adaptor::GetImplementation(*this).GetPixelBuffer();
198 }
199
200 bool CanvasRenderer::AddDrawable(Dali::CanvasRenderer::Drawable& drawable)
201 {
202   return Internal::Adaptor::GetImplementation(*this).AddDrawable(drawable);
203 }
204
205 bool CanvasRenderer::RemoveDrawable(Dali::CanvasRenderer::Drawable& drawable)
206 {
207   return Internal::Adaptor::GetImplementation(*this).RemoveDrawable(drawable);
208 }
209
210 bool CanvasRenderer::SetSize(const Vector2& size)
211 {
212   return Internal::Adaptor::GetImplementation(*this).SetSize(size);
213 }
214
215 const Vector2& CanvasRenderer::GetSize()
216 {
217   return Internal::Adaptor::GetImplementation(*this).GetSize();
218 }
219
220 bool CanvasRenderer::SetViewBox(const Vector2& viewBox)
221 {
222   return Internal::Adaptor::GetImplementation(*this).SetViewBox(viewBox);
223 }
224
225 const Vector2& CanvasRenderer::GetViewBox()
226 {
227   return Internal::Adaptor::GetImplementation(*this).GetViewBox();
228 }
229
230 } // namespace Dali