2 * Copyright (c) 2024 Samsung Electronics Co., Ltd.
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
21 #include <dali-toolkit-test-suite-utils.h>
22 #include <dali-toolkit/dali-toolkit.h>
23 #include <dali-toolkit/devel-api/controls/control-depth-index-ranges.h>
24 #include <dali-toolkit/devel-api/controls/control-devel.h>
25 #include <dali-toolkit/devel-api/text/rendering-backend.h>
26 #include <dali-toolkit/devel-api/visual-factory/transition-data.h>
27 #include <dali-toolkit/devel-api/visual-factory/visual-factory.h>
28 #include <dali-toolkit/devel-api/visuals/animated-gradient-visual-properties-devel.h>
29 #include <dali-toolkit/devel-api/visuals/arc-visual-properties-devel.h>
30 #include <dali-toolkit/devel-api/visuals/color-visual-properties-devel.h>
31 #include <dali-toolkit/devel-api/visuals/image-visual-properties-devel.h>
32 #include <dali-toolkit/devel-api/visuals/text-visual-properties-devel.h>
33 #include <dali-toolkit/devel-api/visuals/visual-actions-devel.h>
34 #include <dali-toolkit/devel-api/visuals/visual-properties-devel.h>
35 #include <dali/devel-api/actors/actor-devel.h>
36 #include <dali/devel-api/object/handle-devel.h>
37 #include <dali/devel-api/text-abstraction/font-client.h>
38 #include <toolkit-event-thread-callback.h>
40 #include "dummy-control.h"
43 using namespace Dali::Toolkit;
47 const char* TEST_GIF_FILE_NAME = TEST_RESOURCE_DIR "/anim.gif";
48 const char* TEST_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/gallery-small-1.jpg";
49 const char* TEST_NPATCH_FILE_NAME = TEST_RESOURCE_DIR "/button-up.9.png";
50 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
51 const char* TEST_OBJ_FILE_NAME = TEST_RESOURCE_DIR "/Cube.obj";
52 const char* TEST_MTL_FILE_NAME = TEST_RESOURCE_DIR "/ToyRobot-Metal.mtl";
53 const char* TEST_VECTOR_IMAGE_FILE_NAME = TEST_RESOURCE_DIR "/insta_camera.json";
54 const char* TEST_RESOURCE_LOCATION = TEST_RESOURCE_DIR "/";
56 const std::string DEFAULT_FONT_DIR("/resources/fonts");
58 Property::Map DefaultTransform()
60 Property::Map transformMap;
62 .Add(Toolkit::Visual::Transform::Property::OFFSET, Vector2(0.0f, 0.0f))
63 .Add(Toolkit::Visual::Transform::Property::SIZE, Vector2(1.0f, 1.0f))
64 .Add(Toolkit::Visual::Transform::Property::ORIGIN, Toolkit::Align::TOP_BEGIN)
65 .Add(Toolkit::Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::TOP_BEGIN)
66 .Add(Toolkit::Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE))
67 .Add(Toolkit::Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE));
71 bool DaliTestCheckMaps(const Property::Map& fontStyleMapGet, const Property::Map& fontStyleMapSet)
73 if(fontStyleMapGet.Count() == fontStyleMapSet.Count())
75 for(unsigned int index = 0u; index < fontStyleMapGet.Count(); ++index)
77 const KeyValuePair& valueGet = fontStyleMapGet.GetKeyValue(index);
79 Property::Value* valueSet = NULL;
80 if(valueGet.first.type == Property::Key::INDEX)
82 valueSet = fontStyleMapSet.Find(valueGet.first.indexKey);
86 // Get Key is a string so searching Set Map for a string key
87 valueSet = fontStyleMapSet.Find(valueGet.first.stringKey);
92 if(valueSet->GetType() == Dali::Property::STRING && (valueGet.second.Get<std::string>() != valueSet->Get<std::string>()))
94 tet_printf("Value got : [%s], expected : [%s]", valueGet.second.Get<std::string>().c_str(), valueSet->Get<std::string>().c_str());
97 else if(valueSet->GetType() == Dali::Property::BOOLEAN && (valueGet.second.Get<bool>() != valueSet->Get<bool>()))
99 tet_printf("Value got : [%d], expected : [%d]", valueGet.second.Get<bool>(), valueSet->Get<bool>());
102 else if(valueSet->GetType() == Dali::Property::INTEGER && (valueGet.second.Get<int>() != valueSet->Get<int>()))
104 tet_printf("Value got : [%d], expected : [%d]", valueGet.second.Get<int>(), valueSet->Get<int>());
107 else if(valueSet->GetType() == Dali::Property::FLOAT && (valueGet.second.Get<float>() != valueSet->Get<float>()))
109 tet_printf("Value got : [%f], expected : [%f]", valueGet.second.Get<float>(), valueSet->Get<float>());
112 else if(valueSet->GetType() == Dali::Property::VECTOR2 && (valueGet.second.Get<Vector2>() != valueSet->Get<Vector2>()))
114 Vector2 vector2Get = valueGet.second.Get<Vector2>();
115 Vector2 vector2Set = valueSet->Get<Vector2>();
116 tet_printf("Value got : [%f, %f], expected : [%f, %f]", vector2Get.x, vector2Get.y, vector2Set.x, vector2Set.y);
119 else if(valueSet->GetType() == Dali::Property::VECTOR4 && (valueGet.second.Get<Vector4>() != valueSet->Get<Vector4>()))
121 Vector4 vector4Get = valueGet.second.Get<Vector4>();
122 Vector4 vector4Set = valueSet->Get<Vector4>();
123 tet_printf("Value got : [%f, %f, %f, %f], expected : [%f, %f, %f, %f]", vector4Get.r, vector4Get.g, vector4Get.b, vector4Get.a, vector4Set.r, vector4Set.g, vector4Set.b, vector4Set.a);
129 if(valueGet.first.type == Property::Key::INDEX)
131 tet_printf(" The key %d doesn't exist.", valueGet.first.indexKey);
135 tet_printf(" The key %s doesn't exist.", valueGet.first.stringKey.c_str());
144 void TestShaderCodeContainSubstrings(Control control, std::vector<std::pair<std::string, bool>> substringCheckList, const char* location)
146 Renderer renderer = control.GetRendererAt(0);
147 Shader shader = renderer.GetShader();
148 Property::Value value = shader.GetProperty(Shader::Property::PROGRAM);
149 Property::Map* map = value.GetMap();
150 DALI_TEST_CHECK(map);
152 Property::Value* vertex = map->Find("vertex"); // vertex key name from shader-impl.cpp
153 std::string vertexShader;
154 DALI_TEST_CHECK(vertex->Get(vertexShader));
155 for(const auto& checkPair : substringCheckList)
157 const auto& keyword = checkPair.first;
158 const auto& expect = checkPair.second;
159 tet_printf("check [%s] %s exist in vertex shader\n", keyword.c_str(), expect ? "is" : "is not");
160 DALI_TEST_EQUALS((vertexShader.find(keyword.c_str()) != std::string::npos), expect, location);
163 Property::Value* fragment = map->Find("fragment"); // fragment key name from shader-impl.cpp
164 DALI_TEST_CHECK(fragment);
165 std::string fragmentShader;
166 DALI_TEST_CHECK(fragment->Get(fragmentShader));
167 for(const auto& checkPair : substringCheckList)
169 const auto& keyword = checkPair.first;
170 const auto& expect = checkPair.second;
171 tet_printf("check [%s] %s exist in fragment shader\n", keyword.c_str(), expect ? "is" : "is not");
172 DALI_TEST_EQUALS((fragmentShader.find(keyword.c_str()) != std::string::npos), expect, location);
176 void TestShaderCodeContainSubstringsForEachShader(Control control, std::vector<std::pair<std::string, std::pair<bool, bool>>> substringCheckList, const char* location)
178 Renderer renderer = control.GetRendererAt(0);
179 Shader shader = renderer.GetShader();
180 Property::Value value = shader.GetProperty(Shader::Property::PROGRAM);
181 Property::Map* map = value.GetMap();
182 DALI_TEST_CHECK(map);
184 Property::Value* vertex = map->Find("vertex"); // vertex key name from shader-impl.cpp
185 std::string vertexShader;
186 DALI_TEST_CHECK(vertex->Get(vertexShader));
187 for(const auto& checkPair : substringCheckList)
189 const auto& keyword = checkPair.first;
190 const auto& expect = checkPair.second.first;
191 tet_printf("check [%s] %s exist in vertex shader\n", keyword.c_str(), expect ? "is" : "is not");
192 DALI_TEST_EQUALS((vertexShader.find(keyword.c_str()) != std::string::npos), expect, location);
195 Property::Value* fragment = map->Find("fragment"); // fragment key name from shader-impl.cpp
196 DALI_TEST_CHECK(fragment);
197 std::string fragmentShader;
198 DALI_TEST_CHECK(fragment->Get(fragmentShader));
199 for(const auto& checkPair : substringCheckList)
201 const auto& keyword = checkPair.first;
202 const auto& expect = checkPair.second.second;
203 tet_printf("check [%s] %s exist in fragment shader\n", keyword.c_str(), expect ? "is" : "is not");
204 DALI_TEST_EQUALS((fragmentShader.find(keyword.c_str()) != std::string::npos), expect, location);
210 void dali_visual_startup(void)
212 test_return_value = TET_UNDEF;
215 void dali_visual_cleanup(void)
217 test_return_value = TET_PASS;
220 static void TestMixColor(Visual::Base visual, Property::Index mixColorIndex, const Vector4& testColor)
223 visual.CreatePropertyMap(map);
224 Property::Value* value = map.Find(mixColorIndex);
225 DALI_TEST_CHECK(value);
227 DALI_TEST_CHECK(value->Get(mixColor1));
228 DALI_TEST_EQUALS(mixColor1, Vector3(testColor), 0.001, TEST_LOCATION);
230 value = map.Find(Visual::Property::MIX_COLOR);
231 DALI_TEST_CHECK(value);
233 DALI_TEST_CHECK(value->Get(mixColor2));
234 DALI_TEST_EQUALS(mixColor2, testColor, 0.001, TEST_LOCATION);
236 value = map.Find(Visual::Property::OPACITY);
237 DALI_TEST_CHECK(value);
239 DALI_TEST_CHECK(value->Get(opacity));
240 DALI_TEST_EQUALS(opacity, testColor.a, 0.001, TEST_LOCATION);
243 int UtcDaliVisualCopyAndAssignment(void)
245 ToolkitTestApplication application;
246 tet_infoline("UtcDaliVisualCopyAndAssignment");
248 VisualFactory factory = VisualFactory::Get();
249 Property::Map propertyMap;
250 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
251 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
252 Visual::Base visual = factory.CreateVisual(propertyMap);
254 Visual::Base visualCopy(visual);
255 DALI_TEST_CHECK(visual == visualCopy);
257 Visual::Base emptyVisual;
258 Visual::Base emptyVisualCopy(emptyVisual);
259 DALI_TEST_CHECK(emptyVisual == emptyVisualCopy);
261 Visual::Base visualEquals;
262 visualEquals = visual;
263 DALI_TEST_CHECK(visual == visualEquals);
265 Visual::Base emptyVisualEquals;
266 emptyVisualEquals = emptyVisual;
267 DALI_TEST_CHECK(emptyVisual == emptyVisualEquals);
271 DALI_TEST_CHECK(visual = visualCopy);
276 int UtcDaliVisualSetName01(void)
278 ToolkitTestApplication application;
279 tet_infoline("UtcDaliVisualSetName");
281 VisualFactory factory = VisualFactory::Get();
282 Property::Map propertyMap;
283 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
284 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
285 Visual::Base visual = factory.CreateVisual(propertyMap);
287 const char* visualName = "backgroundVisual";
288 visual.SetName(visualName);
290 DALI_TEST_EQUALS(visual.GetName(), visualName, TEST_LOCATION);
295 int UtcDaliVisualSetGetDepthIndex(void)
297 ToolkitTestApplication application;
298 tet_infoline("UtcDaliVisualSetDepthIndex");
300 VisualFactory factory = VisualFactory::Get();
301 Property::Map propertyMap;
302 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
303 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
304 Visual::Base visual = factory.CreateVisual(propertyMap);
306 visual.SetDepthIndex(1);
308 DummyControl dummyControl = DummyControl::New(true);
309 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
310 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
312 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
313 application.GetScene().Add(dummyControl);
315 int depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>(Renderer::Property::DEPTH_INDEX);
316 DALI_TEST_EQUALS(depthIndex, 1, TEST_LOCATION);
317 DALI_TEST_EQUALS(visual.GetDepthIndex(), 1, TEST_LOCATION);
319 visual.SetDepthIndex(-1);
320 depthIndex = dummyControl.GetRendererAt(0u).GetProperty<int>(Renderer::Property::DEPTH_INDEX);
321 DALI_TEST_EQUALS(depthIndex, -1, TEST_LOCATION);
322 DALI_TEST_EQUALS(visual.GetDepthIndex(), -1, TEST_LOCATION);
327 int UtcDaliVisualSize(void)
329 ToolkitTestApplication application;
330 tet_infoline("UtcDaliVisualSize");
332 VisualFactory factory = VisualFactory::Get();
333 Vector2 controlSize(20.f, 30.f);
337 Dali::Property::Map map;
338 map[Toolkit::Visual::Property::TYPE] = Visual::COLOR;
339 map[ColorVisual::Property::MIX_COLOR] = Color::MAGENTA;
341 Visual::Base colorVisual = factory.CreateVisual(map);
342 colorVisual.SetTransformAndSize(DefaultTransform(), controlSize);
344 colorVisual.GetNaturalSize(naturalSize);
345 DALI_TEST_EQUALS(naturalSize, Vector2::ZERO, TEST_LOCATION);
349 map[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
350 map[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
351 map[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
352 map[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 200.0f;
353 Visual::Base imageVisual = factory.CreateVisual(map);
354 imageVisual.SetTransformAndSize(DefaultTransform(), controlSize);
356 imageVisual.GetNaturalSize(naturalSize);
357 DALI_TEST_EQUALS(naturalSize, Vector2(100.f, 200.f), TEST_LOCATION);
359 // n patch visual is tested in the utc-Dali-VisualFactory.cpp
362 float borderSize = 5.f;
364 map[Toolkit::Visual::Property::TYPE] = Visual::BORDER;
365 map[BorderVisual::Property::COLOR] = Color::RED;
366 map[BorderVisual::Property::SIZE] = borderSize;
367 Visual::Base borderVisual = factory.CreateVisual(map);
368 borderVisual.SetTransformAndSize(DefaultTransform(), controlSize);
369 borderVisual.GetNaturalSize(naturalSize);
370 DALI_TEST_EQUALS(naturalSize, Vector2::ZERO, TEST_LOCATION);
372 // gradient gradientVisual
373 Property::Map propertyMap;
374 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
375 Vector2 start(-1.f, -1.f);
376 Vector2 end(1.f, 1.f);
377 propertyMap.Insert("mixColor", Color::MAGENTA);
378 propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
379 propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
380 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f));
381 propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
382 Property::Array stopColors;
383 stopColors.PushBack(Color::RED);
384 stopColors.PushBack(Color::GREEN);
385 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
386 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
387 gradientVisual.SetTransformAndSize(DefaultTransform(), controlSize);
388 gradientVisual.GetNaturalSize(naturalSize);
389 DALI_TEST_EQUALS(naturalSize, Vector2::ZERO, TEST_LOCATION);
391 // animated gradient visual
393 propertyMap.Insert(Toolkit::Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
394 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
395 animatedGradientVisual.GetNaturalSize(naturalSize);
396 animatedGradientVisual.SetTransformAndSize(DefaultTransform(), controlSize);
397 DALI_TEST_EQUALS(naturalSize, Vector2::ZERO, TEST_LOCATION);
401 // Load some fonts to get the same metrics on different platforms.
402 TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
403 fontClient.SetDpi(96u, 96u);
405 char* pathNamePtr = get_current_dir_name();
406 const std::string pathName(pathNamePtr);
409 fontClient.GetFontId(pathName + DEFAULT_FONT_DIR + "/tizen/TizenSansRegular.ttf");
411 // Create a TextVisual with a font size of 12 first
413 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::TEXT);
414 propertyMap.Insert(TextVisual::Property::ENABLE_MARKUP, true);
415 propertyMap.Insert(TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>");
416 propertyMap.Insert(TextVisual::Property::MULTI_LINE, true);
418 Visual::Base smallTextVisual = factory.CreateVisual(propertyMap);
419 Vector2 smallTextVisualNaturalSize;
420 smallTextVisual.GetNaturalSize(smallTextVisualNaturalSize);
422 // Then create a TextVisual with a font size of 20
423 propertyMap[TextVisual::Property::TEXT] = "<font family='TizenSans' size='20'>Hello world</font>";
424 Visual::Base largeTextVisual = factory.CreateVisual(propertyMap);
425 Vector2 largeTextVisualNaturalSize;
426 largeTextVisual.GetNaturalSize(largeTextVisualNaturalSize);
428 // Compare the sizes of the two text visuals, the second one should be bigger as it has a larger point size in the markup.
429 DALI_TEST_CHECK(smallTextVisualNaturalSize.width < largeTextVisualNaturalSize.width &&
430 smallTextVisualNaturalSize.height < largeTextVisualNaturalSize.height);
432 // The height returned for a particular width should also be greater for the large text visual
433 DALI_TEST_CHECK(smallTextVisual.GetHeightForWidth(40.f) < largeTextVisual.GetHeightForWidth(40.f));
435 //AnimatedImageVisual
436 Visual::Base animatedImageVisual = factory.CreateVisual(TEST_GIF_FILE_NAME, ImageDimensions());
437 animatedImageVisual.SetTransformAndSize(DefaultTransform(), controlSize);
438 animatedImageVisual.GetNaturalSize(naturalSize);
439 // TEST_GIF_FILE: anim.gif
440 // resolution: 50*50, frame count: 4, frame delay: 0.2 second for each frame
441 DALI_TEST_EQUALS(naturalSize, Vector2(50.f, 50.f), TEST_LOCATION);
446 int UtcDaliVisualSetOnOffScene(void)
448 ToolkitTestApplication application;
449 tet_infoline("UtcDaliVisualSetOnOffScene");
451 VisualFactory factory = VisualFactory::Get();
452 Property::Map propertyMap;
453 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
454 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
455 Visual::Base visual = factory.CreateVisual(propertyMap);
457 DummyControl actor = DummyControl::New(true);
458 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
459 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
461 actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
463 application.SendNotification();
464 application.Render(0);
465 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
467 application.GetScene().Add(actor);
469 application.SendNotification();
470 application.Render(0);
471 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
473 application.GetScene().Remove(actor);
475 application.SendNotification();
476 application.Render(0);
477 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
482 int UtcDaliVisualSetOnOffScene2(void)
484 ToolkitTestApplication application;
485 tet_infoline("UtcDaliVisualSetOnOffScene2");
487 VisualFactory factory = VisualFactory::Get();
488 Property::Map propertyMap;
489 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::SVG);
490 propertyMap.Insert(ImageVisual::Property::URL, TEST_SVG_FILE_NAME);
491 Visual::Base visual = factory.CreateVisual(propertyMap);
493 DummyControl actor = DummyControl::New(true);
494 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
495 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
497 actor.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
499 application.SendNotification();
500 application.Render(0);
501 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
504 application.GetScene().Add(actor);
506 application.SendNotification();
507 application.Render(0);
509 // Wait for loading & rasterization
510 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
512 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
513 Renderer renderer = actor.GetRendererAt(0);
514 auto textures = renderer.GetTextures();
515 DALI_TEST_CHECK(textures.GetTextureCount() != 0u);
517 application.GetScene().Remove(actor);
519 application.SendNotification();
520 application.Render(0);
521 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
524 application.GetScene().Add(actor);
526 application.SendNotification();
527 application.Render(0);
528 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
529 DALI_TEST_CHECK(actor.GetRendererCount() == 1u);
530 renderer = actor.GetRendererAt(0);
531 textures = renderer.GetTextures();
532 DALI_TEST_CHECK(textures.GetTextureCount() != 0u);
534 application.GetScene().Remove(actor);
536 application.SendNotification();
537 application.Render(0);
538 DALI_TEST_CHECK(actor.GetRendererCount() == 0u);
543 int UtcDaliVisualGetPropertyMap1(void)
545 ToolkitTestApplication application;
546 tet_infoline("UtcDaliVisualGetPropertyMap1: ColorVisual (With base MixColor");
548 VisualFactory factory = VisualFactory::Get();
549 Property::Map propertyMap;
550 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
551 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
552 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, 10.0f);
553 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE);
554 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 20.0f);
555 propertyMap.Insert(DevelVisual::Property::BORDERLINE_COLOR, Color::RED);
556 propertyMap.Insert(DevelVisual::Property::BORDERLINE_OFFSET, -1.0f);
557 propertyMap.Insert(DevelColorVisual::Property::BLUR_RADIUS, 20.0f);
558 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
560 Property::Map resultMap;
561 colorVisual.CreatePropertyMap(resultMap);
563 Property::Value* typeValue = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
564 DALI_TEST_CHECK(typeValue);
565 DALI_TEST_CHECK(typeValue->Get<int>() == Visual::COLOR);
567 Property::Value* colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
568 DALI_TEST_CHECK(colorValue);
569 DALI_TEST_CHECK(colorValue->Get<Vector4>() == Color::BLUE);
571 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
572 DALI_TEST_CHECK(cornerRadiusValue);
573 DALI_TEST_CHECK(cornerRadiusValue->Get<Vector4>() == Vector4(10.0f, 10.0f, 10.0f, 10.0f));
575 Property::Value* cornerRadiusPolicyValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER);
576 DALI_TEST_CHECK(cornerRadiusPolicyValue);
577 DALI_TEST_CHECK(cornerRadiusPolicyValue->Get<int>() == Toolkit::Visual::Transform::Policy::RELATIVE);
579 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
580 DALI_TEST_CHECK(borderlineWidthValue);
581 DALI_TEST_CHECK(borderlineWidthValue->Get<float>() == 20.0f);
583 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
584 DALI_TEST_CHECK(borderlineColorValue);
585 DALI_TEST_CHECK(borderlineColorValue->Get<Vector4>() == Color::RED);
587 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
588 DALI_TEST_CHECK(borderlineOffsetValue);
589 DALI_TEST_CHECK(borderlineOffsetValue->Get<float>() == -1.0f);
591 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
592 DALI_TEST_CHECK(blurRadiusValue);
593 DALI_TEST_CHECK(blurRadiusValue->Get<float>() == 20.0f);
595 // change the blend color
596 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::CYAN;
597 colorVisual = factory.CreateVisual(propertyMap);
598 colorVisual.CreatePropertyMap(resultMap);
600 colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
601 DALI_TEST_CHECK(colorValue);
602 DALI_TEST_CHECK(colorValue->Get<Vector4>() == Color::CYAN);
605 propertyMap[DevelColorVisual::Property::BLUR_RADIUS] = "3.0f";
607 colorVisual = factory.CreateVisual(propertyMap);
608 colorVisual.CreatePropertyMap(resultMap);
610 blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
611 DALI_TEST_CHECK(blurRadiusValue);
612 DALI_TEST_CHECK(blurRadiusValue->Get<float>() == 0.0f);
617 int UtcDaliVisualGetPropertyMap2(void)
619 ToolkitTestApplication application;
620 tet_infoline("UtcDaliVisualGetPropertyMap2: BorderVisual");
622 VisualFactory factory = VisualFactory::Get();
623 Property::Map propertyMap;
624 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
625 propertyMap.Insert("mixColor", Vector4(1.0f, 0.0f, 1.0f, 0.5f));
626 propertyMap.Insert("borderColor", Color::BLUE);
627 propertyMap.Insert("borderSize", 5.f);
628 propertyMap.Insert("antiAliasing", true);
629 Visual::Base borderVisual = factory.CreateVisual(propertyMap);
631 Property::Map resultMap;
632 borderVisual.CreatePropertyMap(resultMap);
634 // check the property values from the returned map from visual
635 Property::Value* typeValue = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
636 DALI_TEST_CHECK(typeValue);
637 DALI_TEST_CHECK(typeValue->Get<int>() == Visual::BORDER);
639 Property::Value* colorValue = resultMap.Find(BorderVisual::Property::COLOR, Property::VECTOR4);
640 DALI_TEST_CHECK(colorValue);
641 DALI_TEST_CHECK(colorValue->Get<Vector4>() == Color::BLUE);
643 Property::Value* sizeValue = resultMap.Find(BorderVisual::Property::SIZE, Property::FLOAT);
644 DALI_TEST_CHECK(sizeValue);
645 DALI_TEST_CHECK(sizeValue->Get<float>() == 5.f);
647 Property::Value* AAValue = resultMap.Find(BorderVisual::Property::ANTI_ALIASING, Property::BOOLEAN);
648 DALI_TEST_CHECK(AAValue);
649 DALI_TEST_CHECK(AAValue->Get<bool>() == true);
651 Property::Map propertyMap1;
652 propertyMap1[Toolkit::Visual::Property::TYPE] = Visual::BORDER;
653 propertyMap1[BorderVisual::Property::COLOR] = Color::CYAN;
654 propertyMap1[BorderVisual::Property::SIZE] = 10.0f;
655 borderVisual = factory.CreateVisual(propertyMap1);
656 borderVisual.CreatePropertyMap(resultMap);
658 typeValue = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
659 DALI_TEST_CHECK(typeValue);
660 DALI_TEST_CHECK(typeValue->Get<int>() == Visual::BORDER);
662 colorValue = resultMap.Find(BorderVisual::Property::COLOR, Property::VECTOR4);
663 DALI_TEST_CHECK(colorValue);
664 DALI_TEST_CHECK(colorValue->Get<Vector4>() == Color::CYAN);
666 sizeValue = resultMap.Find(BorderVisual::Property::SIZE, Property::FLOAT);
667 DALI_TEST_CHECK(sizeValue);
668 DALI_TEST_CHECK(sizeValue->Get<float>() == 10.f);
673 int UtcDaliVisualGetPropertyMap2N(void)
675 ToolkitTestApplication application;
676 tet_infoline("UtcDaliVisualGetPropertyMap2N: BorderVisual with no setup properties");
678 VisualFactory factory = VisualFactory::Get();
679 Property::Map propertyMap;
680 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
681 Visual::Base borderVisual = factory.CreateVisual(propertyMap);
683 tet_infoline("Test that the visual is created, with a default renderer");
684 DALI_TEST_CHECK(borderVisual);
686 DummyControl dummyControl = DummyControl::New(true);
687 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
688 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, borderVisual);
689 application.GetScene().Add(dummyControl);
691 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 1, TEST_LOCATION);
696 int UtcDaliVisualGetPropertyMap3(void)
698 ToolkitTestApplication application;
699 tet_infoline("UtcDaliVisualGetPropertyMap3: linear GradientVisual");
701 VisualFactory factory = VisualFactory::Get();
702 DALI_TEST_CHECK(factory);
704 Property::Map propertyMap;
705 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
707 Vector2 start(-1.f, -1.f);
708 Vector2 end(1.f, 1.f);
709 propertyMap.Insert("startPosition", start);
710 propertyMap.Insert("endPosition", end);
711 propertyMap.Insert("spreadMethod", GradientVisual::SpreadMethod::REPEAT);
713 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.2f, 0.8f));
715 Property::Array stopColors;
716 stopColors.PushBack(Color::RED);
717 stopColors.PushBack(Color::GREEN);
718 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
720 float borderlineWidth = 4.0f;
721 Vector4 cornerRadius(7.0f, 10.0f, 13.0f, 16.0f);
722 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth);
723 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, cornerRadius);
725 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
727 Property::Map resultMap;
728 gradientVisual.CreatePropertyMap(resultMap);
730 // check the property values from the returned map from visual
731 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
732 DALI_TEST_CHECK(value);
733 DALI_TEST_CHECK(value->Get<int>() == Visual::GRADIENT);
735 value = resultMap.Find(GradientVisual::Property::UNITS, Property::INTEGER);
736 DALI_TEST_CHECK(value);
737 DALI_TEST_CHECK(value->Get<int>() == GradientVisual::Units::OBJECT_BOUNDING_BOX);
739 value = resultMap.Find(GradientVisual::Property::SPREAD_METHOD, Property::INTEGER);
740 DALI_TEST_CHECK(value);
741 DALI_TEST_CHECK(value->Get<int>() == GradientVisual::SpreadMethod::REPEAT);
743 value = resultMap.Find(GradientVisual::Property::START_POSITION, Property::VECTOR2);
744 DALI_TEST_CHECK(value);
745 DALI_TEST_EQUALS(value->Get<Vector2>(), start, Math::MACHINE_EPSILON_100, TEST_LOCATION);
747 value = resultMap.Find(GradientVisual::Property::END_POSITION, Property::VECTOR2);
748 DALI_TEST_CHECK(value);
749 DALI_TEST_EQUALS(value->Get<Vector2>(), end, Math::MACHINE_EPSILON_100, TEST_LOCATION);
751 value = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
752 DALI_TEST_CHECK(value);
753 DALI_TEST_EQUALS(value->Get<float>(), borderlineWidth, Math::MACHINE_EPSILON_100, TEST_LOCATION);
755 value = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
756 DALI_TEST_CHECK(value);
757 DALI_TEST_EQUALS(value->Get<Vector4>(), cornerRadius, Math::MACHINE_EPSILON_100, TEST_LOCATION);
759 value = resultMap.Find(GradientVisual::Property::STOP_OFFSET, Property::ARRAY);
760 DALI_TEST_CHECK(value);
761 Property::Array* offsetArray = value->GetArray();
762 DALI_TEST_CHECK(offsetArray->Count() == 2);
763 DALI_TEST_EQUALS(offsetArray->GetElementAt(0).Get<float>(), 0.2f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
764 DALI_TEST_EQUALS(offsetArray->GetElementAt(1).Get<float>(), 0.8f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
766 value = resultMap.Find(GradientVisual::Property::STOP_COLOR, Property::ARRAY);
767 DALI_TEST_CHECK(value);
768 Property::Array* colorArray = value->GetArray();
769 DALI_TEST_CHECK(colorArray->Count() == 2);
770 DALI_TEST_EQUALS(colorArray->GetElementAt(0).Get<Vector4>(), Color::RED, Math::MACHINE_EPSILON_100, TEST_LOCATION);
771 DALI_TEST_EQUALS(colorArray->GetElementAt(1).Get<Vector4>(), Color::GREEN, Math::MACHINE_EPSILON_100, TEST_LOCATION);
776 int UtcDaliVisualGetPropertyMap4(void)
778 ToolkitTestApplication application;
779 tet_infoline("UtcDaliVisualGetPropertyMap4: radial GradientVisual");
781 VisualFactory factory = VisualFactory::Get();
782 DALI_TEST_CHECK(factory);
784 Property::Map propertyMap;
785 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
787 Vector2 center(100.f, 100.f);
788 float radius = 100.f;
789 propertyMap.Insert(GradientVisual::Property::UNITS, GradientVisual::Units::USER_SPACE);
790 propertyMap.Insert(GradientVisual::Property::CENTER, center);
791 propertyMap.Insert(GradientVisual::Property::RADIUS, radius);
792 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector3(0.1f, 0.3f, 1.1f));
794 Property::Array stopColors;
795 stopColors.PushBack(Color::RED);
796 stopColors.PushBack(Color::BLACK);
797 stopColors.PushBack(Color::GREEN);
798 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
800 float borderlineWidth = 8.0f;
801 Vector4 cornerRadius(1.0f, 2.0f, 4.0f, 8.0f);
802 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, borderlineWidth);
803 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, cornerRadius);
805 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
806 DALI_TEST_CHECK(gradientVisual);
808 Property::Map resultMap;
809 gradientVisual.CreatePropertyMap(resultMap);
811 // check the property values from the returned map from visual
812 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
813 DALI_TEST_CHECK(value);
814 DALI_TEST_CHECK(value->Get<int>() == Visual::GRADIENT);
816 value = resultMap.Find(GradientVisual::Property::UNITS, Property::INTEGER);
817 DALI_TEST_CHECK(value);
818 DALI_TEST_CHECK(value->Get<int>() == GradientVisual::Units::USER_SPACE);
820 value = resultMap.Find(GradientVisual::Property::SPREAD_METHOD, Property::INTEGER);
821 DALI_TEST_CHECK(value);
822 DALI_TEST_CHECK(value->Get<int>() == GradientVisual::SpreadMethod::PAD);
824 value = resultMap.Find(GradientVisual::Property::CENTER, Property::VECTOR2);
825 DALI_TEST_CHECK(value);
826 DALI_TEST_EQUALS(value->Get<Vector2>(), center, Math::MACHINE_EPSILON_100, TEST_LOCATION);
828 value = resultMap.Find(GradientVisual::Property::RADIUS, Property::FLOAT);
829 DALI_TEST_CHECK(value);
830 DALI_TEST_EQUALS(value->Get<float>(), radius, Math::MACHINE_EPSILON_100, TEST_LOCATION);
832 value = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
833 DALI_TEST_CHECK(value);
834 DALI_TEST_EQUALS(value->Get<float>(), borderlineWidth, Math::MACHINE_EPSILON_100, TEST_LOCATION);
836 value = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
837 DALI_TEST_CHECK(value);
838 DALI_TEST_EQUALS(value->Get<Vector4>(), cornerRadius, Math::MACHINE_EPSILON_100, TEST_LOCATION);
840 value = resultMap.Find(GradientVisual::Property::STOP_OFFSET, Property::ARRAY);
841 DALI_TEST_CHECK(value);
842 Property::Array* offsetArray = value->GetArray();
843 DALI_TEST_CHECK(offsetArray->Count() == 3);
844 DALI_TEST_EQUALS(offsetArray->GetElementAt(0).Get<float>(), 0.1f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
845 DALI_TEST_EQUALS(offsetArray->GetElementAt(1).Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
846 // any stop value will be clamped to [0.0, 1.0];
847 DALI_TEST_EQUALS(offsetArray->GetElementAt(2).Get<float>(), 1.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
849 value = resultMap.Find(GradientVisual::Property::STOP_COLOR, Property::ARRAY);
850 DALI_TEST_CHECK(value);
851 Property::Array* colorArray = value->GetArray();
852 DALI_TEST_CHECK(colorArray->Count() == 3);
853 DALI_TEST_EQUALS(colorArray->GetElementAt(0).Get<Vector4>(), Color::RED, Math::MACHINE_EPSILON_100, TEST_LOCATION);
854 DALI_TEST_EQUALS(colorArray->GetElementAt(1).Get<Vector4>(), Color::BLACK, Math::MACHINE_EPSILON_100, TEST_LOCATION);
855 DALI_TEST_EQUALS(colorArray->GetElementAt(2).Get<Vector4>(), Color::GREEN, Math::MACHINE_EPSILON_100, TEST_LOCATION);
860 int UtcDaliVisualGetPropertyMap5(void)
862 ToolkitTestApplication application;
863 tet_infoline("UtcDaliVisualGetPropertyMap5: ImageVisual");
865 VisualFactory factory = VisualFactory::Get();
866 Property::Map propertyMap;
867 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::IMAGE);
868 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::MAGENTA);
869 propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
870 propertyMap.Insert(ImageVisual::Property::DESIRED_WIDTH, 20);
871 propertyMap.Insert(ImageVisual::Property::DESIRED_HEIGHT, 30);
872 propertyMap.Insert("fittingMode", FittingMode::FIT_HEIGHT);
873 propertyMap.Insert("samplingMode", SamplingMode::BOX_THEN_NEAREST);
874 propertyMap.Insert("pixelArea", Vector4(0.25f, 0.25f, 0.5f, 0.5f));
875 propertyMap.Insert("wrapModeU", WrapMode::REPEAT);
876 propertyMap.Insert("wrapModeV", WrapMode::MIRRORED_REPEAT);
877 propertyMap.Insert("synchronousLoading", true);
879 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
880 DALI_TEST_CHECK(imageVisual);
882 Property::Map resultMap;
883 imageVisual.CreatePropertyMap(resultMap);
885 // check the property values from the returned map from visual
886 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
887 DALI_TEST_CHECK(value);
888 DALI_TEST_CHECK(value->Get<int>() == Visual::IMAGE);
890 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
891 DALI_TEST_CHECK(value);
892 DALI_TEST_CHECK(value->Get<std::string>() == TEST_IMAGE_FILE_NAME);
894 value = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
895 DALI_TEST_CHECK(value);
896 DALI_TEST_CHECK(value->Get<Vector4>() == Color::MAGENTA);
898 value = resultMap.Find(ImageVisual::Property::FITTING_MODE, Property::INTEGER);
899 DALI_TEST_CHECK(value);
900 DALI_TEST_CHECK(value->Get<int>() == FittingMode::FIT_HEIGHT);
902 value = resultMap.Find(ImageVisual::Property::SAMPLING_MODE, Property::INTEGER);
903 DALI_TEST_CHECK(value);
904 DALI_TEST_CHECK(value->Get<int>() == SamplingMode::BOX_THEN_NEAREST);
906 value = resultMap.Find(ImageVisual::Property::DESIRED_WIDTH, Property::INTEGER);
907 DALI_TEST_CHECK(value);
908 DALI_TEST_CHECK(value->Get<int>() == 20);
910 value = resultMap.Find(ImageVisual::Property::DESIRED_HEIGHT, Property::INTEGER);
911 DALI_TEST_CHECK(value);
912 DALI_TEST_CHECK(value->Get<int>() == 30);
914 value = resultMap.Find(ImageVisual::Property::PIXEL_AREA, Property::VECTOR4);
915 DALI_TEST_CHECK(value);
916 DALI_TEST_EQUALS(value->Get<Vector4>(), Vector4(0.25f, 0.25f, 0.5f, 0.5f), Math::MACHINE_EPSILON_100, TEST_LOCATION);
918 value = resultMap.Find(ImageVisual::Property::WRAP_MODE_U, Property::INTEGER);
919 DALI_TEST_CHECK(value);
920 DALI_TEST_CHECK(value->Get<int>() == WrapMode::REPEAT);
922 value = resultMap.Find(ImageVisual::Property::WRAP_MODE_V, Property::INTEGER);
923 DALI_TEST_CHECK(value);
924 DALI_TEST_CHECK(value->Get<int>() == WrapMode::MIRRORED_REPEAT);
926 value = resultMap.Find(ImageVisual::Property::SYNCHRONOUS_LOADING, Property::BOOLEAN);
927 DALI_TEST_CHECK(value);
928 DALI_TEST_CHECK(value->Get<bool>() == true);
933 int UtcDaliVisualGetPropertyMap6(void)
935 ToolkitTestApplication application;
936 tet_infoline("UtcDaliVisualGetPropertyMap6: NPatchVisual");
938 Rect<int> border(1, 1, 1, 1);
940 VisualFactory factory = VisualFactory::Get();
941 Property::Map propertyMap;
942 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::N_PATCH);
943 propertyMap.Insert("mixColor", Color::MAGENTA);
944 propertyMap.Insert(ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME);
945 propertyMap.Insert(ImageVisual::Property::BORDER_ONLY, true);
946 propertyMap.Insert(ImageVisual::Property::BORDER, border);
947 propertyMap.Insert(DevelImageVisual::Property::AUXILIARY_IMAGE, "application-icon-30.png");
948 propertyMap.Insert(DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, 0.9f);
949 Visual::Base nPatchVisual = factory.CreateVisual(propertyMap);
951 Property::Map resultMap;
952 nPatchVisual.CreatePropertyMap(resultMap);
954 // check the property values from the returned map from visual
955 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
956 DALI_TEST_CHECK(value);
957 DALI_TEST_CHECK(value->Get<int>() == Visual::N_PATCH);
959 value = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
960 DALI_TEST_CHECK(value);
961 DALI_TEST_CHECK(value->Get<Vector4>() == Color::MAGENTA);
963 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
964 DALI_TEST_CHECK(value);
965 DALI_TEST_CHECK(value->Get<std::string>() == TEST_NPATCH_FILE_NAME);
967 value = resultMap.Find(ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN);
968 DALI_TEST_CHECK(value);
969 DALI_TEST_CHECK(value->Get<bool>());
971 value = resultMap.Find(ImageVisual::Property::BORDER, Property::RECTANGLE);
972 DALI_TEST_CHECK(value);
973 DALI_TEST_CHECK(value->Get<Rect<int>>() == border);
975 value = resultMap.Find(DevelImageVisual::Property::AUXILIARY_IMAGE, Property::STRING);
976 DALI_TEST_CHECK(value);
977 DALI_TEST_CHECK(value->Get<std::string>() == "application-icon-30.png");
979 value = resultMap.Find(DevelImageVisual::Property::AUXILIARY_IMAGE_ALPHA, Property::FLOAT);
980 DALI_TEST_CHECK(value);
981 DALI_TEST_CHECK(value->Get<float>() == 0.9f);
983 Vector4 border1(1.0f, 1.0f, 1.0f, 1.0f);
985 Property::Map propertyMap1;
986 propertyMap1.Insert(Toolkit::Visual::Property::TYPE, Visual::N_PATCH);
987 propertyMap1.Insert("mixColor", Color::MAGENTA);
988 propertyMap1.Insert(ImageVisual::Property::URL, TEST_NPATCH_FILE_NAME);
989 propertyMap1.Insert(ImageVisual::Property::BORDER_ONLY, true);
990 propertyMap1.Insert(ImageVisual::Property::BORDER, border1);
991 nPatchVisual = factory.CreateVisual(propertyMap1);
993 nPatchVisual.CreatePropertyMap(resultMap);
995 // check the property values from the returned map from visual
996 value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
997 DALI_TEST_CHECK(value);
998 DALI_TEST_CHECK(value->Get<int>() == Visual::N_PATCH);
1000 value = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
1001 DALI_TEST_CHECK(value);
1002 DALI_TEST_CHECK(value->Get<Vector4>() == Color::MAGENTA);
1004 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
1005 DALI_TEST_CHECK(value);
1006 DALI_TEST_CHECK(value->Get<std::string>() == TEST_NPATCH_FILE_NAME);
1008 value = resultMap.Find(ImageVisual::Property::BORDER_ONLY, Property::BOOLEAN);
1009 DALI_TEST_CHECK(value);
1010 DALI_TEST_CHECK(value->Get<bool>());
1012 value = resultMap.Find(ImageVisual::Property::BORDER, Property::RECTANGLE);
1013 DALI_TEST_CHECK(value);
1014 DALI_TEST_CHECK(value->Get<Rect<int>>() == border);
1019 int UtcDaliVisualGetPropertyMap7(void)
1021 ToolkitTestApplication application;
1022 tet_infoline("UtcDaliVisualGetPropertyMap7: SvgVisual");
1024 // request SvgVisual with a property map
1025 VisualFactory factory = VisualFactory::Get();
1026 Property::Map propertyMap;
1027 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::SVG);
1028 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::WHITE);
1029 propertyMap.Insert(ImageVisual::Property::URL, TEST_SVG_FILE_NAME);
1030 propertyMap.Insert(ImageVisual::Property::ATLASING, false);
1031 Visual::Base svgVisual = factory.CreateVisual(propertyMap);
1033 Property::Map resultMap;
1034 svgVisual.CreatePropertyMap(resultMap);
1035 // check the property values from the returned map from a visual
1036 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1037 DALI_TEST_CHECK(value);
1038 DALI_TEST_CHECK(value->Get<int>() == Visual::SVG);
1040 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
1041 DALI_TEST_CHECK(value);
1042 DALI_TEST_CHECK(value->Get<std::string>() == TEST_SVG_FILE_NAME);
1044 value = resultMap.Find(ImageVisual::Property::ATLASING, Property::BOOLEAN);
1045 DALI_TEST_CHECK(value);
1046 DALI_TEST_CHECK(value->Get<bool>() == false);
1048 // request SvgVisual with a property map 2
1049 propertyMap.Clear();
1050 propertyMap["visualType"] = Visual::SVG;
1051 propertyMap["mixColor"] = Color::WHITE;
1052 propertyMap["url"] = TEST_SVG_FILE_NAME;
1053 propertyMap["atlasing"] = true;
1054 Visual::Base svgVisual1 = factory.CreateVisual(propertyMap);
1057 svgVisual1.CreatePropertyMap(resultMap);
1058 // check the property values from the returned map from a visual
1059 value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1060 DALI_TEST_CHECK(value);
1061 DALI_TEST_CHECK(value->Get<int>() == Visual::SVG);
1063 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
1064 DALI_TEST_CHECK(value);
1065 DALI_TEST_CHECK(value->Get<std::string>() == TEST_SVG_FILE_NAME);
1067 value = resultMap.Find(ImageVisual::Property::ATLASING, Property::BOOLEAN);
1068 DALI_TEST_CHECK(value);
1069 DALI_TEST_CHECK(value->Get<bool>() == true);
1071 // request SvgVisual with an URL
1072 Visual::Base svgVisual2 = factory.CreateVisual(TEST_SVG_FILE_NAME, ImageDimensions());
1074 svgVisual2.CreatePropertyMap(resultMap);
1075 // check the property values from the returned map from a visual
1076 value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1077 DALI_TEST_CHECK(value);
1078 DALI_TEST_CHECK(value->Get<int>() == Visual::SVG);
1080 value = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
1081 DALI_TEST_CHECK(value);
1082 DALI_TEST_CHECK(value->Get<std::string>() == TEST_SVG_FILE_NAME);
1088 int UtcDaliVisualGetPropertyMap8(void)
1090 ToolkitTestApplication application;
1091 tet_infoline("UtcDaliVisualGetPropertyMap8: MeshVisual");
1093 //Request MeshVisual using a property map.
1094 VisualFactory factory = VisualFactory::Get();
1095 Property::Map propertyMap;
1096 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::MESH);
1097 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
1098 propertyMap.Insert(MeshVisual::Property::OBJECT_URL, TEST_OBJ_FILE_NAME);
1099 propertyMap.Insert(MeshVisual::Property::MATERIAL_URL, TEST_MTL_FILE_NAME);
1100 propertyMap.Insert(MeshVisual::Property::TEXTURES_PATH, TEST_RESOURCE_LOCATION);
1101 propertyMap.Insert(MeshVisual::Property::SHADING_MODE, MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING);
1102 propertyMap.Insert(MeshVisual::Property::LIGHT_POSITION, Vector3(5.0f, 10.0f, 15.0f));
1103 Visual::Base meshVisual = factory.CreateVisual(propertyMap);
1105 Property::Map resultMap;
1106 meshVisual.CreatePropertyMap(resultMap);
1107 TestMixColor(meshVisual, Visual::Property::MIX_COLOR, Color::BLUE);
1109 //Check values in the result map are identical to the initial map's values.
1110 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1111 DALI_TEST_CHECK(value);
1112 DALI_TEST_EQUALS(value->Get<int>(), (int)Visual::MESH, TEST_LOCATION);
1114 value = resultMap.Find(MeshVisual::Property::OBJECT_URL, Property::STRING);
1115 DALI_TEST_CHECK(value);
1116 DALI_TEST_EQUALS(value->Get<std::string>(), TEST_OBJ_FILE_NAME, TEST_LOCATION);
1118 value = resultMap.Find(MeshVisual::Property::MATERIAL_URL, Property::STRING);
1119 DALI_TEST_CHECK(value);
1120 DALI_TEST_EQUALS(value->Get<std::string>(), TEST_MTL_FILE_NAME, TEST_LOCATION);
1122 value = resultMap.Find(MeshVisual::Property::TEXTURES_PATH, Property::STRING);
1123 DALI_TEST_CHECK(value);
1124 DALI_TEST_EQUALS(value->Get<std::string>(), TEST_RESOURCE_LOCATION, TEST_LOCATION);
1126 value = resultMap.Find(MeshVisual::Property::SHADING_MODE, Property::INTEGER);
1127 DALI_TEST_CHECK(value);
1128 DALI_TEST_EQUALS(value->Get<int>(), (int)MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING, TEST_LOCATION);
1130 value = resultMap.Find(MeshVisual::Property::LIGHT_POSITION, Property::VECTOR3);
1131 DALI_TEST_CHECK(value);
1132 DALI_TEST_EQUALS(value->Get<Vector3>(), Vector3(5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1137 //Primitive shape visual
1138 int UtcDaliVisualGetPropertyMap9(void)
1140 ToolkitTestApplication application;
1141 tet_infoline("UtcDaliVisualGetPropertyMap9: PrimitiveVisual");
1143 static std::vector<UniformData> customUniforms =
1145 UniformData("mixColor", Property::Type::VECTOR3),
1148 TestGraphicsController& graphics = application.GetGraphicsController();
1149 graphics.AddCustomUniforms(customUniforms);
1151 Vector4 color = Vector4(1.0, 0.8, 0.6, 1.0);
1152 Vector3 dimensions = Vector3(1.0, 2.0, 3.0);
1154 //Request PrimitiveVisual using a property map.
1155 VisualFactory factory = VisualFactory::Get();
1156 Property::Map propertyMap;
1157 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::PRIMITIVE);
1158 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
1159 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, color);
1160 propertyMap.Insert(PrimitiveVisual::Property::SLICES, 10);
1161 propertyMap.Insert(PrimitiveVisual::Property::STACKS, 20);
1162 propertyMap.Insert(PrimitiveVisual::Property::SCALE_TOP_RADIUS, 30.0f);
1163 propertyMap.Insert(PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, 40.0f);
1164 propertyMap.Insert(PrimitiveVisual::Property::SCALE_HEIGHT, 50.0f);
1165 propertyMap.Insert(PrimitiveVisual::Property::SCALE_RADIUS, 60.0f);
1166 propertyMap.Insert(PrimitiveVisual::Property::SCALE_DIMENSIONS, dimensions);
1167 propertyMap.Insert(PrimitiveVisual::Property::BEVEL_PERCENTAGE, 0.3f);
1168 propertyMap.Insert(PrimitiveVisual::Property::BEVEL_SMOOTHNESS, 0.6f);
1169 propertyMap.Insert(PrimitiveVisual::Property::LIGHT_POSITION, Vector3(5.0f, 10.0f, 15.0f));
1170 Visual::Base primitiveVisual = factory.CreateVisual(propertyMap);
1172 Property::Map resultMap;
1173 primitiveVisual.CreatePropertyMap(resultMap);
1175 //Check values in the result map are identical to the initial map's values.
1176 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1177 DALI_TEST_CHECK(value);
1178 DALI_TEST_EQUALS(value->Get<int>(), (int)Visual::PRIMITIVE, TEST_LOCATION);
1180 value = resultMap.Find(PrimitiveVisual::Property::SHAPE, Property::INTEGER);
1181 DALI_TEST_CHECK(value);
1182 DALI_TEST_EQUALS(value->Get<int>(), (int)PrimitiveVisual::Shape::CUBE, TEST_LOCATION);
1184 value = resultMap.Find(PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4);
1185 DALI_TEST_CHECK(value);
1186 DALI_TEST_CHECK(value->Get<Vector4>() == color);
1187 DALI_TEST_EQUALS(value->Get<Vector4>(), color, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1189 value = resultMap.Find(PrimitiveVisual::Property::SLICES, Property::INTEGER);
1190 DALI_TEST_CHECK(value);
1191 DALI_TEST_EQUALS(value->Get<int>(), 10, TEST_LOCATION);
1193 value = resultMap.Find(PrimitiveVisual::Property::STACKS, Property::INTEGER);
1194 DALI_TEST_CHECK(value);
1195 DALI_TEST_EQUALS(value->Get<int>(), 20, TEST_LOCATION);
1197 value = resultMap.Find(PrimitiveVisual::Property::SCALE_TOP_RADIUS, Property::FLOAT);
1198 DALI_TEST_CHECK(value);
1199 DALI_TEST_EQUALS(value->Get<float>(), 30.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1201 value = resultMap.Find(PrimitiveVisual::Property::SCALE_BOTTOM_RADIUS, Property::FLOAT);
1202 DALI_TEST_CHECK(value);
1203 DALI_TEST_EQUALS(value->Get<float>(), 40.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1205 value = resultMap.Find(PrimitiveVisual::Property::SCALE_HEIGHT, Property::FLOAT);
1206 DALI_TEST_CHECK(value);
1207 DALI_TEST_EQUALS(value->Get<float>(), 50.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1209 value = resultMap.Find(PrimitiveVisual::Property::SCALE_RADIUS, Property::FLOAT);
1210 DALI_TEST_CHECK(value);
1211 DALI_TEST_EQUALS(value->Get<float>(), 60.0f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1213 value = resultMap.Find(PrimitiveVisual::Property::SCALE_DIMENSIONS, Property::VECTOR3);
1214 DALI_TEST_CHECK(value);
1215 DALI_TEST_EQUALS(value->Get<Vector3>(), dimensions, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1217 value = resultMap.Find(PrimitiveVisual::Property::BEVEL_PERCENTAGE, Property::FLOAT);
1218 DALI_TEST_CHECK(value);
1219 DALI_TEST_EQUALS(value->Get<float>(), 0.3f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1221 value = resultMap.Find(PrimitiveVisual::Property::BEVEL_SMOOTHNESS, Property::FLOAT);
1222 DALI_TEST_CHECK(value);
1223 DALI_TEST_EQUALS(value->Get<float>(), 0.6f, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1225 value = resultMap.Find(PrimitiveVisual::Property::LIGHT_POSITION, Property::VECTOR3);
1226 DALI_TEST_CHECK(value);
1227 DALI_TEST_EQUALS(value->Get<Vector3>(), Vector3(5.0f, 10.0f, 15.0f), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1229 DummyControl actor = DummyControl::New(true);
1230 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1231 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, primitiveVisual);
1232 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
1233 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1234 application.GetScene().Add(actor);
1236 Animation animation = Animation::New(1.0f);
1237 animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, PrimitiveVisual::Property::MIX_COLOR), Vector3(Color::MAGENTA));
1239 application.SendNotification();
1240 application.Render(0);
1241 application.Render(1000);
1242 application.SendNotification();
1244 auto& gl = application.GetGlAbstraction();
1245 DALI_TEST_EQUALS(gl.CheckUniformValue<Vector3>("mixColor", Vector3(Color::MAGENTA)), true, TEST_LOCATION);
1247 tet_infoline("Check property map after animation");
1249 primitiveVisual.CreatePropertyMap(resultMap);
1250 value = resultMap.Find(PrimitiveVisual::Property::MIX_COLOR, Property::VECTOR4);
1251 DALI_TEST_CHECK(value);
1252 color = value->Get<Vector4>();
1253 // Ignore alpha part
1254 DALI_TEST_EQUALS(Vector3(color), Vector3(Color::MAGENTA), 0.001f, TEST_LOCATION);
1260 int UtcDaliVisualGetPropertyMap10(void)
1262 ToolkitTestApplication application;
1263 tet_infoline("UtcDaliVisualGetPropertyMap10: TextVisual");
1265 //Request PrimitiveVisual using a property map.
1266 VisualFactory factory = VisualFactory::Get();
1268 Property::Map propertyMap;
1269 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::TEXT);
1270 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLACK);
1271 propertyMap.Insert("renderingBackend", static_cast<int>(Toolkit::DevelText::DEFAULT_RENDERING_BACKEND));
1272 propertyMap.Insert("enableMarkup", false);
1273 propertyMap.Insert("text", "Hello world");
1274 propertyMap.Insert("fontFamily", "TizenSans");
1276 Property::Map fontStyleMapSet;
1277 fontStyleMapSet.Insert("weight", "bold");
1278 propertyMap.Insert("fontStyle", fontStyleMapSet);
1280 propertyMap.Insert("pointSize", 12.f);
1281 propertyMap.Insert("multiLine", true);
1282 propertyMap.Insert("horizontalAlignment", "CENTER");
1283 propertyMap.Insert("verticalAlignment", "CENTER");
1284 propertyMap.Insert("textColor", Color::RED);
1286 Property::Map shadowMapSet;
1287 propertyMap.Insert("shadow", shadowMapSet.Add("color", Color::RED).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f));
1289 Property::Map underlineMapSet;
1290 propertyMap.Insert("underline", underlineMapSet.Add("enable", true).Add("color", Color::GREEN).Add("height", 1).Add("type", Text::Underline::Type::SOLID).Add("dashWidth", 2).Add("dashGap", 1));
1292 Property::Map outlineMapSet;
1293 propertyMap.Insert("outline", outlineMapSet.Add("color", Color::YELLOW).Add("width", 1).Add("offset", Vector2(2.0f, 2.0f)).Add("blurRadius", 3.0f));
1295 Property::Map backgroundMapSet;
1296 propertyMap.Insert("textBackground", backgroundMapSet.Add("enable", true).Add("color", Color::CYAN));
1298 Visual::Base textVisual = factory.CreateVisual(propertyMap);
1300 Property::Map resultMap;
1301 textVisual.CreatePropertyMap(resultMap);
1303 //Check values in the result map are identical to the initial map's values.
1304 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1305 DALI_TEST_CHECK(value);
1306 DALI_TEST_EQUALS(value->Get<int>(), (int)Visual::TEXT, TEST_LOCATION);
1308 value = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
1309 DALI_TEST_CHECK(value);
1310 DALI_TEST_EQUALS(value->Get<Vector4>(), Color::BLACK, 0.001f, TEST_LOCATION);
1312 value = resultMap.Find(TextVisual::Property::TEXT, Property::STRING);
1313 DALI_TEST_CHECK(value);
1314 DALI_TEST_EQUALS(value->Get<std::string>(), "Hello world", TEST_LOCATION);
1316 value = resultMap.Find(TextVisual::Property::FONT_FAMILY, Property::STRING);
1317 DALI_TEST_CHECK(value);
1318 DALI_TEST_EQUALS(value->Get<std::string>(), "TizenSans", TEST_LOCATION);
1320 value = resultMap.Find(TextVisual::Property::FONT_STYLE, Property::MAP);
1321 DALI_TEST_CHECK(value);
1323 Property::Map fontStyleMapGet = value->Get<Property::Map>();
1324 DALI_TEST_EQUALS(fontStyleMapGet.Count(), fontStyleMapSet.Count(), TEST_LOCATION);
1325 DALI_TEST_EQUALS(DaliTestCheckMaps(fontStyleMapGet, fontStyleMapSet), true, TEST_LOCATION);
1327 value = resultMap.Find(TextVisual::Property::POINT_SIZE, Property::FLOAT);
1328 DALI_TEST_CHECK(value);
1329 DALI_TEST_EQUALS(value->Get<float>(), 12.f, Math::MACHINE_EPSILON_1000, TEST_LOCATION);
1331 value = resultMap.Find(TextVisual::Property::MULTI_LINE, Property::BOOLEAN);
1332 DALI_TEST_CHECK(value);
1333 DALI_TEST_CHECK(value->Get<bool>());
1335 value = resultMap.Find(TextVisual::Property::HORIZONTAL_ALIGNMENT, Property::INTEGER);
1336 DALI_TEST_CHECK(value);
1337 DALI_TEST_EQUALS(value->Get<int>(), (int)Text::HorizontalAlignment::CENTER, TEST_LOCATION);
1339 value = resultMap.Find(TextVisual::Property::VERTICAL_ALIGNMENT, Property::INTEGER);
1340 DALI_TEST_CHECK(value);
1341 DALI_TEST_EQUALS(value->Get<int>(), (int)Text::VerticalAlignment::CENTER, TEST_LOCATION);
1343 value = resultMap.Find(TextVisual::Property::TEXT_COLOR, Property::VECTOR4);
1344 DALI_TEST_CHECK(value);
1345 DALI_TEST_EQUALS(value->Get<Vector4>(), Color::RED, TEST_LOCATION);
1347 value = resultMap.Find(TextVisual::Property::ENABLE_MARKUP, Property::BOOLEAN);
1348 DALI_TEST_CHECK(value);
1349 DALI_TEST_CHECK(!value->Get<bool>());
1351 value = resultMap.Find(TextVisual::Property::SHADOW, Property::MAP);
1352 DALI_TEST_CHECK(value);
1354 Property::Map shadowMapGet = value->Get<Property::Map>();
1355 DALI_TEST_EQUALS(shadowMapGet.Count(), shadowMapSet.Count(), TEST_LOCATION);
1356 DALI_TEST_EQUALS(DaliTestCheckMaps(shadowMapGet, shadowMapSet), true, TEST_LOCATION);
1358 value = resultMap.Find(TextVisual::Property::UNDERLINE, Property::MAP);
1359 DALI_TEST_CHECK(value);
1361 Property::Map underlineMapGet = value->Get<Property::Map>();
1362 DALI_TEST_EQUALS(underlineMapGet.Count(), underlineMapSet.Count(), TEST_LOCATION);
1363 DALI_TEST_EQUALS(DaliTestCheckMaps(underlineMapGet, underlineMapSet), true, TEST_LOCATION);
1365 value = resultMap.Find(DevelTextVisual::Property::OUTLINE, Property::MAP);
1366 DALI_TEST_CHECK(value);
1368 Property::Map outlineMapGet = value->Get<Property::Map>();
1369 DALI_TEST_EQUALS(outlineMapGet.Count(), outlineMapSet.Count(), TEST_LOCATION);
1370 DALI_TEST_EQUALS(DaliTestCheckMaps(outlineMapGet, outlineMapSet), true, TEST_LOCATION);
1372 value = resultMap.Find(DevelTextVisual::Property::BACKGROUND, Property::MAP);
1373 DALI_TEST_CHECK(value);
1375 Property::Map backgroundMapGet = value->Get<Property::Map>();
1376 DALI_TEST_EQUALS(backgroundMapGet.Count(), backgroundMapSet.Count(), TEST_LOCATION);
1377 DALI_TEST_EQUALS(DaliTestCheckMaps(backgroundMapGet, backgroundMapSet), true, TEST_LOCATION);
1382 int UtcDaliVisualGetPropertyMap11(void)
1384 ToolkitTestApplication application;
1385 tet_infoline("UtcDaliVisualGetPropertyMap11: AnimatedGradientVisual");
1387 VisualFactory factory = VisualFactory::Get();
1388 DALI_TEST_CHECK(factory);
1390 Property::Map propertyMap;
1391 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1393 Vector2 start(-0.5f, 0.5f);
1394 Vector2 end(0.5f, -0.0f);
1395 Vector4 start_color(1.0f, 0.7f, 0.5f, 1.0f);
1396 Vector4 end_color(0.7f, 0.5f, 1.0f, 1.0f);
1397 Vector2 rotate_center(0.0f, 0.4f);
1398 float rotate_amount = 1.57f;
1399 float offset = 100.f;
1401 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::RADIAL);
1402 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1403 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::CLAMP);
1405 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, start);
1406 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, end);
1407 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, start_color);
1408 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, end_color);
1409 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center);
1410 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount);
1411 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, offset);
1413 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1414 DALI_TEST_CHECK(animatedGradientVisual);
1416 Property::Map resultMap;
1417 animatedGradientVisual.CreatePropertyMap(resultMap);
1419 // check the property values from the returned map from visual
1420 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1421 DALI_TEST_CHECK(value);
1422 DALI_TEST_CHECK(value->Get<int>() == DevelVisual::ANIMATED_GRADIENT);
1424 value = resultMap.Find(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER);
1425 DALI_TEST_CHECK(value);
1426 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL);
1428 value = resultMap.Find(DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER);
1429 DALI_TEST_CHECK(value);
1430 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1432 value = resultMap.Find(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER);
1433 DALI_TEST_CHECK(value);
1434 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::CLAMP);
1436 value = resultMap.Find(DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2);
1437 DALI_TEST_CHECK(value);
1438 DALI_TEST_EQUALS(value->Get<Vector2>(), start, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1440 value = resultMap.Find(DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2);
1441 DALI_TEST_CHECK(value);
1442 DALI_TEST_EQUALS(value->Get<Vector2>(), end, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1444 value = resultMap.Find(DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4);
1445 DALI_TEST_CHECK(value);
1446 DALI_TEST_EQUALS(value->Get<Vector4>(), start_color, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1448 value = resultMap.Find(DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4);
1449 DALI_TEST_CHECK(value);
1450 DALI_TEST_EQUALS(value->Get<Vector4>(), end_color, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1452 value = resultMap.Find(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2);
1453 DALI_TEST_CHECK(value);
1454 DALI_TEST_EQUALS(value->Get<Vector2>(), rotate_center, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1456 value = resultMap.Find(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT);
1457 DALI_TEST_CHECK(value);
1458 DALI_TEST_EQUALS(value->Get<float>(), rotate_amount, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1460 value = resultMap.Find(DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT);
1461 DALI_TEST_CHECK(value);
1462 DALI_TEST_EQUALS(value->Get<float>(), offset, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1467 int UtcDaliVisualGetPropertyMap12(void)
1469 ToolkitTestApplication application;
1470 tet_infoline("UtcDaliVisualGetPropertyMap12: AnimatedGradientVisual with animation param");
1472 // Case 1 : Set values by index
1474 tet_printf(" - Set Values by Index\n");
1475 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1476 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1477 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1479 tet_printf("test with delay [%f]\n", _delay);
1480 VisualFactory factory = VisualFactory::Get();
1481 DALI_TEST_CHECK(factory);
1483 Property::Map propertyMap;
1484 Property::Map animationMap;
1485 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1487 float duration = 1.1f;
1488 float delay = _delay;
1489 float repeat_delay = 0.4f;
1491 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1493 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1494 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT;
1496 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value& start, const Property::Value& target) -> Property::Map& {
1497 animationMap.Clear();
1498 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1499 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1500 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1501 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1502 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1503 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1504 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1505 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1506 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1508 return animationMap;
1511 Vector2 start1(-0.5f, 0.5f);
1512 Vector2 end1(0.5f, -0.5f);
1513 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1514 Vector4 end_color1(0.7f, 0.5f, 1.0f, 1.0f);
1515 Vector2 rotate_center1(0.0f, 0.4f);
1516 float rotate_amount1 = 0.0f;
1517 float offset1 = 0.f;
1519 Vector2 start2(-0.5f, -0.5f);
1520 Vector2 end2(0.5f, 0.5f);
1521 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1522 Vector4 end_color2(0.3f, 1.0f, 0.1f, 0.0f);
1523 Vector2 rotate_center2(0.0f, -0.4f);
1524 float rotate_amount2 = 6.2832f;
1525 float offset2 = 2.f;
1527 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1528 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1529 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REPEAT);
1531 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1, start2));
1532 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1, end2));
1533 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1, start_color2));
1534 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1, end_color2));
1535 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1536 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1537 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1, offset2));
1539 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1540 DALI_TEST_CHECK(animatedGradientVisual);
1542 Property::Map resultMap;
1543 animatedGradientVisual.CreatePropertyMap(resultMap);
1545 // check the property values from the returned map from visual
1546 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1547 DALI_TEST_CHECK(value);
1548 DALI_TEST_CHECK(value->Get<int>() == DevelVisual::ANIMATED_GRADIENT);
1550 value = resultMap.Find(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER);
1551 DALI_TEST_CHECK(value);
1552 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR);
1554 value = resultMap.Find(DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER);
1555 DALI_TEST_CHECK(value);
1556 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1558 value = resultMap.Find(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER);
1559 DALI_TEST_CHECK(value);
1560 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REPEAT);
1562 auto checkAnimatedMap = [&value, &resultMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Index& index, const Property::Value& start, const Property::Value& target, int line_num) -> void {
1563 tet_printf("Check value at %d\n", line_num);
1564 value = resultMap.Find(index, Property::MAP);
1565 DALI_TEST_CHECK(value);
1566 DALI_TEST_CHECK(value->GetType() == Property::MAP);
1567 Property::Map* temp_map = value->GetMap();
1568 DALI_TEST_CHECK(temp_map);
1570 auto checkMapValue = [&temp_map](const Property::Index index) -> Property::Value {
1571 Property::Value* res = temp_map->Find(index);
1572 DALI_TEST_CHECK(res);
1576 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START), start, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1577 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET), target, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1578 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION), Property::Value(direction), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1579 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION), Property::Value(duration), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1580 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY), Property::Value(delay), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1581 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT), Property::Value(loop_count), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1582 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value(repeat_delay), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1583 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE), Property::Value(motion), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1584 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE), Property::Value(easing), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1587 // check the animation map data is good
1588 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1, start2, __LINE__);
1589 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION, end1, end2, __LINE__);
1590 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR, start_color1, start_color2, __LINE__);
1591 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR, end_color1, end_color2, __LINE__);
1592 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center1, rotate_center2, __LINE__);
1593 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount1, rotate_amount2, __LINE__);
1594 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET, offset1, offset2, __LINE__);
1598 // Case 2 : Set values by string
1600 tet_printf(" - Set Values by String\n");
1601 // NOTE : PropertyMap doesn't optimized even delay < -loop_count * (duration + repeat_delay) so this animation will not run
1602 // _delay = -10.0f is this case. It will progress (10.0f / 1.5f) amount. and 10.0f / 1.5f > 5.
1603 for(float _delay = -10.0f; _delay <= 5.0f; _delay += 5.0f)
1605 tet_printf("test with delay [%f]\n", _delay);
1606 VisualFactory factory = VisualFactory::Get();
1607 DALI_TEST_CHECK(factory);
1609 Property::Map propertyMap;
1610 Property::Map animationMap;
1611 propertyMap.Insert("visualType", "ANIMATED_GRADIENT");
1613 float duration = 1.1f;
1614 float delay = _delay;
1615 float repeat_delay = 0.4f;
1617 int direction = DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD;
1619 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR;
1620 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT;
1622 auto buildAnimatedMap = [&animationMap, &duration, &delay, &loop_count, &repeat_delay](const Property::Value& start, const Property::Value& target) -> Property::Map& {
1623 animationMap.Clear();
1624 animationMap.Insert("startValue", start);
1625 animationMap.Insert("targetValue", target);
1626 animationMap.Insert("directionType", "BACKWARD");
1627 animationMap.Insert("duration", duration);
1628 animationMap.Insert("delay", delay);
1629 animationMap.Insert("repeat", loop_count);
1630 animationMap.Insert("repeatDelay", repeat_delay);
1631 animationMap.Insert("motionType", "MIRROR");
1632 animationMap.Insert("easingType", "IN_OUT");
1634 return animationMap;
1637 Vector2 start1(-0.5f, 0.5f);
1638 Vector2 end1(0.5f, -0.5f);
1639 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1640 Vector4 end_color1(0.7f, 0.5f, 1.0f, 1.0f);
1641 Vector2 rotate_center1(0.0f, 0.4f);
1642 float rotate_amount1 = 0.0f;
1643 float offset1 = 0.f;
1645 Vector2 start2(-0.5f, -0.5f);
1646 Vector2 end2(0.5f, 0.5f);
1647 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1648 Vector4 end_color2(0.3f, 1.0f, 0.1f, 0.0f);
1649 Vector2 rotate_center2(0.0f, -0.4f);
1650 float rotate_amount2 = 6.2832f;
1651 float offset2 = 2.f;
1653 // For test mix the type string/index key and string/index value works well.
1654 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, "RADIAL");
1655 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1656 propertyMap.Insert("spreadType", DevelAnimatedGradientVisual::SpreadType::REFLECT);
1658 propertyMap.Insert("startPosition", buildAnimatedMap(start1, start2));
1659 propertyMap.Insert("endPosition", buildAnimatedMap(end1, end2));
1660 propertyMap.Insert("startColor", buildAnimatedMap(start_color1, start_color2));
1661 propertyMap.Insert("endColor", buildAnimatedMap(end_color1, end_color2));
1662 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2));
1663 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2));
1664 propertyMap.Insert("offset", buildAnimatedMap(offset1, offset2));
1666 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1667 DALI_TEST_CHECK(animatedGradientVisual);
1669 Property::Map resultMap;
1670 animatedGradientVisual.CreatePropertyMap(resultMap);
1672 // check the property values from the returned map from visual
1673 // Note : resultMap from CreatePropertyMap only contain indexKey
1674 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1675 DALI_TEST_CHECK(value);
1676 DALI_TEST_CHECK(value->Get<int>() == DevelVisual::ANIMATED_GRADIENT);
1678 value = resultMap.Find(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER);
1679 DALI_TEST_CHECK(value);
1680 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::GradientType::RADIAL);
1682 value = resultMap.Find(DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER);
1683 DALI_TEST_CHECK(value);
1684 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::UnitType::USER_SPACE);
1686 value = resultMap.Find(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER);
1687 DALI_TEST_CHECK(value);
1688 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT);
1690 auto checkAnimatedMap = [&value, &resultMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Index& index, const Property::Value& start, const Property::Value& target, int line_num) -> void {
1691 tet_printf("Check value at %d\n", line_num);
1692 value = resultMap.Find(index, Property::MAP);
1693 DALI_TEST_CHECK(value);
1694 DALI_TEST_CHECK(value->GetType() == Property::MAP);
1695 Property::Map* temp_map = value->GetMap();
1696 DALI_TEST_CHECK(temp_map);
1698 auto checkMapValue = [&temp_map](const Property::Index index) -> Property::Value {
1699 Property::Value* res = temp_map->Find(index);
1700 DALI_TEST_CHECK(res);
1704 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::START), start, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1705 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET), target, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1706 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION), Property::Value(direction), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1707 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION), Property::Value(duration), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1708 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY), Property::Value(delay), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1709 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT), Property::Value(loop_count), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1710 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY), Property::Value(repeat_delay), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1711 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE), Property::Value(motion), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1712 DALI_TEST_EQUALS(checkMapValue(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE), Property::Value(easing), Math::MACHINE_EPSILON_100, TEST_LOCATION);
1715 // check the animation map data is good
1716 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_POSITION, start1, start2, __LINE__);
1717 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_POSITION, end1, end2, __LINE__);
1718 checkAnimatedMap(DevelAnimatedGradientVisual::Property::START_COLOR, start_color1, start_color2, __LINE__);
1719 checkAnimatedMap(DevelAnimatedGradientVisual::Property::END_COLOR, end_color1, end_color2, __LINE__);
1720 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, rotate_center1, rotate_center2, __LINE__);
1721 checkAnimatedMap(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, rotate_amount1, rotate_amount2, __LINE__);
1722 checkAnimatedMap(DevelAnimatedGradientVisual::Property::OFFSET, offset1, offset2, __LINE__);
1728 int UtcDaliVisualGetPropertyMap13(void)
1730 ToolkitTestApplication application;
1731 tet_infoline("UtcDaliVisualGetPropertyMap13: AnimatedGradientVisual when repeat = 0");
1733 for(int _direction = 0; _direction <= 1; ++_direction)
1735 for(float _delay = -10.0f; _delay <= 10.0f; _delay += 10.0f)
1737 tet_printf(((_direction == 0) ? "Forward test with delay [%f]\n" : "Backward test with delay [%f]\n"), _delay);
1738 VisualFactory factory = VisualFactory::Get();
1739 DALI_TEST_CHECK(factory);
1741 Property::Map propertyMap;
1742 Property::Map animationMap;
1743 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
1745 float duration = 1.0f;
1746 float delay = _delay;
1747 float repeat_delay = 0.5f;
1749 int direction = _direction;
1750 int loop_count = 0; // When loop_count is 0, Animation will not be created.
1751 int motion = DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP;
1752 int easing = DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN;
1754 auto buildAnimatedMap = [&animationMap, &direction, &duration, &delay, &loop_count, &repeat_delay, &motion, &easing](const Property::Value& start, const Property::Value& target) -> Property::Map& {
1755 animationMap.Clear();
1756 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
1757 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
1759 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
1761 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
1762 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, direction);
1763 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
1764 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
1765 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
1766 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
1767 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, motion);
1768 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, easing);
1770 return animationMap;
1773 Vector2 start1(-0.5f, 0.5f);
1774 Vector2 end1(0.5f, -0.5f);
1775 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
1776 Vector4 end_color1(0.7f, 0.5f, 1.0f, 1.0f);
1777 Vector2 rotate_center1(1.0f, 0.4f);
1778 float rotate_amount1 = 2.0f;
1779 float offset1 = 1.f;
1781 Vector2 start2(-0.5f, -0.5f);
1782 Vector2 end2(0.5f, 0.5f);
1783 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
1784 Vector4 end_color2(0.3f, 1.0f, 0.1f, 0.0f);
1785 Vector2 rotate_center2(1.0f, -0.4f);
1786 float rotate_amount2 = 1.0f;
1787 float offset2 = 3.f;
1789 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, DevelAnimatedGradientVisual::GradientType::LINEAR);
1790 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1791 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, DevelAnimatedGradientVisual::SpreadType::REFLECT);
1793 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1, start2));
1794 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1, end2));
1795 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1, start_color2));
1796 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1, end_color2));
1797 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2));
1798 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2));
1799 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1, offset2));
1801 Visual::Base animatedGradientVisual = factory.CreateVisual(propertyMap);
1802 DALI_TEST_CHECK(animatedGradientVisual);
1804 Property::Map resultMap;
1805 animatedGradientVisual.CreatePropertyMap(resultMap);
1807 // check the property values from the returned map from visual
1808 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
1809 DALI_TEST_CHECK(value);
1810 DALI_TEST_CHECK(value->Get<int>() == DevelVisual::ANIMATED_GRADIENT);
1812 value = resultMap.Find(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, Property::INTEGER);
1813 DALI_TEST_CHECK(value);
1814 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::GradientType::LINEAR);
1816 value = resultMap.Find(DevelAnimatedGradientVisual::Property::UNIT_TYPE, Property::INTEGER);
1817 DALI_TEST_CHECK(value);
1818 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::UnitType::OBJECT_BOUNDING_BOX);
1820 value = resultMap.Find(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, Property::INTEGER);
1821 DALI_TEST_CHECK(value);
1822 DALI_TEST_CHECK(value->Get<int>() == DevelAnimatedGradientVisual::SpreadType::REFLECT);
1824 // If loop_count = 0, Animation doesn't created.
1825 // Optimized resultMap only have one value, which is target value
1826 // Note: target value will be changed by direction option.
1827 value = resultMap.Find(DevelAnimatedGradientVisual::Property::START_POSITION, Property::VECTOR2);
1828 DALI_TEST_CHECK(value);
1829 DALI_TEST_EQUALS(value->Get<Vector2>(), direction ? start1 : start2, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1831 value = resultMap.Find(DevelAnimatedGradientVisual::Property::END_POSITION, Property::VECTOR2);
1832 DALI_TEST_CHECK(value);
1833 DALI_TEST_EQUALS(value->Get<Vector2>(), direction ? end1 : end2, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1835 value = resultMap.Find(DevelAnimatedGradientVisual::Property::START_COLOR, Property::VECTOR4);
1836 DALI_TEST_CHECK(value);
1837 DALI_TEST_EQUALS(value->Get<Vector4>(), direction ? start_color1 : start_color2, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1839 value = resultMap.Find(DevelAnimatedGradientVisual::Property::END_COLOR, Property::VECTOR4);
1840 DALI_TEST_CHECK(value);
1841 DALI_TEST_EQUALS(value->Get<Vector4>(), direction ? end_color1 : end_color2, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1843 value = resultMap.Find(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, Property::VECTOR2);
1844 DALI_TEST_CHECK(value);
1845 DALI_TEST_EQUALS(value->Get<Vector2>(), direction ? rotate_center1 : rotate_center2, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1847 value = resultMap.Find(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, Property::FLOAT);
1848 DALI_TEST_CHECK(value);
1849 DALI_TEST_EQUALS(value->Get<float>(), direction ? rotate_amount1 : rotate_amount2, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1851 value = resultMap.Find(DevelAnimatedGradientVisual::Property::OFFSET, Property::FLOAT);
1852 DALI_TEST_CHECK(value);
1853 DALI_TEST_EQUALS(value->Get<float>(), direction ? offset1 : offset2, Math::MACHINE_EPSILON_100, TEST_LOCATION);
1860 int UtcDaliVisualAnimateArcVisual(void)
1862 ToolkitTestApplication application;
1863 tet_infoline("UtcDaliVisualAnimateArcVisual color");
1865 static std::vector<UniformData> customUniforms =
1867 UniformData("startAngle", Property::Type::FLOAT),
1868 UniformData("sweepAngle", Property::Type::FLOAT),
1871 TestGraphicsController& graphics = application.GetGraphicsController();
1872 graphics.AddCustomUniforms(customUniforms);
1874 VisualFactory factory = VisualFactory::Get();
1875 Property::Map propertyMap;
1876 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ARC);
1877 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
1878 propertyMap.Insert(DevelArcVisual::Property::START_ANGLE, 0.0f);
1879 propertyMap.Insert(DevelArcVisual::Property::SWEEP_ANGLE, 90.0f);
1880 propertyMap.Insert(DevelArcVisual::Property::CAP, DevelArcVisual::Cap::ROUND);
1881 propertyMap.Insert(DevelArcVisual::Property::THICKNESS, 20.0f);
1882 Visual::Base arcVisual = factory.CreateVisual(propertyMap);
1884 DummyControl actor = DummyControl::New(true);
1885 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1886 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, arcVisual);
1887 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
1888 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1889 application.GetScene().Add(actor);
1891 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1893 Renderer renderer = actor.GetRendererAt(0);
1894 Property::Index index = renderer.GetPropertyIndex(DevelArcVisual::Property::SWEEP_ANGLE);
1896 Animation animation = Animation::New(4.0f);
1897 animation.AnimateTo(Property(renderer, index), 50.0f);
1898 animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelArcVisual::Property::START_ANGLE), 40.0f);
1901 application.SendNotification();
1902 application.Render(0);
1903 application.Render(2000u); // halfway point
1905 float sweepAngle = renderer.GetCurrentProperty<float>(index);
1906 DALI_TEST_EQUALS(sweepAngle, 70.0f, 0.0001f, TEST_LOCATION);
1907 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("startAngle", 20.0f), true, TEST_LOCATION);
1908 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("sweepAngle", 70.0f), true, TEST_LOCATION);
1910 application.Render(2000u); // another halfway point
1912 sweepAngle = renderer.GetCurrentProperty<float>(index);
1913 DALI_TEST_EQUALS(sweepAngle, 50.0f, 0.0001f, TEST_LOCATION);
1914 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("startAngle", 40.0f), true, TEST_LOCATION);
1915 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("sweepAngle", 50.0f), true, TEST_LOCATION);
1920 int UtcDaliVisualAnimateBorderVisual01(void)
1922 ToolkitTestApplication application;
1923 tet_infoline("UtcDaliAnimateBorderVisual Color");
1925 static std::vector<UniformData> customUniforms =
1927 UniformData("borderColor", Property::Type::VECTOR4),
1928 UniformData("mixColor", Property::Type::VECTOR3),
1931 TestGraphicsController& graphics = application.GetGraphicsController();
1932 graphics.AddCustomUniforms(customUniforms);
1934 VisualFactory factory = VisualFactory::Get();
1935 Property::Map propertyMap;
1936 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
1937 propertyMap.Insert(Visual::Property::MIX_COLOR, Vector4(1, 1, 1, 0.8f));
1938 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
1939 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
1940 Visual::Base borderVisual = factory.CreateVisual(propertyMap);
1943 map["target"] = "testVisual";
1944 map["property"] = "mixColor";
1945 map["targetValue"] = Vector4(1, 1, 1, 0.1);
1946 map["animator"] = Property::Map()
1947 .Add("alphaFunction", "LINEAR")
1948 .Add("timePeriod", Property::Map().Add("delay", 0.0f).Add("duration", 4.0f));
1950 Dali::Toolkit::TransitionData transition = TransitionData::New(map);
1952 DummyControl actor = DummyControl::New(true);
1953 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
1954 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, borderVisual);
1955 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
1956 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
1957 application.GetScene().Add(actor);
1959 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
1961 Renderer renderer = actor.GetRendererAt(0);
1962 Property::Index borderColorIndex = renderer.GetPropertyIndex(BorderVisual::Property::COLOR);
1963 Property::Index mixColorIndex = VisualRenderer::Property::VISUAL_MIX_COLOR; //renderer.GetPropertyIndex( Visual::Property::MIX_COLOR );
1965 Animation animation = dummyImpl.CreateTransition(transition);
1967 // Animate the mix color through the transition, and the border color through
1968 // programmatic method.
1969 animation.AnimateTo(Property(renderer, borderColorIndex), Color::WHITE);
1972 application.SendNotification();
1973 application.Render(0);
1974 application.Render(2000u); // halfway point between blue and white
1976 Vector4 color = renderer.GetCurrentProperty<Vector4>(borderColorIndex);
1977 Vector4 testColor = (Color::BLUE + Color::WHITE) * 0.5f;
1978 DALI_TEST_EQUALS(color, testColor, TEST_LOCATION);
1979 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", testColor), true, TEST_LOCATION);
1981 color = renderer.GetCurrentProperty<Vector3>(mixColorIndex);
1982 testColor = Vector4(1, 1, 1, 0.45f);
1983 DALI_TEST_EQUALS(Vector3(color), Vector3(testColor), 0.0001f, TEST_LOCATION);
1984 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor)), true, TEST_LOCATION);
1987 DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue<Vector4>("uColor", uColor));
1988 DALI_TEST_EQUALS(uColor.a, testColor.a, TEST_LOCATION);
1990 application.Render(2000u);
1992 color = renderer.GetCurrentProperty<Vector4>(borderColorIndex);
1993 DALI_TEST_EQUALS(color, Color::WHITE, TEST_LOCATION);
1994 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderColor", Color::WHITE), true, TEST_LOCATION);
1996 color = renderer.GetCurrentProperty<Vector3>(mixColorIndex);
1997 testColor = Vector4(1, 1, 1, 0.1);
1998 DALI_TEST_EQUALS(Vector3(color), Vector3(testColor), TEST_LOCATION);
1999 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(testColor)), true, TEST_LOCATION);
2001 DALI_TEST_CHECK(application.GetGlAbstraction().GetUniformValue<Vector4>("uColor", uColor));
2002 DALI_TEST_EQUALS(uColor.a, testColor.a, TEST_LOCATION);
2007 int UtcDaliVisualAnimateBorderVisual02(void)
2009 ToolkitTestApplication application;
2010 tet_infoline("UtcDaliAnimateBorderVisual Size");
2012 static std::vector<UniformData> customUniforms =
2014 UniformData("borderSize", Property::Type::FLOAT),
2017 TestGraphicsController& graphics = application.GetGraphicsController();
2018 graphics.AddCustomUniforms(customUniforms);
2020 VisualFactory factory = VisualFactory::Get();
2021 Property::Map propertyMap;
2022 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
2023 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
2024 propertyMap.Insert(BorderVisual::Property::SIZE, 5.f);
2025 Visual::Base borderVisual = factory.CreateVisual(propertyMap);
2027 DummyControl actor = DummyControl::New(true);
2028 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2029 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, borderVisual);
2030 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
2031 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2032 application.GetScene().Add(actor);
2034 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
2036 Renderer renderer = actor.GetRendererAt(0);
2037 Property::Index index = renderer.GetPropertyIndex(BorderVisual::Property::SIZE);
2039 Animation animation = Animation::New(4.0f);
2040 animation.AnimateTo(Property(renderer, index), 9.0f);
2043 application.SendNotification();
2044 application.Render(0);
2045 application.Render(2000u); // halfway point
2047 float size = renderer.GetCurrentProperty<float>(index);
2048 DALI_TEST_EQUALS(size, 7.0f, 0.0001f, TEST_LOCATION);
2049 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 7.0f), true, TEST_LOCATION);
2051 application.Render(2000u); // halfway point between blue and white
2053 size = renderer.GetCurrentProperty<float>(index);
2054 DALI_TEST_EQUALS(size, 9.0f, 0.0001f, TEST_LOCATION);
2055 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderSize", 9.0f), true, TEST_LOCATION);
2060 int UtcDaliVisualAnimateColorVisual(void)
2062 ToolkitTestApplication application;
2063 tet_infoline("UtcDaliAnimateColorVisual mixColor");
2065 static std::vector<UniformData> customUniforms =
2067 UniformData("mixColor", Property::Type::VECTOR3),
2070 TestGraphicsController& graphics = application.GetGraphicsController();
2071 graphics.AddCustomUniforms(customUniforms);
2073 VisualFactory factory = VisualFactory::Get();
2074 Property::Map propertyMap;
2075 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2076 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2077 Visual::Base borderVisual = factory.CreateVisual(propertyMap);
2079 DummyControl actor = DummyControl::New(true);
2080 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2081 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, borderVisual);
2082 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
2083 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2084 application.GetScene().Add(actor);
2086 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
2088 Renderer renderer = actor.GetRendererAt(0);
2089 Property::Index mixColorIndex = VisualRenderer::Property::VISUAL_MIX_COLOR; //renderer.GetPropertyIndex( ColorVisual::Property::MIX_COLOR );
2091 Property::Value blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
2092 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION);
2094 Animation animation = Animation::New(4.0f);
2095 animation.AnimateTo(Property(renderer, mixColorIndex), Vector3(Color::WHITE));
2098 application.SendNotification();
2099 application.Render(0);
2100 application.Render(2000u); // halfway point
2102 Vector3 color = renderer.GetCurrentProperty<Vector3>(mixColorIndex);
2103 Vector3 testColor = Vector3(Color::BLUE + Color::WHITE) * 0.5f;
2104 DALI_TEST_EQUALS(color, testColor, TEST_LOCATION);
2106 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", testColor), true, TEST_LOCATION);
2108 application.Render(2000u); // halfway point between blue and white
2110 color = renderer.GetCurrentProperty<Vector3>(mixColorIndex);
2111 DALI_TEST_EQUALS(color, Vector3(Color::WHITE), TEST_LOCATION);
2113 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(Color::WHITE)), true, TEST_LOCATION);
2115 blendModeValue = renderer.GetCurrentProperty(Renderer::Property::BLEND_MODE);
2116 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION);
2121 int UtcDaliVisualAnimatePrimitiveVisual(void)
2123 ToolkitTestApplication application;
2124 tet_infoline("UtcDaliAnimatePrimitiveVisual color");
2126 static std::vector<UniformData> customUniforms =
2128 UniformData("mixColor", Property::Type::VECTOR3),
2131 TestGraphicsController& graphics = application.GetGraphicsController();
2132 graphics.AddCustomUniforms(customUniforms);
2135 VisualFactory factory = VisualFactory::Get();
2136 Property::Map propertyMap;
2137 propertyMap.Insert(Visual::Property::TYPE, Visual::PRIMITIVE);
2138 propertyMap.Insert(PrimitiveVisual::Property::SHAPE, PrimitiveVisual::Shape::CUBE);
2139 propertyMap.Insert(PrimitiveVisual::Property::MIX_COLOR, Color::BLUE);
2140 Visual::Base visual = factory.CreateVisual(propertyMap);
2142 DummyControl actor = DummyControl::New(true);
2143 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2144 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
2145 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
2146 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2147 actor.SetProperty(Actor::Property::COLOR, Color::BLACK);
2148 application.GetScene().Add(actor);
2150 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
2152 Renderer renderer = actor.GetRendererAt(0);
2154 const Vector4 INITIAL_MIX_COLOR(1.0f, 0.0f, 1.0f, 0.5f); // Magenta with half alpha
2155 const Vector4 TARGET_MIX_COLOR(Color::RED);
2158 map["target"] = "testVisual";
2159 map["property"] = "mixColor";
2160 map["initialValue"] = INITIAL_MIX_COLOR;
2161 map["targetValue"] = TARGET_MIX_COLOR;
2162 map["animator"] = Property::Map()
2163 .Add("alphaFunction", "LINEAR")
2164 .Add("timePeriod", Property::Map().Add("delay", 0.0f).Add("duration", 4.0f));
2166 Dali::Toolkit::TransitionData transition = TransitionData::New(map);
2168 Animation animation = dummyImpl.CreateTransition(transition);
2169 animation.AnimateTo(Property(actor, Actor::Property::COLOR), Color::WHITE);
2172 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
2173 glAbstraction.EnableEnableDisableCallTrace(true);
2174 TraceCallStack& glEnableStack = glAbstraction.GetEnableDisableTrace();
2175 std::ostringstream blendStr;
2176 blendStr << std::hex << GL_BLEND;
2178 application.SendNotification();
2179 application.Render(0);
2180 application.Render(2000u); // halfway point
2181 application.SendNotification();
2183 Vector4 halfwayColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR) * 0.5;
2184 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(0.5f, 0.5f, 0.5f, halfwayColor.a)), true, TEST_LOCATION);
2185 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(halfwayColor)), true, TEST_LOCATION);
2187 DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Enable", blendStr.str()));
2189 glEnableStack.Reset();
2191 application.Render(2001u); // go past end
2192 application.SendNotification(); // Trigger signals
2194 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR), Color::WHITE, TEST_LOCATION);
2195 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("uColor", Vector4(1.0f, 1.0f, 1.0f, TARGET_MIX_COLOR.a)), true, TEST_LOCATION);
2196 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", Vector3(TARGET_MIX_COLOR)), true, TEST_LOCATION);
2198 DALI_TEST_CHECK(glEnableStack.FindMethodAndParams("Disable", blendStr.str()));
2206 int UtcDaliVisualAnimatedGradientVisual01(void)
2208 ToolkitTestApplication application;
2209 tet_infoline("UtcDaliAnimatedGradientVisual with default");
2211 static std::vector<UniformData> customUniforms =
2213 UniformData("start_point", Property::Type::VECTOR2),
2214 UniformData("end_point", Property::Type::VECTOR2),
2215 UniformData("start_color", Property::Type::VECTOR4),
2216 UniformData("end_color", Property::Type::VECTOR4),
2217 UniformData("rotate_center", Property::Type::VECTOR2),
2218 UniformData("rotate_angle", Property::Type::FLOAT),
2219 UniformData("gradient_offset", Property::Type::FLOAT),
2222 TestGraphicsController& graphics = application.GetGraphicsController();
2223 graphics.AddCustomUniforms(customUniforms);
2226 VisualFactory factory = VisualFactory::Get();
2227 Property::Map propertyMap;
2228 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2229 Visual::Base visual = factory.CreateVisual(propertyMap);
2231 DummyControl actor = DummyControl::New(true);
2232 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2233 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
2234 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
2235 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2236 actor.SetProperty(Actor::Property::COLOR, Color::BLACK);
2237 application.GetScene().Add(actor);
2239 application.SendNotification();
2240 application.Render(0);
2241 application.SendNotification();
2243 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
2245 for(int step_iter = 0; step_iter < 3; step_iter++)
2247 application.SendNotification();
2248 application.Render(0);
2249 application.Render(750u); // step i/4
2250 application.SendNotification();
2252 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("start_point", Vector2(-0.5f, 0.0f)), true, TEST_LOCATION);
2253 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("end_point", Vector2(0.5f, 0.0f)), true, TEST_LOCATION);
2254 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("start_color", Vector4(143.0f, 170.0f, 220.0f, 255.0f) / 255.0f), true, TEST_LOCATION);
2255 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("end_color", Vector4(255.0f, 163.0f, 163.0f, 255.0f) / 255.0f), true, TEST_LOCATION);
2256 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("rotate_center", Vector2(0.0f, 0.0f)), true, TEST_LOCATION);
2257 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("rotate_angle", 0.0f), true, TEST_LOCATION);
2258 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("gradient_offset", 0.5f * step_iter + 0.5f), true, TEST_LOCATION);
2261 //Not check here. cause gradient_offset value can be 2.0f or 0.0f
2262 application.Render(750u); // go to end
2263 application.SendNotification();
2265 application.Render(10u); // finish
2266 application.SendNotification();
2269 application.SendNotification();
2270 application.Render(0u);
2271 application.SendNotification();
2277 int UtcDaliVisualAnimatedGradientVisual02(void)
2279 ToolkitTestApplication application;
2280 tet_infoline("UtcDaliAnimatedGradientVisual with full-option");
2282 static std::vector<UniformData> customUniforms =
2284 UniformData("start_point", Property::Type::VECTOR2),
2285 UniformData("end_point", Property::Type::VECTOR2),
2286 UniformData("start_color", Property::Type::VECTOR4),
2287 UniformData("end_color", Property::Type::VECTOR4),
2288 UniformData("rotate_center", Property::Type::VECTOR2),
2289 UniformData("rotate_angle", Property::Type::FLOAT),
2290 UniformData("gradient_offset", Property::Type::FLOAT),
2293 TestGraphicsController& graphics = application.GetGraphicsController();
2294 graphics.AddCustomUniforms(customUniforms);
2297 float _delay[4] = {0.0f, -1.35f, 0.15f, -0.4f}; // fract(_delay) must NOT be 1/4, 2/4, 3/4. cause we don't know progress is 1.0f or 0.0f
2298 int _direction[2] = {0, 1};
2299 int _loop_count[3] = {-1, 0, 1};
2300 int _motion[2] = {0, 1};
2301 int _easing[4] = {0, 1, 2, 3};
2303 int test_case_max = 4 * 2 * 3 * 2 * 4;
2305 int test_case_d = 7; // 7 is the number of animated properties.
2307 float _duration = 0.4f;
2308 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2309 float noise_maker = 0.0f;
2310 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2311 for(test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d)
2313 tet_printf("test [%d ~ %d / %d]\n", test_case, test_case + test_case_d - 1, test_case_max);
2315 VisualFactory factory = VisualFactory::Get();
2316 Property::Map propertyMap;
2317 Property::Map animationMap;
2318 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2320 int gradient_type = DevelAnimatedGradientVisual::GradientType::LINEAR;
2321 int unit_type = DevelAnimatedGradientVisual::UnitType::USER_SPACE;
2322 int spread_type = DevelAnimatedGradientVisual::SpreadType::REPEAT;
2324 auto buildAnimatedMap = [&animationMap, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const Property::Value& start, const Property::Value& target, int tc_offset) -> Property::Map& {
2325 int tc = (test_case + tc_offset);
2326 int idx_easing = tc % 4;
2328 int idx_motion = tc % 2;
2330 int idx_loop_count = tc % 3;
2332 int idx_direction = tc % 2;
2334 int idx_delay = tc % 4;
2337 float duration = _duration - _repeat_delay;
2338 float repeat_delay = _repeat_delay;
2339 float delay = _delay[idx_delay] * _duration;
2340 int direction = _direction[idx_direction];
2341 int loop_count = _loop_count[idx_loop_count];
2342 int motion = _motion[idx_motion];
2343 int easing = _easing[idx_easing];
2345 animationMap.Clear();
2346 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::START, start);
2347 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::TARGET, target);
2350 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::FORWARD);
2354 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DIRECTION, DevelAnimatedGradientVisual::AnimationParameter::DirectionType::BACKWARD);
2356 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DURATION, duration);
2357 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::DELAY, delay);
2358 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT, loop_count);
2359 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::REPEAT_DELAY, repeat_delay);
2362 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::LOOP);
2366 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::MOTION_TYPE, DevelAnimatedGradientVisual::AnimationParameter::MotionType::MIRROR);
2370 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::LINEAR);
2372 else if(easing == 1)
2374 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN);
2376 else if(easing == 2)
2378 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::OUT);
2382 animationMap.Insert(DevelAnimatedGradientVisual::AnimationParameter::Property::EASING_TYPE, DevelAnimatedGradientVisual::AnimationParameter::EasingType::IN_OUT);
2385 return animationMap;
2388 // Give different values for debuging
2389 noise_maker += 1.0f;
2390 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2391 Vector2 end1(0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2392 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2393 Vector4 end_color1(0.7f, 0.5f, 1.0f, 1.0f);
2394 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2395 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2396 float offset1 = 0.f + noise_maker * 0.1f;
2398 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2399 Vector2 end2(0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2400 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2401 Vector4 end_color2(0.3f, 1.0f, 0.1f, 0.0f);
2402 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2403 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2404 float offset2 = 2.f + noise_maker * 0.1f;
2406 propertyMap.Insert(DevelAnimatedGradientVisual::Property::GRADIENT_TYPE, gradient_type);
2407 propertyMap.Insert(DevelAnimatedGradientVisual::Property::UNIT_TYPE, unit_type);
2408 propertyMap.Insert(DevelAnimatedGradientVisual::Property::SPREAD_TYPE, spread_type);
2410 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_POSITION, buildAnimatedMap(start1, start2, 0));
2411 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_POSITION, buildAnimatedMap(end1, end2, 1));
2412 propertyMap.Insert(DevelAnimatedGradientVisual::Property::START_COLOR, buildAnimatedMap(start_color1, start_color2, 2));
2413 propertyMap.Insert(DevelAnimatedGradientVisual::Property::END_COLOR, buildAnimatedMap(end_color1, end_color2, 3));
2414 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_CENTER, buildAnimatedMap(rotate_center1, rotate_center2, 4));
2415 propertyMap.Insert(DevelAnimatedGradientVisual::Property::ROTATE_AMOUNT, buildAnimatedMap(rotate_amount1, rotate_amount2, 5));
2416 propertyMap.Insert(DevelAnimatedGradientVisual::Property::OFFSET, buildAnimatedMap(offset1, offset2, 6));
2418 Visual::Base visual = factory.CreateVisual(propertyMap);
2420 DummyControl actor = DummyControl::New(true);
2421 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2422 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
2423 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
2424 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2425 actor.SetProperty(Actor::Property::COLOR, Color::BLACK);
2426 application.GetScene().Add(actor);
2428 application.SendNotification();
2429 application.Render(0);
2430 application.SendNotification();
2432 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
2434 application.SendNotification();
2436 //Compare between CPU calculated value and Shader Visual calculated value
2437 auto testProperty = [&application, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const char* name, const Property::Value& start, const Property::Value& target, int tc_offset, int value_type, float progress) -> void {
2438 int tc = (test_case + tc_offset);
2439 int idx_easing = tc % 4;
2441 int idx_motion = tc % 2;
2443 int idx_loop_count = tc % 3;
2445 int idx_direction = tc % 2;
2447 int idx_delay = tc % 4;
2450 float duration = _duration - _repeat_delay;
2451 float repeat_delay = _repeat_delay;
2452 float delay = _delay[idx_delay] * _duration;
2453 int direction = _direction[idx_direction];
2454 int loop_count = _loop_count[idx_loop_count];
2455 int motion = _motion[idx_motion];
2456 int easing = _easing[idx_easing];
2458 progress -= delay / _duration;
2460 Property::Value s = start;
2461 Property::Value t = target;
2467 float x; ///< Animator progress value
2472 else if(loop_count > 0 && progress + 0.01f > loop_count)
2474 x = (motion == 0) ? 1.0f : 0.0f;
2482 progress = fmodf(progress, 1.0f);
2483 progress = Dali::Clamp((progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f);
2488 x = progress * 2.0f;
2495 if(easing == 1) // EASE_IN
2499 else if(easing == 2) // EASE_OUT
2501 x = 2.0f * x - x * x;
2503 else if(easing == 3) // EASE_IN_OUT
2505 x = x * x * (3.0f - 2.0f * x);
2508 if(value_type == 0) // result type is Float
2512 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2513 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION);
2514 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2516 else if(value_type == 1) // result type is Vector2
2520 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2521 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION);
2522 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2524 else if(value_type == 2) // result type is Vector3
2528 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2529 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION);
2530 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2532 else // result type is Vector4
2536 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2537 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION);
2538 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2543 for(int iter = 0; iter < 2; iter++) // test 2*duration seconds
2545 for(int step_iter = 0; step_iter < 3; step_iter++)
2547 application.SendNotification();
2548 application.Render(_duration * 250.f); // step i/4
2549 application.SendNotification();
2552 testProperty("start_point", Property::Value(start1), Property::Value(start2), 0, 1, step);
2553 testProperty("end_point", Property::Value(end1), Property::Value(end2), 1, 1, step);
2554 testProperty("start_color", Property::Value(start_color1), Property::Value(start_color2), 2, 3, step);
2555 testProperty("end_color", Property::Value(end_color1), Property::Value(end_color2), 3, 3, step);
2556 testProperty("rotate_center", Property::Value(rotate_center1), Property::Value(rotate_center2), 4, 1, step);
2557 testProperty("rotate_angle", Property::Value(rotate_amount1), Property::Value(rotate_amount2), 5, 0, step);
2558 testProperty("gradient_offset", Property::Value(offset1), Property::Value(offset2), 6, 0, step);
2560 application.SendNotification();
2561 application.Render(_duration * 250.f); // step 4/4 will not test
2562 application.SendNotification();
2566 application.SendNotification();
2568 application.SendNotification();
2569 application.Render(10.f); // tempral time
2570 application.SendNotification();
2577 int UtcDaliVisualAnimatedGradientVisual03(void)
2579 ToolkitTestApplication application;
2580 tet_infoline("UtcDaliAnimatedGradientVisual with full-option use string key");
2582 static std::vector<UniformData> customUniforms =
2584 UniformData("start_point", Property::Type::VECTOR2),
2585 UniformData("end_point", Property::Type::VECTOR2),
2586 UniformData("start_color", Property::Type::VECTOR4),
2587 UniformData("end_color", Property::Type::VECTOR4),
2588 UniformData("rotate_center", Property::Type::VECTOR2),
2589 UniformData("rotate_angle", Property::Type::FLOAT),
2590 UniformData("gradient_offset", Property::Type::FLOAT),
2593 TestGraphicsController& graphics = application.GetGraphicsController();
2594 graphics.AddCustomUniforms(customUniforms);
2597 float _delay[4] = {0.0f, -1.35f, 0.15f, -0.4f}; // fract(_delay) must NOT be 1/4, 2/4, 3/4. cause we don't know progress is 1.0f or 0.0f
2598 int _direction[2] = {0, 1};
2599 int _loop_count[3] = {-1, 0, 1};
2600 int _motion[2] = {0, 1};
2601 int _easing[4] = {0, 1, 2, 3};
2603 int test_case_max = 4 * 2 * 3 * 2 * 4;
2605 int test_case_d = 7; // 7 is the number of animated properties.
2607 float _duration = 0.4f;
2608 float _repeat_delay = _duration * 0.25f; // < _duration. cause real_duration = _duration - _repeat_delay;
2609 float noise_maker = 0.2f;
2610 // total testing time = ceil((4*2*3*2*4) / 7) * (_duration(=0.4) * 2 + 0.01) = 22.68 seconds
2611 for(test_case = 0; test_case < test_case_max + test_case_d; test_case += test_case_d)
2613 tet_printf("test [%d ~ %d / %d]\n", test_case, test_case + test_case_d - 1, test_case_max);
2615 VisualFactory factory = VisualFactory::Get();
2616 Property::Map propertyMap;
2617 Property::Map animationMap;
2618 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::ANIMATED_GRADIENT);
2620 auto buildAnimatedMap = [&animationMap, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const Property::Value& start, const Property::Value& target, int tc_offset) -> Property::Map& {
2621 int tc = (test_case + tc_offset);
2622 int idx_easing = tc % 4;
2624 int idx_motion = tc % 2;
2626 int idx_loop_count = tc % 3;
2628 int idx_direction = tc % 2;
2630 int idx_delay = tc % 4;
2633 float duration = _duration - _repeat_delay;
2634 float repeat_delay = _repeat_delay;
2635 float delay = _delay[idx_delay] * _duration;
2636 int direction = _direction[idx_direction];
2637 int loop_count = _loop_count[idx_loop_count];
2638 int motion = _motion[idx_motion];
2639 int easing = _easing[idx_easing];
2641 animationMap.Clear();
2642 animationMap.Insert("startValue", start);
2643 animationMap.Insert("targetValue", target);
2646 animationMap.Insert("directionType", "FORWARD");
2650 animationMap.Insert("directionType", "BACKWARD");
2652 animationMap.Insert("duration", duration);
2653 animationMap.Insert("delay", delay);
2654 animationMap.Insert("repeat", loop_count);
2655 animationMap.Insert("repeatDelay", repeat_delay);
2658 animationMap.Insert("motionType", "LOOP");
2662 animationMap.Insert("motionType", "MIRROR");
2666 animationMap.Insert("easingType", "LINEAR");
2668 else if(easing == 1)
2670 animationMap.Insert("easingType", "IN");
2672 else if(easing == 2)
2674 animationMap.Insert("easingType", "OUT");
2678 animationMap.Insert("easingType", "IN_OUT");
2681 return animationMap;
2684 // Give different values for debuging
2685 noise_maker += 0.8f;
2686 Vector2 start1(-0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2687 Vector2 end1(0.5f + noise_maker * 0.1f, -0.5f + noise_maker * 0.1f);
2688 Vector4 start_color1(1.0f, 0.7f, 0.5f, 1.0f);
2689 Vector4 end_color1(0.7f, 0.5f, 1.0f, 1.0f);
2690 Vector2 rotate_center1(0.0f + noise_maker * 0.1f, 0.4f + noise_maker * 0.1f);
2691 float rotate_amount1 = 0.0f + noise_maker * 0.1f;
2692 float offset1 = 0.f + noise_maker * 0.1f;
2694 Vector2 start2(0.2f + noise_maker * 0.1f, -0.7f + noise_maker * 0.1f);
2695 Vector2 end2(0.5f + noise_maker * 0.1f, 0.5f + noise_maker * 0.1f);
2696 Vector4 start_color2(0.0f, 0.1f, 0.8f, 1.0f);
2697 Vector4 end_color2(0.3f, 1.0f, 0.1f, 0.0f);
2698 Vector2 rotate_center2(0.0f + noise_maker * 0.1f, -0.4f + noise_maker * 0.1f);
2699 float rotate_amount2 = 7.0f + noise_maker * 0.1f;
2700 float offset2 = 2.f + noise_maker * 0.1f;
2702 propertyMap.Insert("gradientType", "LINEAR");
2703 propertyMap.Insert("unitType", "USER_SPACE");
2704 propertyMap.Insert("spreadType", "CLAMP");
2706 propertyMap.Insert("startPosition", buildAnimatedMap(start1, start2, 0));
2707 propertyMap.Insert("endPosition", buildAnimatedMap(end1, end2, 1));
2708 propertyMap.Insert("startColor", buildAnimatedMap(start_color1, start_color2, 2));
2709 propertyMap.Insert("endColor", buildAnimatedMap(end_color1, end_color2, 3));
2710 propertyMap.Insert("rotateCenter", buildAnimatedMap(rotate_center1, rotate_center2, 4));
2711 propertyMap.Insert("rotateAmount", buildAnimatedMap(rotate_amount1, rotate_amount2, 5));
2712 propertyMap.Insert("offset", buildAnimatedMap(offset1, offset2, 6));
2714 Visual::Base visual = factory.CreateVisual(propertyMap);
2716 DummyControl actor = DummyControl::New(true);
2717 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
2718 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
2719 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
2720 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
2721 actor.SetProperty(Actor::Property::COLOR, Color::BLACK);
2722 application.GetScene().Add(actor);
2724 application.SendNotification();
2725 application.Render(0);
2726 application.SendNotification();
2728 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
2730 application.SendNotification();
2732 //Compare between CPU calculated value and Shader Visual calculated value
2733 auto testProperty = [&application, &_direction, &_duration, &_delay, &_loop_count, &_repeat_delay, &_motion, &_easing, &test_case](const char* name, const Property::Value& start, const Property::Value& target, int tc_offset, int value_type, float progress) -> void {
2734 int tc = (test_case + tc_offset);
2735 int idx_easing = tc % 4;
2737 int idx_motion = tc % 2;
2739 int idx_loop_count = tc % 3;
2741 int idx_direction = tc % 2;
2743 int idx_delay = tc % 4;
2746 float duration = _duration - _repeat_delay;
2747 float repeat_delay = _repeat_delay;
2748 float delay = _delay[idx_delay] * _duration;
2749 int direction = _direction[idx_direction];
2750 int loop_count = _loop_count[idx_loop_count];
2751 int motion = _motion[idx_motion];
2752 int easing = _easing[idx_easing];
2754 progress -= delay / _duration;
2756 Property::Value s = start;
2757 Property::Value t = target;
2763 float x; ///< Animator progress value
2768 else if(loop_count > 0 && progress + 0.01f > loop_count)
2770 x = (motion == 0) ? 1.0f : 0.0f;
2778 progress = fmodf(progress, 1.0f);
2779 progress = Dali::Clamp((progress * (duration + repeat_delay) - repeat_delay) / duration, 0.0f, 1.0f);
2784 x = progress * 2.0f;
2791 if(easing == 1) // EASE_IN
2795 else if(easing == 2) // EASE_OUT
2797 x = 2.0f * x - x * x;
2799 else if(easing == 3) // EASE_IN_OUT
2801 x = x * x * (3.0f - 2.0f * x);
2804 if(value_type == 0) // result type is Float
2808 res = s.Get<float>() * (1.0f - x) + t.Get<float>() * (x);
2809 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<float>(name, cur), true, TEST_LOCATION);
2810 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2812 else if(value_type == 1) // result type is Vector2
2816 res = s.Get<Vector2>() * (1.0f - x) + t.Get<Vector2>() * (x);
2817 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<Vector2>(name, cur), true, TEST_LOCATION);
2818 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2820 else if(value_type == 2) // result type is Vector3
2824 res = s.Get<Vector3>() * (1.0f - x) + t.Get<Vector3>() * (x);
2825 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<Vector3>(name, cur), true, TEST_LOCATION);
2826 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2828 else // result type is Vector4
2832 res = s.Get<Vector4>() * (1.0f - x) + t.Get<Vector4>() * (x);
2833 DALI_TEST_EQUALS(application.GetGlAbstraction().GetUniformValue<Vector4>(name, cur), true, TEST_LOCATION);
2834 DALI_TEST_EQUALS(res, cur, Math::MACHINE_EPSILON_100, TEST_LOCATION);
2839 for(int iter = 0; iter < 2; iter++) // test 2*duration seconds
2841 for(int step_iter = 0; step_iter < 3; step_iter++)
2843 application.SendNotification();
2844 application.Render(_duration * 250.f); // step i/4
2845 application.SendNotification();
2848 testProperty("start_point", Property::Value(start1), Property::Value(start2), 0, 1, step);
2849 testProperty("end_point", Property::Value(end1), Property::Value(end2), 1, 1, step);
2850 testProperty("start_color", Property::Value(start_color1), Property::Value(start_color2), 2, 3, step);
2851 testProperty("end_color", Property::Value(end_color1), Property::Value(end_color2), 3, 3, step);
2852 testProperty("rotate_center", Property::Value(rotate_center1), Property::Value(rotate_center2), 4, 1, step);
2853 testProperty("rotate_angle", Property::Value(rotate_amount1), Property::Value(rotate_amount2), 5, 0, step);
2854 testProperty("gradient_offset", Property::Value(offset1), Property::Value(offset2), 6, 0, step);
2856 application.SendNotification();
2857 application.Render(_duration * 250.f); // step 4/4 will not test
2858 application.SendNotification();
2862 application.SendNotification();
2864 application.SendNotification();
2865 application.Render(10.f); // tempral time
2866 application.SendNotification();
2873 int UtcDaliVisualWireframeVisual(void)
2875 ToolkitTestApplication application;
2877 VisualFactory factory = VisualFactory::Get();
2878 Property::Map propertyMap;
2879 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::WIREFRAME);
2881 // Create the visual.
2882 Visual::Base visual = factory.CreateVisual(propertyMap);
2884 DALI_TEST_CHECK(visual);
2886 Property::Map resultMap;
2887 visual.CreatePropertyMap(resultMap);
2889 // Check the property values from the returned map from visual
2890 Property::Value* value = resultMap.Find(Toolkit::Visual::Property::TYPE, Property::INTEGER);
2891 DALI_TEST_CHECK(value);
2892 DALI_TEST_CHECK(value->Get<int>() == Visual::WIREFRAME);
2897 int UtcDaliVisualGetTransform(void)
2899 ToolkitTestApplication application;
2900 tet_infoline("UtcDaliVisualGetTransform: ColorVisual");
2902 VisualFactory factory = VisualFactory::Get();
2903 Property::Map propertyMap;
2904 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
2905 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
2906 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
2908 Dali::Property::Map visualMap;
2909 colorVisual.CreatePropertyMap(visualMap);
2910 Property::Value* value = visualMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
2911 Dali::Property::Map* map = value->GetMap();
2912 DALI_TEST_CHECK(map);
2914 //Test default values
2916 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::OFFSET);
2917 DALI_TEST_CHECK(typeValue);
2918 DALI_TEST_CHECK(typeValue->Get<Vector2>() == Vector2(0.0f, 0.0f));
2921 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::SIZE);
2922 DALI_TEST_CHECK(typeValue);
2923 DALI_TEST_CHECK(typeValue->Get<Vector2>() == Vector2(1.0f, 1.0f));
2926 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::OFFSET_POLICY);
2927 DALI_TEST_CHECK(typeValue);
2928 DALI_TEST_CHECK(typeValue->Get<Vector2>() == Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE));
2931 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::SIZE_POLICY);
2932 DALI_TEST_CHECK(typeValue);
2933 DALI_TEST_CHECK(typeValue->Get<Vector2>() == Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE));
2936 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::ORIGIN);
2937 DALI_TEST_CHECK(typeValue);
2938 DALI_TEST_CHECK((Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN);
2941 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::ANCHOR_POINT);
2942 DALI_TEST_CHECK(typeValue);
2943 DALI_TEST_CHECK((Toolkit::Align::Type)typeValue->Get<int>() == Toolkit::Align::TOP_BEGIN);
2946 Property::Value* typeValue = map->Find(Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE);
2947 DALI_TEST_CHECK(typeValue);
2948 DALI_TEST_CHECK(typeValue->Get<Vector2>() == Vector2(0.0f, 0.0f));
2954 static void TestTransform(ToolkitTestApplication& application, Visual::Base visual)
2956 Property::Map transform;
2957 transform.Insert(Visual::Transform::Property::OFFSET, Vector2(10.0f, 10.0f));
2958 transform.Insert(Visual::Transform::Property::SIZE, Vector2(0.2f, 0.2f));
2959 transform.Insert(Visual::Transform::Property::OFFSET_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
2960 transform.Insert(Visual::Transform::Property::ORIGIN, "CENTER");
2961 transform.Insert(Visual::Transform::Property::ANCHOR_POINT, Toolkit::Align::BOTTOM_END);
2962 transform.Insert(DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(50.0f, 50.0f));
2964 visual.SetTransformAndSize(transform, Vector2(100, 100));
2966 Dali::Property::Map visualMap;
2967 visual.CreatePropertyMap(visualMap);
2968 Property::Value* value = visualMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
2969 Dali::Property::Map* map = value->GetMap();
2970 DALI_TEST_CHECK(map);
2973 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::OFFSET);
2974 DALI_TEST_CHECK(typeValue);
2975 DALI_TEST_EQUALS(typeValue->Get<Vector2>(), Vector2(10.0f, 10.0f), TEST_LOCATION);
2978 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::SIZE);
2979 DALI_TEST_CHECK(typeValue);
2980 DALI_TEST_EQUALS(typeValue->Get<Vector2>(), Vector2(0.2f, 0.2f), TEST_LOCATION);
2983 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::OFFSET_POLICY);
2984 DALI_TEST_CHECK(typeValue);
2985 DALI_TEST_EQUALS(typeValue->Get<Vector2>(), Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE), TEST_LOCATION);
2988 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::SIZE_POLICY);
2989 DALI_TEST_CHECK(typeValue);
2990 DALI_TEST_EQUALS(typeValue->Get<Vector2>(), Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE), TEST_LOCATION);
2993 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::ORIGIN);
2994 DALI_TEST_CHECK(typeValue);
2995 DALI_TEST_EQUALS((Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::CENTER, TEST_LOCATION);
2998 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::ANCHOR_POINT);
2999 DALI_TEST_CHECK(typeValue);
3000 DALI_TEST_EQUALS((Toolkit::Align::Type)typeValue->Get<int>(), Toolkit::Align::BOTTOM_END, TEST_LOCATION);
3003 Property::Value* typeValue = map->Find(Toolkit::DevelVisual::Transform::Property::EXTRA_SIZE);
3004 DALI_TEST_CHECK(typeValue);
3005 DALI_TEST_EQUALS(typeValue->Get<Vector2>(), Vector2(50.0f, 50.0f), TEST_LOCATION);
3008 //Put the visual on the stage
3009 DummyControl actor = DummyControl::New(true);
3010 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
3011 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
3012 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3013 application.GetScene().Add(actor);
3015 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
3016 dummyImpl.SetLayout(DummyControl::Property::TEST_VISUAL, transform);
3018 application.SendNotification();
3019 application.Render(0);
3020 Renderer renderer(actor.GetRendererAt(0));
3022 Vector2 offset = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_OFFSET);
3023 DALI_TEST_EQUALS(offset, Vector2(10.0f, 10.0f), TEST_LOCATION);
3025 Vector2 size = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_SIZE);
3026 DALI_TEST_EQUALS(size, Vector2(0.2f, 0.2f), TEST_LOCATION);
3028 Vector4 offsetSizeMode = renderer.GetProperty<Vector4>(VisualRenderer::Property::TRANSFORM_OFFSET_SIZE_MODE);
3029 DALI_TEST_EQUALS(offsetSizeMode, Vector4(1.0f, 1.0f, 0.0f, 0.0f), TEST_LOCATION);
3031 Vector2 parentOrigin = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_ORIGIN);
3032 DALI_TEST_EQUALS(parentOrigin, Vector2(0.0f, 0.0f), TEST_LOCATION);
3034 Vector2 anchorPoint = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_ANCHOR_POINT);
3035 DALI_TEST_EQUALS(anchorPoint, Vector2(-0.5f, -0.5f), TEST_LOCATION);
3037 Vector2 extraSize = renderer.GetProperty<Vector2>(VisualRenderer::Property::EXTRA_SIZE);
3038 DALI_TEST_EQUALS(extraSize, Vector2(50.0f, 50.0f), TEST_LOCATION);
3040 //Set a new transform
3042 transform = DefaultTransform();
3043 transform.Insert(Visual::Transform::Property::OFFSET, Vector2(20.0f, 20.0f));
3044 transform.Insert(Visual::Transform::Property::SIZE, Vector2(100.0f, 100.0f));
3045 transform.Insert(Visual::Transform::Property::SIZE_POLICY, Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE));
3046 transform.Insert(DevelVisual::Transform::Property::EXTRA_SIZE, Vector2(0.5f, 0.5f));
3047 visual.SetTransformAndSize(transform, Vector2(100, 100));
3048 application.SendNotification();
3049 application.Render(0);
3051 //Check that the values have changed in the renderer
3052 offset = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_OFFSET);
3053 DALI_TEST_EQUALS(offset, Vector2(20.0f, 20.0f), TEST_LOCATION);
3055 size = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_SIZE);
3056 DALI_TEST_EQUALS(size, Vector2(100.0f, 100.0f), TEST_LOCATION);
3058 offsetSizeMode = renderer.GetProperty<Vector4>(VisualRenderer::Property::TRANSFORM_OFFSET_SIZE_MODE);
3059 DALI_TEST_EQUALS(offsetSizeMode, Vector4(0.0f, 0.0f, 1.0f, 1.0f), TEST_LOCATION);
3061 //Parent origin and anchor point should have the default values
3062 parentOrigin = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_ORIGIN);
3063 DALI_TEST_EQUALS(parentOrigin, Vector2(-0.5f, -0.5f), TEST_LOCATION);
3065 anchorPoint = renderer.GetProperty<Vector2>(VisualRenderer::Property::TRANSFORM_ANCHOR_POINT);
3066 DALI_TEST_EQUALS(anchorPoint, Vector2(0.5f, 0.5f), TEST_LOCATION);
3068 extraSize = renderer.GetProperty<Vector2>(VisualRenderer::Property::EXTRA_SIZE);
3069 DALI_TEST_EQUALS(extraSize, Vector2(0.5f, 0.5f), TEST_LOCATION);
3072 int UtcDaliVisualSetTransform01(void)
3074 ToolkitTestApplication application;
3075 tet_infoline("UtcDaliVisualSetTransform: ColorVisual");
3077 VisualFactory factory = VisualFactory::Get();
3078 Property::Map propertyMap;
3079 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3080 propertyMap.Insert(Visual::Property::OPACITY, 0.5f);
3081 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3082 Visual::Base visual = factory.CreateVisual(propertyMap);
3083 TestTransform(application, visual);
3084 TestMixColor(visual, ColorVisual::Property::MIX_COLOR, Color::BLUE);
3089 int UtcDaliVisualSetTransform0(void)
3091 ToolkitTestApplication application;
3092 tet_infoline("UtcDaliVisualSetTransform: ColorVisual");
3094 VisualFactory factory = VisualFactory::Get();
3095 Property::Map propertyMap;
3096 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3097 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3098 Visual::Base visual = factory.CreateVisual(propertyMap);
3099 TestTransform(application, visual);
3100 TestMixColor(visual, ColorVisual::Property::MIX_COLOR, Color::BLUE);
3105 int UtcDaliVisualSetTransform1(void)
3107 ToolkitTestApplication application;
3108 tet_infoline("UtcDaliVisualSetTransform: PrimitiveVisual");
3110 VisualFactory factory = VisualFactory::Get();
3111 Property::Map propertyMap;
3112 propertyMap[Toolkit::Visual::Property::TYPE] = Visual::PRIMITIVE;
3113 propertyMap[PrimitiveVisual::Property::MIX_COLOR] = Color::WHITE;
3114 propertyMap[PrimitiveVisual::Property::SHAPE] = PrimitiveVisual::Shape::SPHERE;
3115 propertyMap[PrimitiveVisual::Property::SLICES] = 10;
3116 propertyMap[PrimitiveVisual::Property::STACKS] = 10;
3117 Visual::Base visual = factory.CreateVisual(propertyMap);
3118 TestTransform(application, visual);
3119 TestMixColor(visual, PrimitiveVisual::Property::MIX_COLOR, Color::WHITE);
3124 int UtcDaliVisualSetTransform2(void)
3126 ToolkitTestApplication application;
3127 tet_infoline("UtcDaliVisualSetTransform: GradientVisual");
3129 VisualFactory factory = VisualFactory::Get();
3130 Property::Map propertyMap;
3131 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::GRADIENT);
3132 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::GREEN);
3134 Property::Array stopOffsets;
3135 stopOffsets.PushBack(0.0f);
3136 stopOffsets.PushBack(0.3f);
3137 stopOffsets.PushBack(0.6f);
3138 stopOffsets.PushBack(0.8f);
3139 stopOffsets.PushBack(1.0f);
3140 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, stopOffsets);
3142 Property::Array stopColors;
3143 stopColors.PushBack(Vector4(129.f, 198.f, 193.f, 255.f) / 255.f);
3144 stopColors.PushBack(Vector4(196.f, 198.f, 71.f, 122.f) / 255.f);
3145 stopColors.PushBack(Vector4(214.f, 37.f, 139.f, 191.f) / 255.f);
3146 stopColors.PushBack(Vector4(129.f, 198.f, 193.f, 150.f) / 255.f);
3147 stopColors.PushBack(Color::YELLOW);
3148 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
3149 propertyMap.Insert(GradientVisual::Property::CENTER, Vector2(0.5f, 0.5f));
3150 propertyMap.Insert(GradientVisual::Property::RADIUS, 1.414f);
3151 Visual::Base visual = factory.CreateVisual(propertyMap);
3152 TestTransform(application, visual);
3153 TestMixColor(visual, Visual::Property::MIX_COLOR, Color::GREEN);
3158 int UtcDaliVisualSetTransform3(void)
3160 ToolkitTestApplication application;
3161 tet_infoline("UtcDaliVisualSetTransform: BorderVisual");
3163 VisualFactory factory = VisualFactory::Get();
3164 Property::Map propertyMap;
3165 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::BORDER);
3166 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::MAGENTA);
3167 propertyMap.Insert(BorderVisual::Property::COLOR, Vector4(0.f, 1.f, 0.f, 0.6f));
3168 propertyMap.Insert(BorderVisual::Property::SIZE, 3.0f);
3169 Visual::Base visual = factory.CreateVisual(propertyMap);
3170 TestTransform(application, visual);
3171 TestMixColor(visual, Visual::Property::MIX_COLOR, Color::MAGENTA);
3176 int UtcDaliVisualSetTransform4(void)
3178 ToolkitTestApplication application;
3179 tet_infoline("UtcDaliVisualSetTransform: MeshVisual");
3181 VisualFactory factory = VisualFactory::Get();
3182 Property::Map propertyMap;
3183 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::MESH);
3184 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::CYAN);
3186 propertyMap.Insert("objectUrl", TEST_OBJ_FILE_NAME);
3187 propertyMap.Insert("materialUrl", TEST_MTL_FILE_NAME);
3188 propertyMap.Insert("texturesPath", TEST_RESOURCE_LOCATION);
3189 propertyMap.Insert("shadingMode", MeshVisual::ShadingMode::TEXTURELESS_WITH_DIFFUSE_LIGHTING);
3190 propertyMap.Insert("lightPosition", Vector3(5.0f, 10.0f, 15.0f));
3191 Visual::Base visual = factory.CreateVisual(propertyMap);
3192 TestTransform(application, visual);
3193 TestMixColor(visual, Visual::Property::MIX_COLOR, Color::CYAN);
3198 int UtcDaliVisualSetTransform5(void)
3200 ToolkitTestApplication application;
3201 tet_infoline("UtcDaliVisualSetTransform: ImageVisual for URL ");
3203 VisualFactory factory = VisualFactory::Get();
3204 Property::Map propertyMap;
3205 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
3206 propertyMap[Visual::Property::MIX_COLOR] = Color::YELLOW;
3207 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3208 propertyMap[Toolkit::ImageVisual::Property::DESIRED_WIDTH] = 100.0f;
3209 propertyMap[Toolkit::ImageVisual::Property::DESIRED_HEIGHT] = 100.0f;
3210 propertyMap[Toolkit::ImageVisual::Property::FITTING_MODE] = FittingMode::SCALE_TO_FILL;
3211 propertyMap[Toolkit::ImageVisual::Property::SAMPLING_MODE] = SamplingMode::BOX_THEN_LINEAR;
3212 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3213 Visual::Base visual = factory.CreateVisual(propertyMap);
3214 TestTransform(application, visual);
3215 TestMixColor(visual, Visual::Property::MIX_COLOR, Color::YELLOW);
3220 int UtcDaliVisualSetTransform6(void)
3222 ToolkitTestApplication application;
3223 tet_infoline("UtcDaliVisualSetTransform: NPatch visual");
3225 VisualFactory factory = VisualFactory::Get();
3226 Property::Map propertyMap;
3227 propertyMap[Toolkit::Visual::Property::TYPE] = Toolkit::Visual::IMAGE;
3228 propertyMap[Toolkit::ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3229 propertyMap[Toolkit::ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3230 Visual::Base visual = factory.CreateVisual(propertyMap);
3231 TestTransform(application, visual);
3232 TestMixColor(visual, Visual::Property::MIX_COLOR, Color::WHITE);
3237 int UtcDaliVisualTestTransformPoliciesAsStrings(void)
3239 ToolkitTestApplication application;
3240 tet_infoline("UtcDaliVisualTestTransformPoliciesAsStrings: Use a ColorVisual and test the offset and size policies as strings");
3242 VisualFactory factory = VisualFactory::Get();
3243 Property::Map propertyMap;
3244 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3245 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3246 Visual::Base visual = factory.CreateVisual(propertyMap);
3248 Property::Map transform;
3249 transform["offsetPolicy"] = Property::Array().Add("ABSOLUTE").Add("RELATIVE");
3250 transform["sizePolicy"] = Property::Array().Add("RELATIVE").Add("ABSOLUTE");
3251 visual.SetTransformAndSize(transform, Vector2(100, 100));
3253 Dali::Property::Map visualMap;
3254 visual.CreatePropertyMap(visualMap);
3255 Property::Value* value = visualMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
3256 Dali::Property::Map* map = value->GetMap();
3257 DALI_TEST_CHECK(map);
3260 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::OFFSET_POLICY);
3261 DALI_TEST_CHECK(typeValue);
3262 DALI_TEST_EQUALS(typeValue->Get<Vector2>(), Vector2(Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::RELATIVE), TEST_LOCATION);
3265 Property::Value* typeValue = map->Find(Toolkit::Visual::Transform::Property::SIZE_POLICY);
3266 DALI_TEST_CHECK(typeValue);
3267 DALI_TEST_EQUALS(typeValue->Get<Vector2>(), Vector2(Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::ABSOLUTE), TEST_LOCATION);
3273 int UtcDaliNPatchVisualCustomShader(void)
3275 ToolkitTestApplication application;
3276 tet_infoline("NPatchVisual with custom shader");
3278 VisualFactory factory = VisualFactory::Get();
3279 Property::Map properties;
3280 Property::Map shader;
3281 const std::string vertexShader = "Foobar";
3282 const std::string fragmentShader = "Foobar";
3283 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3284 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3286 Property::Map transformMap;
3287 transformMap["size"] = Vector2(0.5f, 0.5f);
3288 transformMap["offset"] = Vector2(20.0f, 0.0f);
3289 transformMap["offsetPolicy"] = Vector2(Visual::Transform::Policy::ABSOLUTE, Visual::Transform::Policy::ABSOLUTE);
3290 transformMap["anchorPoint"] = Align::CENTER;
3291 transformMap["origin"] = Align::CENTER;
3292 transformMap["extraSize"] = Vector2(0.0f, 50.0f);
3293 properties[Visual::Property::TRANSFORM] = transformMap;
3295 properties[Visual::Property::TYPE] = Visual::IMAGE;
3296 properties[Visual::Property::MIX_COLOR] = Color::BLUE;
3297 properties[Visual::Property::SHADER] = shader;
3298 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
3299 properties[ImageVisual::Property::SYNCHRONOUS_LOADING] = true;
3301 Visual::Base visual = factory.CreateVisual(properties);
3302 TestMixColor(visual, Visual::Property::MIX_COLOR, Color::BLUE);
3304 // trigger creation through setting on stage
3305 DummyControl dummy = DummyControl::New(true);
3306 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3307 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
3308 dummyImpl.SetLayout(DummyControl::Property::TEST_VISUAL, transformMap);
3309 dummy.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
3310 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3311 application.GetScene().Add(dummy);
3312 application.SendNotification();
3314 Renderer renderer = dummy.GetRendererAt(0);
3315 Shader shader2 = renderer.GetShader();
3316 Property::Value value = shader2.GetProperty(Shader::Property::PROGRAM);
3317 Property::Map* map = value.GetMap();
3318 DALI_TEST_CHECK(map);
3320 Property::Index index = VisualRenderer::Property::TRANSFORM_SIZE;
3321 DALI_TEST_EQUALS(renderer.GetProperty(index), Property::Value(Vector2(0.5, 0.5)), 0.001, TEST_LOCATION);
3323 Property::Value* fragment = map->Find("fragment"); // fragment key name from shader-impl.cpp
3324 DALI_TEST_EQUALS(fragmentShader, fragment->Get<std::string>(), TEST_LOCATION);
3326 Property::Value* vertex = map->Find("vertex"); // vertex key name from shader-impl.cpp
3327 DALI_TEST_EQUALS(vertexShader, vertex->Get<std::string>(), TEST_LOCATION);
3329 Vector2 extraSize = renderer.GetProperty<Vector2>(VisualRenderer::Property::EXTRA_SIZE);
3330 DALI_TEST_EQUALS(extraSize, Vector2(0.0f, 50.0f), TEST_LOCATION);
3335 int UtcDaliGradientVisualBlendMode(void)
3337 ToolkitTestApplication application;
3338 VisualFactory factory = VisualFactory::Get();
3340 Visual::Base opaqueGradientVisual = factory.CreateVisual(
3341 Property::Map().Add(Toolkit::Visual::Property::TYPE, Visual::GRADIENT).Add(GradientVisual::Property::START_POSITION, Vector2(-0.5f, -0.5f)).Add(GradientVisual::Property::END_POSITION, Vector2(0.5f, 0.5f)).Add(GradientVisual::Property::STOP_COLOR, Property::Array().Add(Color::RED).Add(Color::GREEN)));
3343 Visual::Base alphaGradientVisual = factory.CreateVisual(
3344 Property::Map().Add(Toolkit::Visual::Property::TYPE, Visual::GRADIENT).Add(GradientVisual::Property::START_POSITION, Vector2(-0.5f, -0.5f)).Add(GradientVisual::Property::END_POSITION, Vector2(0.5f, 0.5f)).Add(GradientVisual::Property::STOP_COLOR, Property::Array().Add(Color::RED).Add(Vector4(1.0f, 1.0f, 1.0f, 0.5f))));
3346 DummyControl control = DummyControl::New(true);
3347 control.SetResizePolicy(ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS);
3348 application.GetScene().Add(control);
3350 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(control.GetImplementation());
3351 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, opaqueGradientVisual);
3352 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL2, alphaGradientVisual);
3354 application.SendNotification();
3355 application.Render();
3357 // Control should have two renderers, the first one is opaque so our blending mode should be off, the second one has some alpha so should be set to automatic
3358 DALI_TEST_EQUALS(2u, control.GetRendererCount(), TEST_LOCATION);
3359 DALI_TEST_EQUALS(control.GetRendererAt(0).GetProperty(Renderer::Property::BLEND_MODE).Get<int>(), (int)BlendMode::OFF, TEST_LOCATION);
3360 DALI_TEST_EQUALS(control.GetRendererAt(1).GetProperty(Renderer::Property::BLEND_MODE).Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION);
3365 int UtcDaliVisualRendererRemovalAndReAddition(void)
3367 ToolkitTestApplication application;
3368 tet_infoline("UtcDaliVisualRendererRemoval");
3370 VisualFactory factory = VisualFactory::Get();
3371 Property::Map propertyMap;
3372 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3373 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3374 Visual::Base visual = factory.CreateVisual(propertyMap);
3376 visual.SetDepthIndex(1);
3378 DummyControl dummyControl = DummyControl::New(true);
3379 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3380 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
3381 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 0, TEST_LOCATION);
3383 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3384 tet_infoline("Add control with visual to stage and check renderer count is 1");
3386 application.GetScene().Add(dummyControl);
3388 application.SendNotification();
3389 application.Render();
3391 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 1, TEST_LOCATION);
3393 tet_infoline("Remove control with visual from stage and check renderer count is 0");
3394 application.GetScene().Remove(dummyControl);
3395 application.SendNotification();
3396 application.Render();
3398 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 0, TEST_LOCATION);
3400 tet_infoline("Re-add control with visual to stage and check renderer count is still 1");
3402 application.GetScene().Add(dummyControl);
3404 application.SendNotification();
3405 application.Render();
3407 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 1, TEST_LOCATION);
3412 int UtcDaliVisualTextVisualRender(void)
3414 ToolkitTestApplication application;
3415 tet_infoline("UtcDaliVisualTextVisualRender");
3417 VisualFactory factory = VisualFactory::Get();
3418 Property::Map propertyMap;
3419 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::TEXT);
3420 propertyMap.Insert("mixColor", Color::WHITE);
3421 propertyMap.Insert("renderingBackend", static_cast<int>(Toolkit::DevelText::DEFAULT_RENDERING_BACKEND));
3422 propertyMap.Insert("enableMarkup", false);
3423 propertyMap.Insert("text", "Hello world");
3424 propertyMap.Insert("fontFamily", "TizenSans");
3426 Property::Map fontStyleMapSet;
3427 fontStyleMapSet.Insert("weight", "bold");
3428 propertyMap.Insert("fontStyle", fontStyleMapSet);
3430 propertyMap.Insert("pointSize", 12.f);
3431 propertyMap.Insert("multiLine", true);
3432 propertyMap.Insert("horizontalAlignment", "CENTER");
3433 propertyMap.Insert("verticalAlignment", "CENTER");
3434 propertyMap.Insert("textColor", Color::RED);
3435 Visual::Base textVisual = factory.CreateVisual(propertyMap);
3436 textVisual.SetDepthIndex(1);
3438 DummyControl dummyControl = DummyControl::New(true);
3439 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3440 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, textVisual);
3441 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 0, TEST_LOCATION);
3443 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3444 dummyControl.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3446 application.GetScene().Add(dummyControl);
3447 application.SendNotification();
3448 application.Render();
3450 // Create a texture bigger than the maximum allowed by the image atlas. Used to increase coverage.
3451 propertyMap.Clear();
3452 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::TEXT);
3453 propertyMap.Insert(TextVisual::Property::ENABLE_MARKUP, true);
3454 propertyMap.Insert(TextVisual::Property::TEXT, "<font family='TizenSans' size='12'>Hello world</font>");
3455 propertyMap.Insert(TextVisual::Property::MULTI_LINE, true);
3457 Property::Map transformMap;
3458 transformMap.Insert("size", Vector2(0.5f, 0.5f));
3459 propertyMap.Insert(Visual::Property::TRANSFORM, transformMap);
3461 textVisual = factory.CreateVisual(propertyMap);
3462 textVisual.SetDepthIndex(1);
3464 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, textVisual);
3465 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(720.f, 640.f));
3467 application.SendNotification(); // force process events to ensure text visual
3468 // adds renderer to the dummy control in OnRelayout
3469 application.Render();
3471 Renderer renderer = dummyControl.GetRendererAt(0u);
3472 Property::Index index = renderer.GetPropertyIndex("transformSize");
3474 tet_infoline("Test that the TextVisual has NOT overridden what was set by developer");
3475 DALI_TEST_EQUALS(renderer.GetProperty<Vector2>(index), Vector2(0.5f, 0.5f), 0.001f, TEST_LOCATION);
3480 int UtcDaliVisualTextVisualDisableEnable(void)
3482 ToolkitTestApplication application;
3483 tet_infoline("UtcDaliVisualTextVisualDisableEnable Ensure Text visible can be re-enabled");
3485 VisualFactory factory = VisualFactory::Get();
3486 Property::Map propertyMap;
3487 propertyMap.Insert(Toolkit::Visual::Property::TYPE, Visual::TEXT);
3488 propertyMap.Insert("mixColor", Color::WHITE);
3489 propertyMap.Insert("renderingBackend", static_cast<int>(Toolkit::DevelText::DEFAULT_RENDERING_BACKEND));
3490 propertyMap.Insert("enableMarkup", false);
3491 propertyMap.Insert("text", "Hello world");
3492 propertyMap.Insert("fontFamily", "TizenSans");
3494 Property::Map fontStyleMapSet;
3495 fontStyleMapSet.Insert("weight", "bold");
3496 propertyMap.Insert("fontStyle", fontStyleMapSet);
3498 propertyMap.Insert("pointSize", 12.f);
3499 propertyMap.Insert("multiLine", true);
3500 propertyMap.Insert("horizontalAlignment", "CENTER");
3501 propertyMap.Insert("verticalAlignment", "CENTER");
3502 propertyMap.Insert("textColor", Color::RED);
3503 Visual::Base textVisual = factory.CreateVisual(propertyMap);
3504 textVisual.SetDepthIndex(1);
3506 DummyControl dummyControl = DummyControl::New(true);
3507 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3508 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, textVisual);
3509 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 0, TEST_LOCATION);
3511 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3512 dummyControl.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3514 application.GetScene().Add(dummyControl);
3515 application.SendNotification();
3516 application.Render();
3518 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 1, TEST_LOCATION);
3520 dummyImpl.EnableVisual(DummyControl::Property::TEST_VISUAL, false);
3522 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 0, TEST_LOCATION);
3524 dummyImpl.EnableVisual(DummyControl::Property::TEST_VISUAL, true);
3526 DALI_TEST_EQUALS(dummyControl.GetRendererCount(), 1, TEST_LOCATION);
3531 int UtcDaliVisualPremultipliedAlpha(void)
3533 ToolkitTestApplication application;
3534 tet_infoline("UtcDaliVisualPremultipliedAlpha");
3536 VisualFactory factory = VisualFactory::Get();
3538 // image visual, test default value ( true )
3540 Visual::Base imageVisual = factory.CreateVisual(
3542 .Add(Toolkit::Visual::Property::TYPE, Visual::IMAGE)
3543 .Add(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME));
3545 Dali::Property::Map visualMap;
3546 imageVisual.CreatePropertyMap(visualMap);
3547 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3550 DALI_TEST_CHECK(value);
3551 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3554 // image visual, override premultiplied
3556 Visual::Base imageVisual = factory.CreateVisual(
3558 .Add(Toolkit::Visual::Property::TYPE, Visual::IMAGE)
3559 .Add(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME)
3560 .Add(Visual::Property::PREMULTIPLIED_ALPHA, false));
3562 Dali::Property::Map visualMap;
3563 imageVisual.CreatePropertyMap(visualMap);
3564 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3567 DALI_TEST_CHECK(value);
3568 DALI_TEST_EQUALS(value->Get<bool>(), false, TEST_LOCATION);
3571 // svg visual ( premultiplied alpha by default is true, and cannot change value )
3573 Visual::Base imageVisual = factory.CreateVisual(
3575 .Add(Toolkit::Visual::Property::TYPE, Visual::IMAGE)
3576 .Add(ImageVisual::Property::URL, TEST_SVG_FILE_NAME));
3578 Dali::Property::Map visualMap;
3579 imageVisual.CreatePropertyMap(visualMap);
3580 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3583 DALI_TEST_CHECK(value);
3584 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3587 Visual::Base imageVisual = factory.CreateVisual(
3589 .Add(Toolkit::Visual::Property::TYPE, Visual::IMAGE)
3590 .Add(ImageVisual::Property::URL, TEST_SVG_FILE_NAME)
3591 .Add(Visual::Property::PREMULTIPLIED_ALPHA, false));
3593 Dali::Property::Map visualMap;
3594 imageVisual.CreatePropertyMap(visualMap);
3595 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3598 DALI_TEST_CHECK(value);
3599 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3602 // animated vector visual ( premultiplied alpha by default is true, and cannot change value )
3604 Visual::Base imageVisual = factory.CreateVisual(
3606 .Add(Toolkit::Visual::Property::TYPE, Visual::IMAGE)
3607 .Add(ImageVisual::Property::URL, "something.json"));
3609 Dali::Property::Map visualMap;
3610 imageVisual.CreatePropertyMap(visualMap);
3611 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3614 DALI_TEST_CHECK(value);
3615 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3618 Visual::Base imageVisual = factory.CreateVisual(
3620 .Add(Toolkit::Visual::Property::TYPE, Visual::IMAGE)
3621 .Add(ImageVisual::Property::URL, "something.json")
3622 .Add(Visual::Property::PREMULTIPLIED_ALPHA, false));
3624 Dali::Property::Map visualMap;
3625 imageVisual.CreatePropertyMap(visualMap);
3626 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3629 DALI_TEST_CHECK(value);
3630 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3633 // text visual ( premultiplied alpha by default is true, and cannot change value )
3635 Visual::Base textVisual = factory.CreateVisual(
3637 .Add(Toolkit::Visual::Property::TYPE, Visual::TEXT)
3638 .Add(TextVisual::Property::TEXT, "Text"));
3640 Dali::Property::Map visualMap;
3641 textVisual.CreatePropertyMap(visualMap);
3642 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3645 DALI_TEST_CHECK(value);
3646 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3649 Visual::Base textVisual = factory.CreateVisual(
3651 .Add(Toolkit::Visual::Property::TYPE, Visual::TEXT)
3652 .Add(TextVisual::Property::TEXT, "Text")
3653 .Add(Visual::Property::PREMULTIPLIED_ALPHA, false));
3655 Dali::Property::Map visualMap;
3656 textVisual.CreatePropertyMap(visualMap);
3657 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3660 DALI_TEST_CHECK(value);
3661 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3664 // gradient visual ( premultiplied alpha by default is true, and cannot change value )
3666 Visual::Base gradientVisual = factory.CreateVisual(
3668 .Add(Toolkit::Visual::Property::TYPE, Visual::GRADIENT)
3669 .Add(GradientVisual::Property::START_POSITION, Vector2(-0.5f, -0.5f))
3670 .Add(GradientVisual::Property::END_POSITION, Vector2(0.5f, 0.5f))
3671 .Add(GradientVisual::Property::STOP_COLOR, Property::Array().Add(Color::RED).Add(Vector4(1.0f, 1.0f, 1.0f, 0.5f))));
3673 Dali::Property::Map visualMap;
3674 gradientVisual.CreatePropertyMap(visualMap);
3675 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3678 DALI_TEST_CHECK(value);
3679 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3682 Visual::Base gradientVisual = factory.CreateVisual(
3684 .Add(Toolkit::Visual::Property::TYPE, Visual::GRADIENT)
3685 .Add(GradientVisual::Property::START_POSITION, Vector2(-0.5f, -0.5f))
3686 .Add(GradientVisual::Property::END_POSITION, Vector2(0.5f, 0.5f))
3687 .Add(GradientVisual::Property::STOP_COLOR, Property::Array().Add(Color::RED).Add(Vector4(1.0f, 1.0f, 1.0f, 0.5f)))
3688 .Add(Visual::Property::PREMULTIPLIED_ALPHA, false));
3690 Dali::Property::Map visualMap;
3691 gradientVisual.CreatePropertyMap(visualMap);
3692 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3695 DALI_TEST_CHECK(value);
3696 DALI_TEST_EQUALS(value->Get<bool>(), true, TEST_LOCATION);
3699 // color visual ( premultiplied alpha by default is false, and cannot change value )
3701 Visual::Base colorVisual = factory.CreateVisual(
3703 .Add(Toolkit::Visual::Property::TYPE, Visual::COLOR)
3704 .Add(ColorVisual::Property::MIX_COLOR, Color::AQUA));
3706 Dali::Property::Map visualMap;
3707 colorVisual.CreatePropertyMap(visualMap);
3708 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3711 DALI_TEST_CHECK(value);
3712 DALI_TEST_EQUALS(value->Get<bool>(), false, TEST_LOCATION);
3715 Visual::Base colorVisual = factory.CreateVisual(
3717 .Add(Toolkit::Visual::Property::TYPE, Visual::COLOR)
3718 .Add(ColorVisual::Property::MIX_COLOR, Color::AQUA)
3719 .Add(Visual::Property::PREMULTIPLIED_ALPHA, true));
3721 Dali::Property::Map visualMap;
3722 colorVisual.CreatePropertyMap(visualMap);
3723 Property::Value* value = visualMap.Find(Visual::Property::PREMULTIPLIED_ALPHA);
3726 DALI_TEST_CHECK(value);
3727 DALI_TEST_EQUALS(value->Get<bool>(), false, TEST_LOCATION);
3733 int UtcDaliRegisterVisualOrder(void)
3735 ToolkitTestApplication application;
3736 tet_infoline("Register Visual Order");
3738 DummyControl dummyControl = DummyControl::New(true);
3739 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3741 VisualFactory factory = VisualFactory::Get();
3742 Property::Map propertyMap;
3743 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3744 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3746 tet_infoline("Register visual, should have depth index of 0.0f");
3747 Visual::Base testVisual = factory.CreateVisual(propertyMap);
3748 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, testVisual);
3749 DALI_TEST_EQUALS(testVisual.GetDepthIndex(), 0, TEST_LOCATION);
3751 tet_infoline("Register more visuals, each added one should have a depth index greater than previous");
3753 Visual::Base testVisual2 = factory.CreateVisual(propertyMap);
3754 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL2, testVisual2);
3755 DALI_TEST_CHECK(testVisual2.GetDepthIndex() > testVisual.GetDepthIndex());
3757 Visual::Base foregroundVisual = factory.CreateVisual(propertyMap);
3758 dummyImpl.RegisterVisual(DummyControl::Property::FOREGROUND_VISUAL, foregroundVisual);
3759 DALI_TEST_CHECK(foregroundVisual.GetDepthIndex() > testVisual2.GetDepthIndex());
3761 Visual::Base focusVisual = factory.CreateVisual(propertyMap);
3762 dummyImpl.RegisterVisual(DummyControl::Property::FOCUS_VISUAL, focusVisual);
3763 DALI_TEST_CHECK(focusVisual.GetDepthIndex() > foregroundVisual.GetDepthIndex());
3765 tet_infoline("Set depth index on a new visual before registering, the depth index should not have been changed, and be clampled");
3766 Visual::Base labelVisual = factory.CreateVisual(propertyMap);
3767 labelVisual.SetDepthIndex(static_cast<int>(Toolkit::DepthIndex::MINIMUM_DEPTH_INDEX) - 100);
3768 dummyImpl.RegisterVisual(DummyControl::Property::LABEL_VISUAL, labelVisual);
3769 DALI_TEST_EQUALS(labelVisual.GetDepthIndex(), static_cast<int>(Toolkit::DepthIndex::MINIMUM_DEPTH_INDEX), TEST_LOCATION);
3771 tet_infoline("Replace visual, the depth index should be the same as what was previously set");
3772 const int testVisual2DepthIndex = testVisual2.GetDepthIndex();
3773 Visual::Base testVisual2Replacement = factory.CreateVisual(propertyMap);
3774 DALI_TEST_CHECK(testVisual2Replacement.GetDepthIndex() != testVisual2DepthIndex);
3775 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL2, testVisual2Replacement);
3776 DALI_TEST_EQUALS(testVisual2Replacement.GetDepthIndex(), testVisual2DepthIndex, TEST_LOCATION);
3778 tet_infoline("Replace visual and set a depth index on the replacement, the depth index of the replacement should be honoured, and be clampled");
3779 Visual::Base anotherTestVisual2Replacement = factory.CreateVisual(propertyMap);
3780 anotherTestVisual2Replacement.SetDepthIndex(static_cast<int>(Toolkit::DepthIndex::MAXIMUM_DEPTH_INDEX) + 100);
3781 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL2, anotherTestVisual2Replacement);
3782 DALI_TEST_EQUALS(anotherTestVisual2Replacement.GetDepthIndex(), static_cast<int>(Toolkit::DepthIndex::MAXIMUM_DEPTH_INDEX), TEST_LOCATION);
3784 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3785 application.GetScene().Add(dummyControl);
3790 int UtcDaliRegisterVisualOrder02(void)
3792 ToolkitTestApplication application;
3793 tet_infoline("Register Visual Order with Background Set");
3795 DummyControl dummyControl = DummyControl::New(true);
3796 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3798 const int backgroundDepthIndex = Toolkit::DepthIndex::BACKGROUND;
3800 VisualFactory factory = VisualFactory::Get();
3801 Property::Map propertyMap;
3802 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3803 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3805 tet_printf("Register a control background visual, should have depth index of %d\n", backgroundDepthIndex);
3807 dummyControl.SetProperty(Control::Property::BACKGROUND, propertyMap);
3809 const int TEST_VISUAL_1_DEPTH_INDEX = static_cast<int>(Toolkit::DepthIndex::CONTENT);
3810 tet_printf("Register visual, should have depth index of %d\n", TEST_VISUAL_1_DEPTH_INDEX);
3811 Visual::Base testVisual1 = factory.CreateVisual(propertyMap);
3812 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, testVisual1);
3813 DALI_TEST_EQUALS(testVisual1.GetDepthIndex(), TEST_VISUAL_1_DEPTH_INDEX, TEST_LOCATION);
3815 tet_printf("Register another visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_1_DEPTH_INDEX);
3816 Visual::Base testVisual2 = factory.CreateVisual(propertyMap);
3817 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL2, testVisual2);
3818 DALI_TEST_GREATER(testVisual2.GetDepthIndex(), testVisual1.GetDepthIndex(), TEST_LOCATION);
3820 const int TEST_VISUAL_2_DEPTH_INDEX = testVisual2.GetDepthIndex();
3822 tet_printf("Register other visual, should have a depth index greater than previous(%d)\n", TEST_VISUAL_2_DEPTH_INDEX);
3823 Visual::Base testVisual3 = factory.CreateVisual(propertyMap);
3824 dummyImpl.RegisterVisual(DummyControl::Property::FOREGROUND_VISUAL, testVisual3, Toolkit::DepthIndex::AUTO_INDEX);
3825 DALI_TEST_GREATER(testVisual3.GetDepthIndex(), testVisual2.GetDepthIndex(), TEST_LOCATION);
3827 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3828 application.GetScene().Add(dummyControl);
3833 int UtcDaliRegisterVisualWithDepthIndex(void)
3835 ToolkitTestApplication application;
3836 tet_infoline("Register a Visual With Depth Index");
3838 DummyControl dummyControl = DummyControl::New(true);
3839 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
3841 VisualFactory factory = VisualFactory::Get();
3842 Property::Map propertyMap;
3843 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
3844 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
3846 tet_infoline("Register a visual with a depth index, it should be enabled by default too");
3847 Visual::Base testVisual = factory.CreateVisual(propertyMap);
3848 DevelControl::RegisterVisual(dummyImpl, DummyControl::Property::TEST_VISUAL, testVisual, 203);
3849 DALI_TEST_EQUALS(testVisual.GetDepthIndex(), 203, TEST_LOCATION);
3850 DALI_TEST_EQUALS(DevelControl::IsVisualEnabled(dummyImpl, DummyControl::Property::TEST_VISUAL), true, TEST_LOCATION);
3852 tet_infoline("Register another visual with a depth index and it disabled");
3853 Visual::Base testVisual2 = factory.CreateVisual(propertyMap);
3854 DevelControl::RegisterVisual(dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual2, false, 450);
3855 DALI_TEST_EQUALS(testVisual2.GetDepthIndex(), 450, TEST_LOCATION);
3856 DALI_TEST_EQUALS(DevelControl::IsVisualEnabled(dummyImpl, DummyControl::Property::TEST_VISUAL2), false, TEST_LOCATION);
3858 tet_infoline("Register another visual with a depth index and it enabled using the enabled API");
3859 Visual::Base testVisual3 = factory.CreateVisual(propertyMap);
3860 DevelControl::RegisterVisual(dummyImpl, DummyControl::Property::TEST_VISUAL2, testVisual3, true, 300);
3861 DALI_TEST_EQUALS(testVisual3.GetDepthIndex(), 300, TEST_LOCATION);
3862 DALI_TEST_EQUALS(DevelControl::IsVisualEnabled(dummyImpl, DummyControl::Property::TEST_VISUAL2), true, TEST_LOCATION);
3864 dummyControl.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3865 application.GetScene().Add(dummyControl);
3870 int UtcDaliSvgVisualCustomShader(void)
3872 ToolkitTestApplication application;
3873 tet_infoline("SvgVisual with custom shader");
3875 VisualFactory factory = VisualFactory::Get();
3876 Property::Map properties;
3877 Property::Map shader;
3878 const std::string vertexShader = "Foobar";
3879 const std::string fragmentShader = "Foobar";
3880 shader[Dali::Toolkit::Visual::Shader::Property::FRAGMENT_SHADER] = fragmentShader;
3881 shader[Dali::Toolkit::Visual::Shader::Property::VERTEX_SHADER] = vertexShader;
3883 properties[Visual::Property::TYPE] = Visual::IMAGE;
3884 properties[Visual::Property::SHADER] = shader;
3885 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
3887 Visual::Base visual = factory.CreateVisual(properties);
3889 // trigger creation through setting on stage
3890 DummyControl dummy = DummyControl::New(true);
3891 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3892 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
3894 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3895 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3896 application.GetScene().Add(dummy);
3898 application.SendNotification();
3899 application.Render();
3901 // Wait for loading & rasterization
3902 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
3904 Renderer renderer = dummy.GetRendererAt(0);
3905 Shader shader2 = renderer.GetShader();
3906 Property::Value value = shader2.GetProperty(Shader::Property::PROGRAM);
3907 Property::Map* map = value.GetMap();
3908 DALI_TEST_CHECK(map);
3910 Property::Value* fragment = map->Find("fragment"); // fragment key name from shader-impl.cpp
3911 DALI_TEST_EQUALS(fragmentShader, fragment->Get<std::string>(), TEST_LOCATION);
3913 Property::Value* vertex = map->Find("vertex"); // vertex key name from shader-impl.cpp
3914 DALI_TEST_EQUALS(vertexShader, vertex->Get<std::string>(), TEST_LOCATION);
3919 int UtcDaliVisualRoundedCorner(void)
3921 tet_infoline("UtcDaliVisualRoundedCorner");
3923 static std::vector<UniformData> customUniforms =
3925 UniformData("cornerRadius", Property::Type::VECTOR4),
3926 UniformData("cornerRadiusPolicy", Property::Type::FLOAT),
3931 ToolkitTestApplication application;
3932 TestGraphicsController& graphics = application.GetGraphicsController();
3933 graphics.AddCustomUniforms(customUniforms);
3935 VisualFactory factory = VisualFactory::Get();
3936 Property::Map properties;
3937 float cornerRadius = 30.0f;
3939 properties[Visual::Property::TYPE] = Visual::IMAGE;
3940 properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
3941 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
3943 Visual::Base visual = factory.CreateVisual(properties);
3945 // trigger creation through setting on stage
3946 DummyControl dummy = DummyControl::New(true);
3947 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3948 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
3950 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3951 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3952 application.GetScene().Add(dummy);
3954 application.SendNotification();
3955 application.Render();
3957 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
3959 application.SendNotification();
3960 application.Render();
3962 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius)), true, TEST_LOCATION);
3963 // Default corner radius policy is absolute.
3964 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
3969 ToolkitTestApplication application;
3970 TestGraphicsController& graphics = application.GetGraphicsController();
3971 graphics.AddCustomUniforms(customUniforms);
3973 VisualFactory factory = VisualFactory::Get();
3974 Property::Map properties;
3975 float cornerRadius = 30.0f;
3977 properties[Visual::Property::TYPE] = Visual::COLOR;
3978 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
3979 properties["cornerRadius"] = cornerRadius;
3980 properties["cornerRadiusPolicy"] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
3982 Visual::Base visual = factory.CreateVisual(properties);
3984 // trigger creation through setting on stage
3985 DummyControl dummy = DummyControl::New(true);
3986 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
3987 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
3989 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
3990 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
3991 application.GetScene().Add(dummy);
3993 application.SendNotification();
3994 application.Render();
3996 application.SendNotification();
3997 application.Render();
3999 // Currently test with multiple program doesn't work well. will fix another day
4000 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius)), true, TEST_LOCATION);
4001 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4006 ToolkitTestApplication application;
4007 TestGraphicsController& graphics = application.GetGraphicsController();
4008 graphics.AddCustomUniforms(customUniforms);
4010 VisualFactory factory = VisualFactory::Get();
4011 Property::Map properties;
4012 Vector4 cornerRadius(0.5f, 0.5f, 0.5f, 0.3f);
4014 properties[Visual::Property::TYPE] = Visual::COLOR;
4015 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4016 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4017 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
4019 Visual::Base visual = factory.CreateVisual(properties);
4021 // trigger creation through setting on stage
4022 DummyControl dummy = DummyControl::New(true);
4023 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4024 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4026 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4027 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4028 application.GetScene().Add(dummy);
4030 application.SendNotification();
4031 application.Render();
4033 application.SendNotification();
4034 application.Render();
4036 // Currently test with multiple program doesn't work well. will fix another day
4037 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", cornerRadius), true, TEST_LOCATION);
4038 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE), true, TEST_LOCATION);
4041 // color visual 3 - invalid value
4043 ToolkitTestApplication application;
4044 TestGraphicsController& graphics = application.GetGraphicsController();
4045 graphics.AddCustomUniforms(customUniforms);
4047 VisualFactory factory = VisualFactory::Get();
4048 Property::Map properties;
4049 Vector4 cornerRadius(30.0f, 30.0f, 30.0f, 20.0f);
4051 properties[Visual::Property::TYPE] = Visual::COLOR;
4052 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4053 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4054 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = -1; // Set an invalid value
4056 Visual::Base visual = factory.CreateVisual(properties);
4058 // trigger creation through setting on stage
4059 DummyControl dummy = DummyControl::New(true);
4060 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4061 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4063 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4064 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4065 application.GetScene().Add(dummy);
4067 application.SendNotification();
4068 application.Render();
4070 application.SendNotification();
4071 application.Render();
4073 // Currently test with multiple program doesn't work well. will fix another day
4074 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", cornerRadius), true, TEST_LOCATION);
4075 // Default corner radius policy is absolute.
4076 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4081 ToolkitTestApplication application;
4082 TestGraphicsController& graphics = application.GetGraphicsController();
4083 graphics.AddCustomUniforms(customUniforms);
4085 VisualFactory factory = VisualFactory::Get();
4086 Property::Map properties;
4087 float cornerRadius = 30.0f;
4089 properties[Visual::Property::TYPE] = Visual::GRADIENT;
4090 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4091 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4092 properties[GradientVisual::Property::START_POSITION] = Vector2(0.5f, 0.5f);
4093 properties[GradientVisual::Property::END_POSITION] = Vector2(-0.5f, -0.5f);
4094 properties[GradientVisual::Property::UNITS] = GradientVisual::Units::USER_SPACE;
4096 Property::Array stopOffsets;
4097 stopOffsets.PushBack(0.0f);
4098 stopOffsets.PushBack(0.6f);
4099 stopOffsets.PushBack(1.0f);
4100 properties[GradientVisual::Property::STOP_OFFSET] = stopOffsets;
4102 Property::Array stopColors;
4103 stopColors.PushBack(Color::RED);
4104 stopColors.PushBack(Color::YELLOW);
4105 stopColors.PushBack(Color::GREEN);
4106 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
4108 Visual::Base visual = factory.CreateVisual(properties);
4110 // trigger creation through setting on stage
4111 DummyControl dummy = DummyControl::New(true);
4112 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4113 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4115 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4116 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4117 application.GetScene().Add(dummy);
4119 application.SendNotification();
4120 application.Render();
4122 application.SendNotification();
4123 application.Render();
4125 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius)), true, TEST_LOCATION);
4126 // Default corner radius policy is absolute.
4127 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4130 // animated image visual
4132 ToolkitTestApplication application;
4133 TestGraphicsController& graphics = application.GetGraphicsController();
4134 graphics.AddCustomUniforms(customUniforms);
4136 VisualFactory factory = VisualFactory::Get();
4137 Property::Map properties;
4138 Vector4 cornerRadius(24.0f, 23.0f, 22.0f, 21.0f);
4140 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
4141 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
4142 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius.x + 10.0f; // Dummy Input
4143 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4144 properties["cornerRadiusPolicy"] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
4146 Visual::Base visual = factory.CreateVisual(properties);
4148 // trigger creation through setting on stage
4149 DummyControl dummy = DummyControl::New(true);
4150 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4151 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4153 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4154 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4155 application.GetScene().Add(dummy);
4157 application.SendNotification();
4158 application.Render();
4160 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
4162 application.SendNotification();
4163 application.Render();
4165 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", cornerRadius), true, TEST_LOCATION);
4166 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4169 // vector image visual
4171 ToolkitTestApplication application;
4172 TestGraphicsController& graphics = application.GetGraphicsController();
4173 graphics.AddCustomUniforms(customUniforms);
4175 VisualFactory factory = VisualFactory::Get();
4176 Property::Map properties;
4177 Vector4 cornerRadius(27.0f, 72.0f, 11.0f, 500.5f);
4179 properties[Visual::Property::TYPE] = Visual::SVG;
4180 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
4181 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4183 Visual::Base visual = factory.CreateVisual(properties);
4185 // trigger creation through setting on stage
4186 DummyControl dummy = DummyControl::New(true);
4187 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4188 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4190 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4191 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4192 application.GetScene().Add(dummy);
4194 application.SendNotification();
4195 application.Render();
4197 // Wait for loading & rasterization
4198 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
4200 application.SendNotification();
4201 application.Render();
4203 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", cornerRadius), true, TEST_LOCATION);
4204 // Default corner radius policy is absolute.
4205 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4208 // animated vector image visual
4210 ToolkitTestApplication application;
4211 TestGraphicsController& graphics = application.GetGraphicsController();
4212 graphics.AddCustomUniforms(customUniforms);
4214 VisualFactory factory = VisualFactory::Get();
4215 Property::Map properties;
4216 float cornerRadius = 1.3f;
4218 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
4219 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
4220 properties["cornerRadius"] = Vector4(1.0f, 100.0f, 10.0f, 0.1f); // Dummy Input
4221 properties["cornerRadius"] = cornerRadius;
4222 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
4223 properties["synchronousLoading"] = false;
4225 Visual::Base visual = factory.CreateVisual(properties);
4227 // trigger creation through setting on stage
4228 DummyControl dummy = DummyControl::New(true);
4229 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4230 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4232 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4233 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4234 application.GetScene().Add(dummy);
4236 application.SendNotification();
4237 application.Render();
4239 // Trigger count is 2 - load & render a frame
4240 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
4242 application.SendNotification();
4243 application.Render();
4245 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius)), true, TEST_LOCATION);
4246 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE), true, TEST_LOCATION);
4252 int UtcDaliVisualBorderline(void)
4254 tet_infoline("UtcDaliVisualBorderline");
4256 static std::vector<UniformData> customUniforms =
4258 UniformData("cornerRadius", Property::Type::VECTOR4),
4259 UniformData("cornerRadiusPolicy", Property::Type::FLOAT),
4260 UniformData("borderlineWidth", Property::Type::FLOAT),
4261 UniformData("borderlineColor", Property::Type::VECTOR4),
4262 UniformData("borderlineOffset", Property::Type::FLOAT),
4267 ToolkitTestApplication application;
4268 TestGraphicsController& graphics = application.GetGraphicsController();
4269 graphics.AddCustomUniforms(customUniforms);
4271 VisualFactory factory = VisualFactory::Get();
4272 Property::Map properties;
4273 float cornerRadius = 5.0f;
4274 float borderlineWidth = 30.0f;
4275 Vector4 borderlineColor(1.0f, 0.0f, 0.0f, 1.0f);
4276 float borderlineOffset = 1.0f;
4278 properties[Visual::Property::TYPE] = Visual::IMAGE;
4279 properties[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
4280 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4281 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4282 properties[DevelVisual::Property::BORDERLINE_COLOR] = borderlineColor;
4283 properties[DevelVisual::Property::BORDERLINE_OFFSET] = borderlineOffset;
4285 Visual::Base visual = factory.CreateVisual(properties);
4287 // trigger creation through setting on stage
4288 DummyControl dummy = DummyControl::New(true);
4289 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4290 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4292 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4293 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4294 application.GetScene().Add(dummy);
4296 application.SendNotification();
4297 application.Render();
4299 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
4301 application.SendNotification();
4302 application.Render();
4304 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius)), true, TEST_LOCATION);
4305 // Default corner radius policy is absolute.
4306 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4307 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4308 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", borderlineColor), true, TEST_LOCATION);
4309 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", borderlineOffset), true, TEST_LOCATION);
4314 ToolkitTestApplication application;
4315 TestGraphicsController& graphics = application.GetGraphicsController();
4316 graphics.AddCustomUniforms(customUniforms);
4318 VisualFactory factory = VisualFactory::Get();
4319 Property::Map properties;
4320 Vector4 cornerRadius(23.0f, 2.0f, 3.0f, 2.3f);
4321 float borderlineWidth = 30.0f;
4322 Vector4 borderlineColor(0.5f, 0.4f, 0.3f, 0.2f);
4323 float borderlineOffset = -0.4f;
4325 properties[Visual::Property::TYPE] = Visual::COLOR;
4326 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4327 properties["cornerRadius"] = cornerRadius;
4328 properties["borderlineWidth"] = borderlineWidth;
4329 properties["borderlineColor"] = borderlineColor;
4330 properties["borderlineOffset"] = borderlineOffset;
4332 Visual::Base visual = factory.CreateVisual(properties);
4334 // trigger creation through setting on stage
4335 DummyControl dummy = DummyControl::New(true);
4336 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4337 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4339 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4340 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4341 application.GetScene().Add(dummy);
4343 application.SendNotification();
4344 application.Render();
4346 application.SendNotification();
4347 application.Render();
4349 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", cornerRadius), true, TEST_LOCATION);
4350 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4351 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", borderlineColor), true, TEST_LOCATION);
4352 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", borderlineOffset), true, TEST_LOCATION);
4355 // color visual 2, default color, default offset
4357 ToolkitTestApplication application;
4358 TestGraphicsController& graphics = application.GetGraphicsController();
4359 graphics.AddCustomUniforms(customUniforms);
4361 VisualFactory factory = VisualFactory::Get();
4362 Property::Map properties;
4363 float borderlineWidth = 30.0f;
4365 properties[Visual::Property::TYPE] = Visual::COLOR;
4366 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4367 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4369 Visual::Base visual = factory.CreateVisual(properties);
4371 // trigger creation through setting on stage
4372 DummyControl dummy = DummyControl::New(true);
4373 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4374 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4376 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4377 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4378 application.GetScene().Add(dummy);
4380 application.SendNotification();
4381 application.Render();
4383 application.SendNotification();
4384 application.Render();
4386 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4387 // Default borderline color is BLACK.
4388 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", Color::BLACK), true, TEST_LOCATION);
4389 // Default borderline offset is 0.0f.
4390 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", 0.0f), true, TEST_LOCATION);
4393 // color visual 3, offset not [-1.0 ~ 1.0], but uniform value is same anyway
4395 ToolkitTestApplication application;
4396 TestGraphicsController& graphics = application.GetGraphicsController();
4397 graphics.AddCustomUniforms(customUniforms);
4399 VisualFactory factory = VisualFactory::Get();
4400 Property::Map properties;
4401 float borderlineWidth = 30.0f;
4402 Vector4 borderlineColor(0.5f, 0.4f, 0.3f, 0.2f);
4403 float borderlineOffset = 37.4f;
4405 properties[Visual::Property::TYPE] = Visual::COLOR;
4406 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4407 properties["borderlineWidth"] = borderlineWidth;
4408 properties["borderlineColor"] = borderlineColor;
4409 properties["borderlineOffset"] = borderlineOffset;
4411 Visual::Base visual = factory.CreateVisual(properties);
4413 // trigger creation through setting on stage
4414 DummyControl dummy = DummyControl::New(true);
4415 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4416 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4418 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4419 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4420 application.GetScene().Add(dummy);
4422 application.SendNotification();
4423 application.Render();
4425 application.SendNotification();
4426 application.Render();
4428 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4429 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", borderlineColor), true, TEST_LOCATION);
4430 // NOTE : borderlineOffset will clamp in fragment shader. not visual itself
4431 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", borderlineOffset), true, TEST_LOCATION);
4436 ToolkitTestApplication application;
4437 TestGraphicsController& graphics = application.GetGraphicsController();
4438 graphics.AddCustomUniforms(customUniforms);
4440 VisualFactory factory = VisualFactory::Get();
4441 Property::Map properties;
4442 float borderlineWidth = 30.0f;
4443 float cornerRadius = 70.0f;
4445 properties[Visual::Property::TYPE] = Visual::GRADIENT;
4446 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4447 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4448 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4449 properties[GradientVisual::Property::START_POSITION] = Vector2(0.5f, 0.5f);
4450 properties[GradientVisual::Property::END_POSITION] = Vector2(-0.5f, -0.5f);
4451 properties[GradientVisual::Property::UNITS] = GradientVisual::Units::USER_SPACE;
4453 Property::Array stopOffsets;
4454 stopOffsets.PushBack(0.0f);
4455 stopOffsets.PushBack(0.6f);
4456 stopOffsets.PushBack(1.0f);
4457 properties[GradientVisual::Property::STOP_OFFSET] = stopOffsets;
4459 Property::Array stopColors;
4460 stopColors.PushBack(Color::RED);
4461 stopColors.PushBack(Color::YELLOW);
4462 stopColors.PushBack(Color::GREEN);
4463 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
4465 Visual::Base visual = factory.CreateVisual(properties);
4467 // trigger creation through setting on stage
4468 DummyControl dummy = DummyControl::New(true);
4469 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4470 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4472 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4473 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4474 application.GetScene().Add(dummy);
4476 application.SendNotification();
4477 application.Render();
4479 application.SendNotification();
4480 application.Render();
4482 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", Vector4(cornerRadius, cornerRadius, cornerRadius, cornerRadius)), true, TEST_LOCATION);
4483 // Default corner radius policy is absolute.
4484 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4485 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4486 // Default borderline color is BLACK.
4487 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", Color::BLACK), true, TEST_LOCATION);
4488 // Default borderline offset is 0.0f.
4489 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", 0.0f), true, TEST_LOCATION);
4492 // animated image visual
4494 ToolkitTestApplication application;
4495 TestGraphicsController& graphics = application.GetGraphicsController();
4496 graphics.AddCustomUniforms(customUniforms);
4498 VisualFactory factory = VisualFactory::Get();
4499 Property::Map properties;
4500 float borderlineWidth = 24.0f;
4501 float borderlineOffset = -1.0f;
4503 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
4504 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
4505 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth + 10.0f; // Dummy Input
4506 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4507 properties["borderlineOffset"] = borderlineOffset;
4509 Visual::Base visual = factory.CreateVisual(properties);
4511 // trigger creation through setting on stage
4512 DummyControl dummy = DummyControl::New(true);
4513 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4514 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4516 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4517 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4518 application.GetScene().Add(dummy);
4520 application.SendNotification();
4521 application.Render();
4523 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
4525 application.SendNotification();
4526 application.Render();
4528 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4529 // Default borderline color is BLACK.
4530 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", Color::BLACK), true, TEST_LOCATION);
4531 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", borderlineOffset), true, TEST_LOCATION);
4534 // vector image visual
4536 ToolkitTestApplication application;
4537 TestGraphicsController& graphics = application.GetGraphicsController();
4538 graphics.AddCustomUniforms(customUniforms);
4540 VisualFactory factory = VisualFactory::Get();
4541 Property::Map properties;
4542 Vector4 cornerRadius(54.0f, 43.0f, 32.0f, 21.0f);
4543 float borderlineWidth = 27.0f;
4544 Vector4 borderlineColor(0.5f, 0.5f, 0.5f, 0.0f);
4546 properties[Visual::Property::TYPE] = Visual::SVG;
4547 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
4548 properties[DevelVisual::Property::CORNER_RADIUS] = cornerRadius;
4549 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4550 properties[DevelVisual::Property::BORDERLINE_COLOR] = borderlineColor;
4552 Visual::Base visual = factory.CreateVisual(properties);
4554 // trigger creation through setting on stage
4555 DummyControl dummy = DummyControl::New(true);
4556 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4557 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4559 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4560 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4561 application.GetScene().Add(dummy);
4563 application.SendNotification();
4564 application.Render();
4566 // Wait for loading & rasterization
4567 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
4569 application.SendNotification();
4570 application.Render();
4572 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", cornerRadius), true, TEST_LOCATION);
4573 // Default corner radius policy is absolute.
4574 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::ABSOLUTE), true, TEST_LOCATION);
4575 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4576 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", borderlineColor), true, TEST_LOCATION);
4577 // Default borderline offset is 0.0.
4578 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", 0.0f), true, TEST_LOCATION);
4581 // animated vector image visual
4583 ToolkitTestApplication application;
4584 TestGraphicsController& graphics = application.GetGraphicsController();
4585 graphics.AddCustomUniforms(customUniforms);
4587 VisualFactory factory = VisualFactory::Get();
4588 Property::Map properties;
4589 Vector4 cornerRadius(1.3f, 0.0f, 0.4f, 0.2f);
4590 float borderlineWidth = 13.0f;
4591 Vector4 borderlineColor(0.3f, 0.3f, 0.3f, 1.0f);
4592 float borderlineOffset = 13.0f;
4594 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
4595 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
4596 properties["cornerRadius"] = cornerRadius;
4597 properties[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
4598 properties[DevelVisual::Property::BORDERLINE_WIDTH] = borderlineWidth;
4599 properties["borderlineColor"] = borderlineColor;
4600 properties[DevelVisual::Property::BORDERLINE_OFFSET] = borderlineOffset;
4601 properties[ImageVisual::Property::SYNCHRONOUS_LOADING] = false;
4603 Visual::Base visual = factory.CreateVisual(properties);
4605 // trigger creation through setting on stage
4606 DummyControl dummy = DummyControl::New(true);
4607 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4608 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4610 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4611 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4612 application.GetScene().Add(dummy);
4614 application.SendNotification();
4615 application.Render();
4617 // Trigger count is 2 - load & render a frame
4618 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
4620 application.SendNotification();
4621 application.Render();
4623 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", cornerRadius), true, TEST_LOCATION);
4624 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("cornerRadiusPolicy", Toolkit::Visual::Transform::Policy::RELATIVE), true, TEST_LOCATION);
4625 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", borderlineWidth), true, TEST_LOCATION);
4626 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", borderlineColor), true, TEST_LOCATION);
4627 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", borderlineOffset), true, TEST_LOCATION);
4633 int UtcDaliVisualBorderlineBlendModeTest(void)
4635 ToolkitTestApplication application;
4636 tet_infoline("UtcDaliVisualBorderlineBlendModeTest");
4637 VisualFactory factory = VisualFactory::Get();
4639 // Case 1 : Test which doesn't support borderline feature.
4641 tet_printf("Test Unsupported visual type\n");
4642 Property::Map propertyMap;
4643 propertyMap.Insert(Visual::Property::TYPE, Visual::BORDER);
4644 propertyMap.Insert(BorderVisual::Property::COLOR, Color::BLUE);
4645 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4646 Visual::Base borderVisual = factory.CreateVisual(propertyMap);
4648 DummyControl actor = DummyControl::New(true);
4649 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4650 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, borderVisual);
4651 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
4652 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4653 application.GetScene().Add(actor);
4655 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4657 Renderer renderer = actor.GetRendererAt(0);
4659 Property::Value blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
4660 // Visual::BORDER doesn't support BORDERLINE. BlendMode is AUTO.
4661 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION);
4663 application.GetScene().Remove(actor);
4666 // Case 2 : Test which support borderline feature.
4668 tet_printf("Test normal case\n");
4669 Property::Map propertyMap;
4670 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4671 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
4672 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4673 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
4675 DummyControl actor = DummyControl::New(true);
4676 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4677 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
4678 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
4679 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4680 application.GetScene().Add(actor);
4682 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4684 Renderer renderer = actor.GetRendererAt(0);
4686 Property::Value blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
4687 // Visual::COLOR support BORDERLINE. BlendMode is ON_WITHOUT_CULL.
4688 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION);
4690 application.GetScene().Remove(actor);
4693 // Case 3 : Test which animated borderline.
4695 tet_printf("Test borderline animate case\n");
4696 Property::Map propertyMap;
4697 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4698 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
4699 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
4701 DummyControl actor = DummyControl::New(true);
4702 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4703 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
4704 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
4705 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4706 application.GetScene().Add(actor);
4708 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4710 Renderer renderer = actor.GetRendererAt(0);
4712 Property::Value blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
4713 // BlendMode is AUTO.
4714 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::AUTO, TEST_LOCATION);
4716 Animation animation = Animation::New(0.1f);
4717 animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), 1.0f);
4720 application.SendNotification();
4721 application.Render();
4722 application.Render(101u); // End of animation
4724 blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
4725 // BlendMode is ON_WITHOUT_CULL.
4726 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION);
4728 Animation revanimation = Animation::New(0.1f);
4729 revanimation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), 0.0f);
4730 revanimation.Play();
4732 application.SendNotification();
4733 application.Render();
4734 application.Render(101u); // End of animation
4736 blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
4737 // BlendMode is still ON_WITHOUT_CULL.
4738 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION);
4740 application.GetScene().Remove(actor);
4743 // Case 4 : Test which animated corner radius occur.
4745 tet_printf("Test borderline animate case\n");
4746 Property::Map propertyMap;
4747 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4748 propertyMap.Insert(ColorVisual::Property::MIX_COLOR, Color::BLUE);
4749 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4750 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
4752 DummyControl actor = DummyControl::New(true);
4753 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4754 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
4755 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
4756 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4757 application.GetScene().Add(actor);
4759 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4761 Renderer renderer = actor.GetRendererAt(0);
4763 Property::Value blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
4764 // BlendMode is ON_WITHOUT_CULL.
4765 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION);
4767 Animation animation = Animation::New(0.1f);
4768 animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), Vector4(1.0f, 1.0f, 1.0f, 1.0f));
4771 application.SendNotification();
4772 application.Render();
4773 application.Render(101u); // End of animation
4775 blendModeValue = renderer.GetProperty(Renderer::Property::BLEND_MODE);
4776 // BlendMode is ON_WITHOUT_CULL.
4777 DALI_TEST_EQUALS(blendModeValue.Get<int>(), (int)BlendMode::ON_WITHOUT_CULL, TEST_LOCATION);
4779 application.GetScene().Remove(actor);
4785 int UtcDaliVisualBorderlineColorAnimateTest(void)
4787 ToolkitTestApplication application;
4788 tet_infoline("UtcDaliVisualBorderlineColorAnimateTest color");
4790 TestGraphicsController& graphics = application.GetGraphicsController();
4791 static std::vector<UniformData> customUniforms =
4793 UniformData("mixColor", Property::Type::VECTOR3),
4794 UniformData("cornerRadius", Property::Type::VECTOR4),
4795 UniformData("cornerRadiusPolicy", Property::Type::FLOAT),
4796 UniformData("borderlineWidth", Property::Type::FLOAT),
4797 UniformData("borderlineColor", Property::Type::VECTOR4),
4798 UniformData("borderlineOffset", Property::Type::FLOAT),
4800 graphics.AddCustomUniforms(customUniforms);
4803 const Vector3 INITIAL_MIX_COLOR(1.0f, 0.0f, 1.0f);
4804 const float INITIAL_MIX_OPACITY(0.5f);
4805 const Vector4 INITIAL_BORDERLINE_COLOR(0.0f, 1.0f, 0.0f, 1.0f);
4806 const float INITIAL_ACTOR_OPACITY(1.0f);
4807 const Vector3 TARGET_MIX_COLOR(1.0f, 0.0f, 0.0f);
4808 const float TARGET_MIX_OPACITY(0.8f);
4809 const Vector4 TARGET_BORDERLINE_COLOR(1.0f, 0.0f, 1.0f, 0.2f);
4810 const float TARGET_ACTOR_OPACITY(0.5f);
4812 VisualFactory factory = VisualFactory::Get();
4813 Property::Map propertyMap;
4814 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
4815 propertyMap.Insert(Visual::Property::MIX_COLOR, INITIAL_MIX_COLOR);
4816 propertyMap.Insert(Visual::Property::OPACITY, INITIAL_MIX_OPACITY);
4817 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 1.0f);
4818 propertyMap.Insert(DevelVisual::Property::BORDERLINE_COLOR, INITIAL_BORDERLINE_COLOR);
4819 Visual::Base visual = factory.CreateVisual(propertyMap);
4821 DummyControl actor = DummyControl::New(true);
4822 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(actor.GetImplementation());
4823 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4824 actor.SetProperty(Actor::Property::SIZE, Vector2(2000.f, 2000.f));
4825 actor.SetProperty(Actor::Property::OPACITY, INITIAL_ACTOR_OPACITY);
4826 actor.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4827 application.GetScene().Add(actor);
4829 DALI_TEST_EQUALS(actor.GetRendererCount(), 1u, TEST_LOCATION);
4831 Animation animation = Animation::New(4.0f);
4832 animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, Visual::Property::MIX_COLOR), TARGET_MIX_COLOR);
4833 animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), TARGET_MIX_OPACITY);
4834 animation.AnimateTo(DevelControl::GetVisualProperty(actor, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), TARGET_BORDERLINE_COLOR);
4835 animation.AnimateTo(Property(actor, Actor::Property::OPACITY), TARGET_ACTOR_OPACITY);
4838 TestGlAbstraction& glAbstraction = application.GetGlAbstraction();
4840 application.SendNotification();
4841 application.Render(0);
4842 application.Render(2000u); // halfway point
4843 application.SendNotification();
4845 Vector3 halfwayMixColor = (INITIAL_MIX_COLOR + TARGET_MIX_COLOR) * 0.5f;
4846 float halfwayMixOpacity = (INITIAL_MIX_OPACITY + TARGET_MIX_OPACITY) * 0.5f;
4847 Vector4 halfwayBorderlineColor = (INITIAL_BORDERLINE_COLOR + TARGET_BORDERLINE_COLOR) * 0.5f;
4848 float halfwayActorOpacity = (INITIAL_ACTOR_OPACITY + TARGET_ACTOR_OPACITY) * 0.5f;
4849 halfwayMixOpacity *= halfwayActorOpacity;
4850 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector3>("mixColor", halfwayMixColor), true, TEST_LOCATION);
4851 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector4>("uColor", Vector4(1.0f, 1.0f, 1.0f, halfwayMixOpacity)), true, TEST_LOCATION);
4852 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector4>("uActorColor", Vector4(1.0f, 1.0f, 1.0f, halfwayActorOpacity)), true, TEST_LOCATION);
4853 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector4>("borderlineColor", halfwayBorderlineColor), true, TEST_LOCATION);
4855 application.Render(2001u); // go past end
4856 application.SendNotification(); // Trigger signals
4858 DALI_TEST_EQUALS(actor.GetCurrentProperty<Vector4>(Actor::Property::COLOR), Vector4(1.0f, 1.0f, 1.0f, TARGET_ACTOR_OPACITY), TEST_LOCATION);
4859 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector3>("mixColor", TARGET_MIX_COLOR), true, TEST_LOCATION);
4860 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector4>("uColor", Vector4(1.0f, 1.0f, 1.0f, TARGET_MIX_OPACITY * TARGET_ACTOR_OPACITY)), true, TEST_LOCATION);
4861 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector4>("uActorColor", Vector4(1.0f, 1.0f, 1.0f, TARGET_ACTOR_OPACITY)), true, TEST_LOCATION);
4862 DALI_TEST_EQUALS(glAbstraction.CheckUniformValue<Vector4>("borderlineColor", TARGET_BORDERLINE_COLOR), true, TEST_LOCATION);
4870 int UtcDaliColorVisualBlurRadius(void)
4872 ToolkitTestApplication application;
4873 tet_infoline("UtcDaliColorVisualBlurRadius");
4875 static std::vector<UniformData> customUniforms =
4877 UniformData("blurRadius", Property::Type::FLOAT),
4880 TestGraphicsController& graphics = application.GetGraphicsController();
4881 graphics.AddCustomUniforms(customUniforms);
4883 VisualFactory factory = VisualFactory::Get();
4884 Property::Map properties;
4885 float blurRadius = 20.0f;
4887 properties[Visual::Property::TYPE] = Visual::COLOR;
4888 properties[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
4889 properties["blurRadius"] = blurRadius;
4891 Visual::Base visual = factory.CreateVisual(properties);
4893 // trigger creation through setting on stage
4894 DummyControl dummy = DummyControl::New(true);
4895 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummy.GetImplementation());
4896 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, visual);
4898 dummy.SetProperty(Actor::Property::SIZE, Vector2(200.f, 200.f));
4899 dummy.SetProperty(Actor::Property::PARENT_ORIGIN, ParentOrigin::CENTER);
4900 application.GetScene().Add(dummy);
4902 application.SendNotification();
4903 application.Render();
4905 application.SendNotification();
4906 application.Render();
4908 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("blurRadius", blurRadius), true, TEST_LOCATION);
4913 int UtcDaliVisualGetType(void)
4915 ToolkitTestApplication application;
4916 tet_infoline("UtcDaliVisualGetType");
4918 VisualFactory factory = VisualFactory::Get();
4921 Property::Map properties;
4922 properties[Visual::Property::TYPE] = Visual::BORDER;
4923 Visual::Base visual = factory.CreateVisual(properties);
4925 DALI_TEST_CHECK(visual.GetType() == Visual::BORDER);
4929 Property::Map properties;
4930 properties[Visual::Property::TYPE] = Visual::COLOR;
4931 Visual::Base visual = factory.CreateVisual(properties);
4933 DALI_TEST_CHECK(visual.GetType() == Visual::COLOR);
4937 Property::Map properties;
4938 properties[Visual::Property::TYPE] = Visual::GRADIENT;
4939 properties[GradientVisual::Property::START_POSITION] = Vector2(-1.f, -1.f);
4940 properties[GradientVisual::Property::END_POSITION] = Vector2(1.f, 1.f);
4941 properties[GradientVisual::Property::STOP_OFFSET] = Vector2(0.f, 1.f);
4942 // propertyMap.Insert( GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT) ;
4943 Property::Array stopColors;
4944 stopColors.PushBack(Color::RED);
4945 stopColors.PushBack(Color::GREEN);
4946 properties[GradientVisual::Property::STOP_COLOR] = stopColors;
4947 Visual::Base visual = factory.CreateVisual(properties);
4949 DALI_TEST_CHECK(visual.GetType() == Visual::GRADIENT);
4953 Property::Map properties;
4954 properties[Visual::Property::TYPE] = Visual::IMAGE;
4955 properties.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
4956 Visual::Base visual = factory.CreateVisual(properties);
4958 DALI_TEST_CHECK(visual.GetType() == Visual::IMAGE);
4962 Property::Map properties;
4963 properties[Visual::Property::TYPE] = Visual::MESH;
4964 Visual::Base visual = factory.CreateVisual(properties);
4966 DALI_TEST_CHECK(visual.GetType() == Visual::MESH);
4970 Property::Map properties;
4971 properties[Visual::Property::TYPE] = Visual::PRIMITIVE;
4972 properties[PrimitiveVisual::Property::SHAPE] = PrimitiveVisual::Shape::CUBE;
4973 Visual::Base visual = factory.CreateVisual(properties);
4975 DALI_TEST_CHECK(visual.GetType() == Visual::PRIMITIVE);
4979 Property::Map properties;
4980 properties[Visual::Property::TYPE] = Visual::WIREFRAME;
4981 Visual::Base visual = factory.CreateVisual(properties);
4983 DALI_TEST_CHECK(visual.GetType() == Visual::WIREFRAME);
4987 Property::Map properties;
4988 properties[Visual::Property::TYPE] = Visual::TEXT;
4989 Visual::Base visual = factory.CreateVisual(properties);
4991 DALI_TEST_CHECK(visual.GetType() == Visual::TEXT);
4995 Property::Map properties;
4996 properties[Visual::Property::TYPE] = Visual::N_PATCH;
4997 properties[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
4998 Visual::Base visual = factory.CreateVisual(properties);
5000 DALI_TEST_CHECK(visual.GetType() == Visual::N_PATCH);
5004 Property::Map properties;
5005 properties[Visual::Property::TYPE] = Visual::SVG;
5006 properties[ImageVisual::Property::URL] = TEST_SVG_FILE_NAME;
5007 Visual::Base visual = factory.CreateVisual(properties);
5009 DALI_TEST_CHECK(visual.GetType() == Visual::SVG);
5013 Property::Map properties;
5014 properties[Visual::Property::TYPE] = Visual::ANIMATED_IMAGE;
5015 properties[ImageVisual::Property::URL] = TEST_GIF_FILE_NAME;
5016 Visual::Base visual = factory.CreateVisual(properties);
5018 DALI_TEST_CHECK(visual.GetType() == Visual::ANIMATED_IMAGE);
5022 Property::Map properties;
5023 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_GRADIENT;
5024 Visual::Base visual = factory.CreateVisual(properties);
5026 DALI_TEST_CHECK(visual.GetType() == static_cast<Visual::Type>(DevelVisual::ANIMATED_GRADIENT));
5030 Property::Map properties;
5031 properties[Visual::Property::TYPE] = DevelVisual::ANIMATED_VECTOR_IMAGE;
5032 properties[ImageVisual::Property::URL] = TEST_VECTOR_IMAGE_FILE_NAME;
5033 Visual::Base visual = factory.CreateVisual(properties);
5035 DALI_TEST_CHECK(visual.GetType() == static_cast<Visual::Type>(DevelVisual::ANIMATED_VECTOR_IMAGE));
5039 Property::Map properties;
5040 properties[Visual::Property::TYPE] = DevelVisual::ARC;
5041 Visual::Base visual = factory.CreateVisual(properties);
5043 DALI_TEST_CHECK(visual.GetType() == static_cast<Visual::Type>(DevelVisual::ARC));
5049 int UtcDaliVisualGetVisualProperty01(void)
5051 ToolkitTestApplication application;
5052 tet_infoline("UtcDaliVisualGetVisualProperty01: Test animatable property, Visual::Base, ColorVisual");
5054 static std::vector<UniformData> customUniforms =
5056 UniformData("mixColor", Property::Type::VECTOR3),
5057 UniformData("offset", Property::Type::VECTOR2),
5058 UniformData("size", Property::Type::VECTOR2),
5059 UniformData("cornerRadius", Property::Type::VECTOR4),
5060 UniformData("blurRadius", Property::Type::FLOAT),
5061 UniformData("borderlineWidth", Property::Type::FLOAT),
5062 UniformData("borderlineColor", Property::Type::VECTOR4),
5063 UniformData("borderlineOffset", Property::Type::FLOAT)};
5065 TestGraphicsController& graphics = application.GetGraphicsController();
5066 graphics.AddCustomUniforms(customUniforms);
5068 VisualFactory factory = VisualFactory::Get();
5069 Property::Map propertyMap;
5070 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
5071 propertyMap.Insert(Visual::Property::MIX_COLOR, Color::BLUE);
5072 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS, Vector4(10.0f, 0.0f, 2.0f, 4.0f));
5073 propertyMap.Insert(DevelVisual::Property::CORNER_RADIUS_POLICY, Toolkit::Visual::Transform::Policy::RELATIVE);
5074 propertyMap.Insert(DevelColorVisual::Property::BLUR_RADIUS, 20.0f);
5075 propertyMap.Insert(DevelVisual::Property::BORDERLINE_WIDTH, 20.0f);
5076 propertyMap.Insert(DevelVisual::Property::BORDERLINE_COLOR, Color::RED);
5077 propertyMap.Insert(DevelVisual::Property::BORDERLINE_OFFSET, 1.0f);
5078 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
5080 DummyControl dummyControl = DummyControl::New(true);
5081 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5082 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
5083 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5084 application.GetScene().Add(dummyControl);
5086 application.SendNotification();
5087 application.Render();
5089 Vector3 targetColor(1.0f, 1.0f, 1.0f);
5090 Vector2 targetOffset(0.05f, 0.05f);
5091 Vector2 targetSize(1.1f, 1.1f);
5092 float targetOpacity = 0.5f;
5093 Vector4 targetCornerRadius(0.0f, 0.0f, 0.0f, 0.0f);
5094 float targetBlurRadius = 10.0f;
5095 float targetBorderlineWidth = 25.0f;
5096 Vector4 targetBorderlineColor(1.0f, 1.0f, 1.0f, 1.0f);
5097 float targetBorderlineOffset = -1.0f;
5099 Animation animation = Animation::New(1.0f);
5100 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::MIX_COLOR), targetColor);
5101 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5102 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Transform::Property::OFFSET), targetOffset);
5103 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Transform::Property::SIZE), targetSize);
5104 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5105 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelColorVisual::Property::BLUR_RADIUS), targetBlurRadius);
5106 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5107 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5108 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5111 application.SendNotification();
5112 application.Render();
5113 application.Render(1001u); // End of animation
5115 Property::Map resultMap;
5116 colorVisual.CreatePropertyMap(resultMap);
5118 // Test property values: they should be updated
5119 Property::Value* colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
5120 DALI_TEST_CHECK(colorValue);
5121 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetColor.r, targetColor.g, targetColor.b, targetOpacity), TEST_LOCATION);
5123 Property::Value* transformValue = resultMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
5124 Dali::Property::Map* transformMap = transformValue->GetMap();
5125 DALI_TEST_CHECK(transformMap);
5127 Property::Value* offsetValue = transformMap->Find(Toolkit::Visual::Transform::Property::OFFSET);
5128 DALI_TEST_CHECK(offsetValue);
5129 DALI_TEST_EQUALS(offsetValue->Get<Vector2>(), targetOffset, TEST_LOCATION);
5131 Property::Value* sizeValue = transformMap->Find(Toolkit::Visual::Transform::Property::SIZE);
5132 DALI_TEST_CHECK(sizeValue);
5133 DALI_TEST_EQUALS(sizeValue->Get<Vector2>(), targetSize, TEST_LOCATION);
5135 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5136 DALI_TEST_CHECK(cornerRadiusValue);
5137 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5139 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
5140 DALI_TEST_CHECK(blurRadiusValue);
5141 DALI_TEST_EQUALS(blurRadiusValue->Get<float>(), targetBlurRadius, TEST_LOCATION);
5143 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5144 DALI_TEST_CHECK(borderlineWidthValue);
5145 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5147 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5148 DALI_TEST_CHECK(borderlineColorValue);
5149 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
5151 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5152 DALI_TEST_CHECK(borderlineOffsetValue);
5153 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
5155 // Test uniform values
5156 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", targetColor), true, TEST_LOCATION);
5157 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("offset", targetOffset), true, TEST_LOCATION);
5158 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("size", targetSize), true, TEST_LOCATION);
5159 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5160 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("blurRadius", targetBlurRadius), true, TEST_LOCATION);
5161 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5162 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5163 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5165 // Test unregistered visual
5166 Property property3 = DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL2, Visual::Property::MIX_COLOR);
5167 DALI_TEST_CHECK(!property3.object);
5168 DALI_TEST_CHECK(property3.propertyIndex == Property::INVALID_INDEX);
5173 int UtcDaliVisualGetVisualProperty02(void)
5175 ToolkitTestApplication application;
5176 tet_infoline("UtcDaliVisualGetVisualProperty02: Test animatable property, ColorVisual");
5178 static std::vector<UniformData> customUniforms =
5180 UniformData("mixColor", Property::Type::VECTOR3),
5181 UniformData("offset", Property::Type::VECTOR2),
5182 UniformData("size", Property::Type::VECTOR2),
5183 UniformData("cornerRadius", Property::Type::VECTOR4),
5184 UniformData("borderlineWidth", Property::Type::FLOAT),
5185 UniformData("borderlineCOlor", Property::Type::VECTOR4),
5186 UniformData("borderlineOffset", Property::Type::FLOAT),
5187 UniformData("blurRadius", Property::Type::FLOAT),
5190 TestGraphicsController& graphics = application.GetGraphicsController();
5191 graphics.AddCustomUniforms(customUniforms);
5193 VisualFactory factory = VisualFactory::Get();
5194 Property::Map propertyMap;
5195 propertyMap.Insert(Visual::Property::TYPE, Visual::COLOR);
5196 Visual::Base colorVisual = factory.CreateVisual(propertyMap);
5198 DummyControl dummyControl = DummyControl::New(true);
5199 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5200 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, colorVisual);
5201 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5202 application.GetScene().Add(dummyControl);
5204 application.SendNotification();
5205 application.Render();
5207 Vector3 targetColor(1.0f, 1.0f, 1.0f);
5208 Vector2 targetOffset(0.05f, 0.05f);
5209 Vector2 targetSize(1.1f, 1.1f);
5210 float targetOpacity = 0.5f;
5211 Vector4 targetCornerRadius(20.0f, 0.0f, 20.0f, 0.0f);
5212 float targetBorderlineWidth = 77.7f;
5213 Vector4 targetBorderlineColor(0.4f, 0.2f, 0.3f, 0.9f);
5214 float targetBorderlineOffset = 1.0f;
5215 float targetBlurRadius = 10.0f;
5217 // Should work when the properties are not set before
5218 Animation animation = Animation::New(1.0f);
5219 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "mixColor"), targetColor);
5220 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "opacity"), targetOpacity);
5221 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "offset"), targetOffset);
5222 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "size"), targetSize);
5223 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "cornerRadius"), targetCornerRadius);
5224 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "borderlineWidth"), targetBorderlineWidth);
5225 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "borderlineColor"), targetBorderlineColor);
5226 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "borderlineOffset"), targetBorderlineOffset);
5227 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, "blurRadius"), targetBlurRadius);
5230 application.SendNotification();
5231 application.Render();
5232 application.Render(1001u); // End of animation
5234 Property::Map resultMap;
5235 colorVisual.CreatePropertyMap(resultMap);
5237 // Test property values: they should be updated
5238 Property::Value* colorValue = resultMap.Find(ColorVisual::Property::MIX_COLOR, Property::VECTOR4);
5239 DALI_TEST_CHECK(colorValue);
5240 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetColor.r, targetColor.g, targetColor.b, targetOpacity), TEST_LOCATION);
5242 Property::Value* transformValue = resultMap.Find(Dali::Toolkit::Visual::Property::TRANSFORM);
5243 Dali::Property::Map* transformMap = transformValue->GetMap();
5244 DALI_TEST_CHECK(transformMap);
5246 Property::Value* offsetValue = transformMap->Find(Toolkit::Visual::Transform::Property::OFFSET);
5247 DALI_TEST_CHECK(offsetValue);
5248 DALI_TEST_EQUALS(offsetValue->Get<Vector2>(), targetOffset, TEST_LOCATION);
5250 Property::Value* sizeValue = transformMap->Find(Toolkit::Visual::Transform::Property::SIZE);
5251 DALI_TEST_CHECK(sizeValue);
5252 DALI_TEST_EQUALS(sizeValue->Get<Vector2>(), targetSize, TEST_LOCATION);
5254 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5255 DALI_TEST_CHECK(cornerRadiusValue);
5256 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5258 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5259 DALI_TEST_CHECK(borderlineWidthValue);
5260 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5262 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5263 DALI_TEST_CHECK(borderlineColorValue);
5264 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
5266 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5267 DALI_TEST_CHECK(borderlineOffsetValue);
5268 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
5270 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
5271 DALI_TEST_CHECK(blurRadiusValue);
5272 DALI_TEST_EQUALS(blurRadiusValue->Get<float>(), targetBlurRadius, TEST_LOCATION);
5274 // Test uniform values
5275 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector3>("mixColor", targetColor), true, TEST_LOCATION);
5276 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("offset", targetOffset), true, TEST_LOCATION);
5277 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector2>("size", targetSize), true, TEST_LOCATION);
5278 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5279 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("blurRadius", targetBlurRadius), true, TEST_LOCATION);
5284 int UtcDaliVisualGetVisualProperty03(void)
5286 ToolkitTestApplication application;
5287 tet_infoline("UtcDaliVisualGetVisualProperty03: Test animatable property, ImageVisual");
5289 static std::vector<UniformData> customUniforms =
5291 UniformData("pixelArea", Property::Type::VECTOR4),
5292 UniformData("cornerRadius", Property::Type::VECTOR4),
5293 UniformData("borderlineWidth", Property::Type::FLOAT),
5294 UniformData("borderlineColor", Property::Type::VECTOR4),
5295 UniformData("borderlineOffset", Property::Type::FLOAT),
5298 TestGraphicsController& graphics = application.GetGraphicsController();
5299 graphics.AddCustomUniforms(customUniforms);
5301 VisualFactory factory = VisualFactory::Get();
5302 Property::Map propertyMap;
5303 propertyMap.Insert(Visual::Property::TYPE, Visual::IMAGE);
5304 propertyMap.Insert(ImageVisual::Property::URL, TEST_IMAGE_FILE_NAME);
5306 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
5308 DummyControl dummyControl = DummyControl::New(true);
5309 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5310 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
5311 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5312 application.GetScene().Add(dummyControl);
5314 // Wait for image loading
5315 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5317 application.SendNotification();
5318 application.Render();
5320 float targetOpacity = 0.5f;
5321 Vector4 targetPixelArea(0.0f, 1.0f, 2.0f, -0.5f);
5322 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5323 float targetBorderlineWidth = 10.0f;
5324 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5325 float targetBorderlineOffset = -1.5f;
5327 Animation animation = Animation::New(1.0f);
5328 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5329 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, ImageVisual::Property::PIXEL_AREA), targetPixelArea);
5330 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5331 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5332 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5333 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5336 application.SendNotification();
5337 application.Render();
5338 application.Render(1001u); // End of animation
5340 Property::Map resultMap;
5341 imageVisual.CreatePropertyMap(resultMap);
5343 // Test property values: they should be updated
5344 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5345 DALI_TEST_CHECK(colorValue);
5346 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5348 Property::Value* pixelAreaValue = resultMap.Find(ImageVisual::Property::PIXEL_AREA, Property::VECTOR4);
5349 DALI_TEST_CHECK(pixelAreaValue);
5350 DALI_TEST_EQUALS(pixelAreaValue->Get<Vector4>(), targetPixelArea, TEST_LOCATION);
5352 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5353 DALI_TEST_CHECK(cornerRadiusValue);
5354 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5356 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5357 DALI_TEST_CHECK(borderlineWidthValue);
5358 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5360 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5361 DALI_TEST_CHECK(borderlineColorValue);
5362 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
5364 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5365 DALI_TEST_CHECK(borderlineOffsetValue);
5366 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
5368 // Test uniform value
5369 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("pixelArea", targetPixelArea), true, TEST_LOCATION);
5370 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5371 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5372 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5373 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5375 // Test non-animatable index, for coverage.
5376 DALI_TEST_EQUALS(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, ImageVisual::Property::URL).propertyIndex, Property::INVALID_INDEX, TEST_LOCATION);
5381 int UtcDaliVisualGetVisualProperty04(void)
5383 ToolkitTestApplication application;
5384 tet_infoline("UtcDaliVisualGetVisualProperty04: Test animatable property, GradientVisual");
5386 static std::vector<UniformData> customUniforms =
5388 UniformData("cornerRadius", Property::Type::VECTOR4),
5391 TestGraphicsController& graphics = application.GetGraphicsController();
5392 graphics.AddCustomUniforms(customUniforms);
5394 Vector2 start(-1.f, -1.f);
5395 Vector2 end(1.f, 1.f);
5396 Property::Array stopColors;
5397 stopColors.PushBack(Color::RED);
5398 stopColors.PushBack(Color::GREEN);
5400 VisualFactory factory = VisualFactory::Get();
5401 Property::Map propertyMap;
5402 propertyMap.Insert(Visual::Property::TYPE, Visual::GRADIENT);
5403 propertyMap.Insert(GradientVisual::Property::START_POSITION, start);
5404 propertyMap.Insert(GradientVisual::Property::END_POSITION, end);
5405 propertyMap.Insert(GradientVisual::Property::STOP_OFFSET, Vector2(0.f, 1.f));
5406 propertyMap.Insert(GradientVisual::Property::SPREAD_METHOD, GradientVisual::SpreadMethod::REPEAT);
5407 propertyMap.Insert(GradientVisual::Property::STOP_COLOR, stopColors);
5408 Visual::Base gradientVisual = factory.CreateVisual(propertyMap);
5410 DummyControl dummyControl = DummyControl::New(true);
5411 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5412 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, gradientVisual);
5413 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5414 application.GetScene().Add(dummyControl);
5416 application.SendNotification();
5417 application.Render();
5419 float targetOpacity = 0.5f;
5420 Vector4 targetCornerRadius(20.0f, 30.0f, 10.0f, 20.0f);
5422 Animation animation = Animation::New(1.0f);
5423 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5424 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5427 application.SendNotification();
5428 application.Render();
5429 application.Render(1001u); // End of animation
5431 Property::Map resultMap;
5432 gradientVisual.CreatePropertyMap(resultMap);
5434 // Test property values: they should be updated
5435 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5436 DALI_TEST_CHECK(colorValue);
5437 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5439 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5440 DALI_TEST_CHECK(cornerRadiusValue);
5441 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5443 // Test uniform value
5444 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5449 int UtcDaliVisualGetVisualProperty05(void)
5451 ToolkitTestApplication application;
5452 tet_infoline("UtcDaliVisualGetVisualProperty05: Test animatable property, SvgVisual");
5454 static std::vector<UniformData> customUniforms =
5456 UniformData("cornerRadius", Property::Type::VECTOR4),
5457 UniformData("borderlineWidth", Property::Type::FLOAT),
5458 UniformData("borderlineColor", Property::Type::VECTOR4),
5459 UniformData("borderlineOffset", Property::Type::FLOAT),
5462 TestGraphicsController& graphics = application.GetGraphicsController();
5463 graphics.AddCustomUniforms(customUniforms);
5465 VisualFactory factory = VisualFactory::Get();
5466 Property::Map propertyMap;
5467 propertyMap.Insert(Visual::Property::TYPE, Visual::SVG);
5468 propertyMap.Insert(ImageVisual::Property::URL, TEST_SVG_FILE_NAME);
5470 Visual::Base svgVisual = factory.CreateVisual(propertyMap);
5472 DummyControl dummyControl = DummyControl::New(true);
5473 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5474 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, svgVisual);
5475 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5476 application.GetScene().Add(dummyControl);
5478 application.SendNotification();
5479 application.Render();
5481 // Wait for loading & rasterization
5482 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
5484 application.SendNotification();
5485 application.Render();
5487 float targetOpacity = 0.5f;
5488 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5489 float targetBorderlineWidth = 10.0f;
5490 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5491 float targetBorderlineOffset = -1.5f;
5493 Animation animation = Animation::New(1.0f);
5494 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5495 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5496 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5497 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5498 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5501 application.SendNotification();
5502 application.Render();
5503 application.Render(1001u); // End of animation
5505 Property::Map resultMap;
5506 svgVisual.CreatePropertyMap(resultMap);
5508 // Test property values: they should be updated
5509 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5510 DALI_TEST_CHECK(colorValue);
5511 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5513 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5514 DALI_TEST_CHECK(cornerRadiusValue);
5515 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5517 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5518 DALI_TEST_CHECK(borderlineWidthValue);
5519 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5521 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5522 DALI_TEST_CHECK(borderlineColorValue);
5523 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
5525 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5526 DALI_TEST_CHECK(borderlineOffsetValue);
5527 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
5529 // Currently test with multiple program doesn't work well. will fix another day
5530 // Test uniform value
5531 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5532 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5533 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5534 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5539 int UtcDaliVisualGetVisualProperty06(void)
5541 ToolkitTestApplication application;
5542 tet_infoline("UtcDaliVisualGetVisualProperty06: Test animatable property, AnimatedImageVisual");
5544 static std::vector<UniformData> customUniforms =
5546 UniformData("cornerRadius", Property::Type::VECTOR4),
5547 UniformData("borderlineWidth", Property::Type::FLOAT),
5548 UniformData("borderlineColor", Property::Type::VECTOR4),
5549 UniformData("borderlineOffset", Property::Type::FLOAT),
5552 TestGraphicsController& graphics = application.GetGraphicsController();
5553 graphics.AddCustomUniforms(customUniforms);
5555 VisualFactory factory = VisualFactory::Get();
5556 Property::Map propertyMap;
5557 propertyMap.Insert(Visual::Property::TYPE, Visual::ANIMATED_IMAGE);
5558 propertyMap.Insert(ImageVisual::Property::URL, TEST_GIF_FILE_NAME);
5560 Visual::Base animatedImageVisual = factory.CreateVisual(propertyMap);
5562 DummyControl dummyControl = DummyControl::New(true);
5563 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5564 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedImageVisual);
5565 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5566 application.GetScene().Add(dummyControl);
5568 application.SendNotification();
5569 application.Render();
5571 // Wait for image loading
5572 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5574 application.SendNotification();
5575 application.Render();
5577 float targetOpacity = 0.5f;
5578 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5579 float targetBorderlineWidth = 10.0f;
5580 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5581 float targetBorderlineOffset = -1.5f;
5583 Animation animation = Animation::New(1.0f);
5584 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5585 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5586 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5587 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5588 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5591 application.SendNotification();
5592 application.Render();
5593 application.Render(1001u); // End of animation
5595 Property::Map resultMap;
5596 animatedImageVisual.CreatePropertyMap(resultMap);
5598 // Test property values: they should be updated
5599 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5600 DALI_TEST_CHECK(colorValue);
5601 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5603 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5604 DALI_TEST_CHECK(cornerRadiusValue);
5605 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5607 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5608 DALI_TEST_CHECK(borderlineWidthValue);
5609 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5611 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5612 DALI_TEST_CHECK(borderlineColorValue);
5613 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
5615 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5616 DALI_TEST_CHECK(borderlineOffsetValue);
5617 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
5619 // Currently test with multiple program doesn't work well. will fix another day
5620 // Test uniform value
5621 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5622 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5623 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5624 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5629 int UtcDaliVisualGetVisualProperty07(void)
5631 ToolkitTestApplication application;
5632 tet_infoline("UtcDaliVisualGetVisualProperty07: Test animatable property, AnimatedVectorVisual");
5634 static std::vector<UniformData> customUniforms =
5636 UniformData("cornerRadius", Property::Type::VECTOR4),
5637 UniformData("borderlineWidth", Property::Type::FLOAT),
5638 UniformData("borderlineColor", Property::Type::VECTOR4),
5639 UniformData("borderlineOffset", Property::Type::FLOAT),
5642 TestGraphicsController& graphics = application.GetGraphicsController();
5643 graphics.AddCustomUniforms(customUniforms);
5645 VisualFactory factory = VisualFactory::Get();
5646 Property::Map propertyMap;
5647 propertyMap.Insert(Visual::Property::TYPE, DevelVisual::Type::ANIMATED_VECTOR_IMAGE);
5648 propertyMap.Insert(ImageVisual::Property::URL, TEST_VECTOR_IMAGE_FILE_NAME);
5649 propertyMap.Insert(ImageVisual::Property::SYNCHRONOUS_LOADING, false);
5651 Visual::Base animatedVectorVisual = factory.CreateVisual(propertyMap);
5653 DummyControl dummyControl = DummyControl::New(true);
5654 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5655 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, animatedVectorVisual);
5656 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5657 application.GetScene().Add(dummyControl);
5659 application.SendNotification();
5660 application.Render();
5662 // Trigger count is 2 - load & render a frame
5663 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
5665 application.SendNotification();
5666 application.Render();
5668 float targetOpacity = 0.5f;
5669 Vector4 targetCornerRadius(20.0f, 20.0f, 0.0f, 0.0f);
5670 float targetBorderlineWidth = 10.0f;
5671 Vector4 targetBorderlineColor(1.0f, 0.0f, 1.0f, 0.5f);
5672 float targetBorderlineOffset = -1.5f;
5674 Animation animation = Animation::New(1.0f);
5675 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, Visual::Property::OPACITY), targetOpacity);
5676 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
5677 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_WIDTH), targetBorderlineWidth);
5678 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_COLOR), targetBorderlineColor);
5679 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::BORDERLINE_OFFSET), targetBorderlineOffset);
5682 application.SendNotification();
5683 application.Render();
5684 application.Render(1001u); // End of animation
5686 Property::Map resultMap;
5687 animatedVectorVisual.CreatePropertyMap(resultMap);
5689 // Test property values: they should be updated
5690 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5691 DALI_TEST_CHECK(colorValue);
5692 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(1.0f, 1.0f, 1.0f, targetOpacity), TEST_LOCATION);
5694 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5695 DALI_TEST_CHECK(cornerRadiusValue);
5696 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5698 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5699 DALI_TEST_CHECK(borderlineWidthValue);
5700 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5702 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5703 DALI_TEST_CHECK(borderlineColorValue);
5704 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
5706 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5707 DALI_TEST_CHECK(borderlineOffsetValue);
5708 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
5710 // Currently test with multiple program doesn't work well. will fix another day
5711 // Test uniform value
5712 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("cornerRadius", targetCornerRadius), true, TEST_LOCATION);
5713 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineWidth", targetBorderlineWidth), true, TEST_LOCATION);
5714 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<Vector4>("borderlineColor", targetBorderlineColor), true, TEST_LOCATION);
5715 DALI_TEST_EQUALS(application.GetGlAbstraction().CheckUniformValue<float>("borderlineOffset", targetBorderlineOffset), true, TEST_LOCATION);
5720 int UtcDaliVisualUpdateProperty01(void)
5722 ToolkitTestApplication application;
5723 tet_infoline("UtcDaliVisualUpdateProperty01: Test update property by DoAction. Standard case");
5725 VisualFactory factory = VisualFactory::Get();
5726 Property::Map propertyMap;
5727 propertyMap[Visual::Property::TYPE] = Visual::Type::IMAGE;
5728 propertyMap[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
5729 propertyMap[Visual::Property::MIX_COLOR] = Color::BLUE;
5730 propertyMap[DevelVisual::Property::VISUAL_FITTING_MODE] = DevelVisual::FIT_WIDTH;
5732 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
5734 DummyControl dummyControl = DummyControl::New(true);
5735 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5736 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
5737 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5738 application.GetScene().Add(dummyControl);
5740 application.SendNotification();
5741 application.Render();
5743 // Wait for image loading
5744 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5746 application.SendNotification();
5747 application.Render();
5749 Property::Map originalMap;
5750 imageVisual.CreatePropertyMap(originalMap);
5752 float targetOpacity = 0.5f;
5753 Vector3 targetMixColor = Vector3(1.0f, 0.4f, 0.2f);
5754 bool targetPreMultipliedAlpha = originalMap[Visual::Property::PREMULTIPLIED_ALPHA].Get<bool>() ^ true;
5755 DevelVisual::FittingMode targetVisualFittingMode = DevelVisual::CENTER;
5756 Vector4 targetCornerRadius = Vector4(10.0f, 0.0f, 1.0f, 2.0f);
5757 float targetBorderlineWidth = 20.0f;
5758 Vector4 targetBorderlineColor = Color::RED;
5759 float targetBorderlineOffset = 1.0f;
5761 Property::Map targetPropertyMap;
5762 targetPropertyMap[Visual::Property::OPACITY] = targetOpacity;
5763 targetPropertyMap[ImageVisual::Property::URL] = "foobar";
5764 targetPropertyMap[Visual::Property::MIX_COLOR] = targetMixColor;
5765 targetPropertyMap[Visual::Property::PREMULTIPLIED_ALPHA] = targetPreMultipliedAlpha;
5766 targetPropertyMap[DevelVisual::Property::VISUAL_FITTING_MODE] = targetVisualFittingMode;
5767 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
5768 targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = targetBorderlineWidth;
5769 targetPropertyMap[DevelVisual::Property::BORDERLINE_COLOR] = targetBorderlineColor;
5770 targetPropertyMap[DevelVisual::Property::BORDERLINE_OFFSET] = targetBorderlineOffset;
5772 // Update Properties
5773 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
5775 Property::Map resultMap;
5776 imageVisual.CreatePropertyMap(resultMap);
5778 // Test property values: they should be updated
5779 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5780 DALI_TEST_CHECK(colorValue);
5781 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetMixColor.r, targetMixColor.g, targetMixColor.b, targetOpacity), TEST_LOCATION);
5783 Property::Value* urlValue = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
5784 DALI_TEST_CHECK(urlValue);
5785 // NOTE : ImageVisual URL must NOT changed.
5786 DALI_TEST_EQUALS(urlValue->Get<std::string>(), TEST_IMAGE_FILE_NAME, TEST_LOCATION);
5788 Property::Value* preMultipliedValue = resultMap.Find(Visual::Property::PREMULTIPLIED_ALPHA, Property::BOOLEAN);
5789 DALI_TEST_CHECK(preMultipliedValue);
5790 DALI_TEST_EQUALS(preMultipliedValue->Get<bool>(), targetPreMultipliedAlpha, TEST_LOCATION);
5792 Property::Value* visualFittingModeValue = resultMap.Find(DevelVisual::Property::VISUAL_FITTING_MODE, Property::STRING);
5793 DALI_TEST_CHECK(visualFittingModeValue);
5794 DALI_TEST_EQUALS(visualFittingModeValue->Get<std::string>(), "CENTER", TEST_LOCATION);
5796 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5797 DALI_TEST_CHECK(cornerRadiusValue);
5798 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5800 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5801 DALI_TEST_CHECK(borderlineWidthValue);
5802 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5804 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5805 DALI_TEST_CHECK(borderlineColorValue);
5806 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
5808 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5809 DALI_TEST_CHECK(borderlineOffsetValue);
5810 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
5815 int UtcDaliVisualUpdateProperty02(void)
5817 ToolkitTestApplication application;
5818 tet_infoline("UtcDaliVisualUpdateProperty02: Test update property by DoAction. Initialize as zero, and update non-zero case");
5820 Vector4 borderlineColor = Color::BLUE;
5821 float borderlineOffset = 1.0f;
5823 VisualFactory factory = VisualFactory::Get();
5824 Property::Map propertyMap;
5825 propertyMap[Visual::Property::TYPE] = Visual::Type::IMAGE;
5826 propertyMap[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
5827 propertyMap[Visual::Property::MIX_COLOR] = Color::BLUE;
5828 propertyMap[DevelVisual::Property::VISUAL_FITTING_MODE] = DevelVisual::FIT_WIDTH;
5829 propertyMap[DevelVisual::Property::CORNER_RADIUS] = 0.0f;
5830 propertyMap[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
5831 propertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = 0.0f;
5832 propertyMap[DevelVisual::Property::BORDERLINE_COLOR] = borderlineColor;
5833 propertyMap[DevelVisual::Property::BORDERLINE_OFFSET] = borderlineOffset;
5835 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
5837 DummyControl dummyControl = DummyControl::New(true);
5838 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5839 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
5840 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5841 application.GetScene().Add(dummyControl);
5843 application.SendNotification();
5844 application.Render();
5846 // Wait for image loading
5847 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5849 application.SendNotification();
5850 application.Render();
5852 Property::Map originalMap;
5853 imageVisual.CreatePropertyMap(originalMap);
5855 Vector4 targetCornerRadius = Vector4(10.0f, 0.0f, 1.0f, 2.0f);
5856 float targetBorderlineWidth = 20.0f;
5858 Property::Map targetPropertyMap;
5859 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
5860 targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = targetBorderlineWidth;
5862 // Update Properties
5863 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
5865 Property::Map resultMap;
5866 imageVisual.CreatePropertyMap(resultMap);
5868 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
5869 DALI_TEST_CHECK(cornerRadiusValue);
5870 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
5872 Property::Value* cornerRadiusPolicyValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER);
5873 DALI_TEST_CHECK(cornerRadiusPolicyValue);
5874 DALI_TEST_EQUALS(cornerRadiusPolicyValue->Get<int>(), static_cast<int>(Toolkit::Visual::Transform::Policy::RELATIVE), TEST_LOCATION);
5876 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
5877 DALI_TEST_CHECK(borderlineWidthValue);
5878 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
5880 Property::Value* borderlineColorValue = resultMap.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
5881 DALI_TEST_CHECK(borderlineColorValue);
5882 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), borderlineColor, TEST_LOCATION);
5884 Property::Value* borderlineOffsetValue = resultMap.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
5885 DALI_TEST_CHECK(borderlineOffsetValue);
5886 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), borderlineOffset, TEST_LOCATION);
5891 int UtcDaliVisualUpdatePropertyInvalidType(void)
5893 ToolkitTestApplication application;
5894 tet_infoline("UtcDaliVisualUpdatePropertyInvalidType: Test update property by DoAction. But some value is not invalid to update");
5896 VisualFactory factory = VisualFactory::Get();
5897 Property::Map propertyMap;
5898 propertyMap[Visual::Property::TYPE] = Visual::Type::N_PATCH;
5899 propertyMap[ImageVisual::Property::URL] = TEST_NPATCH_FILE_NAME;
5901 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
5903 DummyControl dummyControl = DummyControl::New(true);
5904 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5905 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
5906 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5907 application.GetScene().Add(dummyControl);
5909 application.SendNotification();
5910 application.Render();
5912 // Wait for image loading
5913 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
5915 application.SendNotification();
5916 application.Render();
5918 Property::Map originalMap;
5919 imageVisual.CreatePropertyMap(originalMap);
5921 float targetOpacity = 0.5f;
5922 Vector3 targetMixColor = Vector3(1.0f, 0.4f, 0.2f);
5923 bool targetPreMultipliedAlpha = originalMap[Visual::Property::PREMULTIPLIED_ALPHA].Get<bool>() ^ true;
5924 DevelVisual::FittingMode targetVisualFittingMode = DevelVisual::CENTER;
5925 Vector4 targetCornerRadius = Vector4(10.0f, 0.0f, 1.0f, 2.0f);
5926 float targetBorderlineWidth = 20.0f;
5927 Vector4 targetBorderlineColor = Color::RED;
5928 float targetBorderlineOffset = 1.0f;
5930 Property::Map targetPropertyMap;
5931 targetPropertyMap[Visual::Property::OPACITY] = targetOpacity;
5932 targetPropertyMap[ImageVisual::Property::URL] = "foobar";
5933 targetPropertyMap[Visual::Property::MIX_COLOR] = targetMixColor;
5934 targetPropertyMap[Visual::Property::PREMULTIPLIED_ALPHA] = targetPreMultipliedAlpha;
5935 targetPropertyMap[DevelVisual::Property::VISUAL_FITTING_MODE] = targetVisualFittingMode;
5937 // Properties that N_PATCH visual could not used.
5938 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
5939 targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = targetBorderlineWidth;
5940 targetPropertyMap[DevelVisual::Property::BORDERLINE_COLOR] = targetBorderlineColor;
5941 targetPropertyMap[DevelVisual::Property::BORDERLINE_OFFSET] = targetBorderlineOffset;
5943 // Update Properties
5944 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
5946 Property::Map resultMap;
5947 imageVisual.CreatePropertyMap(resultMap);
5949 // Test property values: they should be updated
5950 Property::Value* colorValue = resultMap.Find(Visual::Property::MIX_COLOR, Property::VECTOR4);
5951 DALI_TEST_CHECK(colorValue);
5952 DALI_TEST_EQUALS(colorValue->Get<Vector4>(), Vector4(targetMixColor.r, targetMixColor.g, targetMixColor.b, targetOpacity), TEST_LOCATION);
5954 Property::Value* urlValue = resultMap.Find(ImageVisual::Property::URL, Property::STRING);
5955 DALI_TEST_CHECK(urlValue);
5956 // NOTE : NPatchVisual URL must NOT changed.
5957 DALI_TEST_EQUALS(urlValue->Get<std::string>(), TEST_NPATCH_FILE_NAME, TEST_LOCATION);
5959 Property::Value* preMultipliedValue = resultMap.Find(Visual::Property::PREMULTIPLIED_ALPHA, Property::BOOLEAN);
5960 DALI_TEST_CHECK(preMultipliedValue);
5961 DALI_TEST_EQUALS(preMultipliedValue->Get<bool>(), targetPreMultipliedAlpha, TEST_LOCATION);
5963 Property::Value* visualFittingModeValue = resultMap.Find(DevelVisual::Property::VISUAL_FITTING_MODE, Property::STRING);
5964 DALI_TEST_CHECK(visualFittingModeValue);
5965 DALI_TEST_EQUALS(visualFittingModeValue->Get<std::string>(), "CENTER", TEST_LOCATION);
5967 // We don't check properties value that N_PATCH visual could not used.
5973 int UtcDaliVisualUpdatePropertyChangeShader01(void)
5975 ToolkitTestApplication application;
5976 tet_infoline("UtcDaliVisualUpdatePropertyChangeShader01: Test update property by DoAction. Change the shader case");
5978 TraceCallStack& callStack = application.GetGraphicsController().mCallStack;
5980 VisualFactory factory = VisualFactory::Get();
5981 Property::Map propertyMap;
5983 propertyMap[Visual::Property::TYPE] = Visual::Type::IMAGE;
5984 propertyMap[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
5986 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
5988 DummyControl dummyControl = DummyControl::New(true);
5989 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
5990 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
5991 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
5992 application.GetScene().Add(dummyControl);
5994 application.SendNotification();
5995 application.Render();
5997 // Wait for image loading
5998 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
6000 application.SendNotification();
6001 application.Render();
6003 TestShaderCodeContainSubstrings(
6006 {"#define IS_REQUIRED_BORDERLINE", false},
6007 {"#define IS_REQUIRED_ROUNDED_CORNER", false},
6012 callStack.Enable(true);
6014 Vector4 targetCornerRadius = Vector4(1.0f, 12.0f, 2.0f, 21.0f);
6016 Property::Map targetPropertyMap;
6017 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
6018 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::RELATIVE;
6020 // Update Properties with CornerRadius
6021 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
6023 Property::Map resultMap;
6024 imageVisual.CreatePropertyMap(resultMap);
6026 // Test property values: they should be updated
6027 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6028 DALI_TEST_CHECK(cornerRadiusValue);
6029 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
6031 Property::Value* cornerRadiusPolicyValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER);
6032 DALI_TEST_CHECK(cornerRadiusPolicyValue);
6033 DALI_TEST_EQUALS(cornerRadiusPolicyValue->Get<int>(), static_cast<int>(Toolkit::Visual::Transform::Policy::RELATIVE), TEST_LOCATION);
6035 TestShaderCodeContainSubstrings(
6038 {"#define IS_REQUIRED_BORDERLINE", false},
6039 {"#define IS_REQUIRED_ROUNDED_CORNER", true},
6043 // Send shader compile signal
6044 application.SendNotification();
6045 application.Render();
6047 callStack.Enable(false);
6049 DALI_TEST_CHECK(callStack.FindMethod("CreateShader"));
6051 callStack.Enable(true);
6053 float targetBorderlineWidth = 10.0f;
6054 Vector4 targetBorderlineColor = Vector4(1.0f, 0.2f, 0.1f, 0.5f);
6055 float targetBorderlineOffset = -0.3f;
6057 Property::Map targetPropertyMap2;
6058 targetPropertyMap2[DevelVisual::Property::CORNER_RADIUS] = Vector4::ZERO;
6059 targetPropertyMap2[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
6060 targetPropertyMap2[DevelVisual::Property::BORDERLINE_WIDTH] = targetBorderlineWidth;
6061 targetPropertyMap2[DevelVisual::Property::BORDERLINE_COLOR] = targetBorderlineColor;
6062 targetPropertyMap2[DevelVisual::Property::BORDERLINE_OFFSET] = targetBorderlineOffset;
6064 // Update Properties with Borderline
6065 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap2);
6067 Property::Map resultMap2;
6068 imageVisual.CreatePropertyMap(resultMap2);
6070 // Test property values: they should be updated
6071 cornerRadiusValue = resultMap2.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6072 DALI_TEST_CHECK(cornerRadiusValue);
6073 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), Vector4::ZERO, TEST_LOCATION);
6075 cornerRadiusPolicyValue = resultMap2.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER);
6076 DALI_TEST_CHECK(cornerRadiusPolicyValue);
6077 DALI_TEST_EQUALS(cornerRadiusPolicyValue->Get<int>(), static_cast<int>(Toolkit::Visual::Transform::Policy::ABSOLUTE), TEST_LOCATION);
6079 Property::Value* borderlineWidthValue = resultMap2.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
6080 DALI_TEST_CHECK(borderlineWidthValue);
6081 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
6083 Property::Value* borderlineColorValue = resultMap2.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
6084 DALI_TEST_CHECK(borderlineColorValue);
6085 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
6087 Property::Value* borderlineOffsetValue = resultMap2.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
6088 DALI_TEST_CHECK(borderlineOffsetValue);
6089 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
6091 TestShaderCodeContainSubstrings(
6094 {"#define IS_REQUIRED_BORDERLINE", true},
6095 {"#define IS_REQUIRED_ROUNDED_CORNER", true}, // Note : mAlwaysUsingCornerRadius is true.
6099 // Send shader compile signal
6100 application.SendNotification();
6101 application.Render();
6103 callStack.Enable(false);
6105 DALI_TEST_CHECK(callStack.FindMethod("CreateShader"));
6107 callStack.Enable(true);
6109 Property::Map targetPropertyMap3;
6110 targetPropertyMap3[DevelVisual::Property::CORNER_RADIUS] = Vector4::ZERO;
6111 targetPropertyMap3[DevelVisual::Property::CORNER_RADIUS_POLICY] = Toolkit::Visual::Transform::Policy::ABSOLUTE;
6112 targetPropertyMap3[DevelVisual::Property::BORDERLINE_WIDTH] = 0.0f;
6113 targetPropertyMap3[DevelVisual::Property::BORDERLINE_COLOR] = Vector4::ZERO;
6114 targetPropertyMap3[DevelVisual::Property::BORDERLINE_OFFSET] = 0.0f;
6116 // Update Properties into zero
6117 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap3);
6119 Property::Map resultMap3;
6120 imageVisual.CreatePropertyMap(resultMap3);
6122 // Test property values: they should be updated
6123 cornerRadiusValue = resultMap3.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6124 DALI_TEST_CHECK(cornerRadiusValue);
6125 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), Vector4::ZERO, TEST_LOCATION);
6127 cornerRadiusPolicyValue = resultMap3.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER);
6128 DALI_TEST_CHECK(cornerRadiusPolicyValue);
6129 DALI_TEST_EQUALS(cornerRadiusPolicyValue->Get<int>(), static_cast<int>(Toolkit::Visual::Transform::Policy::ABSOLUTE), TEST_LOCATION);
6131 borderlineWidthValue = resultMap3.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
6132 DALI_TEST_CHECK(borderlineWidthValue);
6133 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), 0.0f, TEST_LOCATION);
6135 borderlineColorValue = resultMap3.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
6136 DALI_TEST_CHECK(borderlineColorValue);
6137 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), Vector4::ZERO, TEST_LOCATION);
6139 borderlineOffsetValue = resultMap3.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
6140 DALI_TEST_CHECK(borderlineOffsetValue);
6141 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), 0.0f, TEST_LOCATION);
6143 TestShaderCodeContainSubstrings(
6146 {"#define IS_REQUIRED_BORDERLINE", true}, // Note : mAlwaysUsingBorderline is true.
6147 {"#define IS_REQUIRED_ROUNDED_CORNER", true}, // Note : mAlwaysUsingCornerRadius is true.
6151 // Send shader compile signal
6152 application.SendNotification();
6153 application.Render();
6155 callStack.Enable(false);
6156 // Shader not changed
6157 DALI_TEST_CHECK(!callStack.FindMethod("CreateShader"));
6162 int UtcDaliVisualUpdatePropertyChangeShader02(void)
6164 ToolkitTestApplication application;
6165 tet_infoline("UtcDaliVisualUpdatePropertyChangeShader02: Test update property by DoAction. Fake update");
6167 TraceCallStack& callStack = application.GetGraphicsController().mCallStack;
6169 VisualFactory factory = VisualFactory::Get();
6170 Property::Map propertyMap;
6172 propertyMap[Visual::Property::TYPE] = Visual::Type::IMAGE;
6173 propertyMap[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
6175 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
6177 DummyControl dummyControl = DummyControl::New(true);
6178 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
6179 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
6180 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
6181 application.GetScene().Add(dummyControl);
6183 application.SendNotification();
6184 application.Render();
6186 // Wait for image loading
6187 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
6189 application.SendNotification();
6190 application.Render();
6192 TestShaderCodeContainSubstrings(
6195 {"#define IS_REQUIRED_BORDERLINE", false},
6196 {"#define IS_REQUIRED_ROUNDED_CORNER", false},
6200 Vector4 targetCornerRadius = Vector4(0.0f, 0.0f, 0.0f, 0.0f);
6202 Property::Map targetPropertyMap;
6203 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
6206 callStack.Enable(true);
6208 // Update Properties with CornerRadius
6209 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
6211 Property::Map resultMap;
6212 imageVisual.CreatePropertyMap(resultMap);
6214 // Test property values: they should be updated
6215 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6216 DALI_TEST_CHECK(cornerRadiusValue);
6217 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
6219 TestShaderCodeContainSubstrings(
6222 {"#define IS_REQUIRED_BORDERLINE", false},
6223 {"#define IS_REQUIRED_ROUNDED_CORNER", false}, // Note : corner radius is zero. so we don't change shader!
6227 // Send shader compile signal
6228 application.SendNotification();
6229 application.Render();
6231 callStack.Enable(false);
6233 // Shader doesn't changed
6234 DALI_TEST_CHECK(!(callStack.FindMethod("CreateShader")));
6236 callStack.Enable(true);
6238 float targetBorderlineWidth = 0.0f;
6239 Vector4 targetBorderlineColor = Vector4(1.0f, 1.0f, 0.0f, 0.0f);
6240 float targetBorderlineOffset = -1.0f;
6242 Property::Map targetPropertyMap2;
6243 targetPropertyMap2[DevelVisual::Property::BORDERLINE_WIDTH] = targetBorderlineWidth;
6244 targetPropertyMap2[DevelVisual::Property::BORDERLINE_COLOR] = targetBorderlineColor;
6245 targetPropertyMap2[DevelVisual::Property::BORDERLINE_OFFSET] = targetBorderlineOffset;
6247 // Update Properties with Borderline
6248 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap2);
6250 Property::Map resultMap2;
6251 imageVisual.CreatePropertyMap(resultMap2);
6253 // Test property values: they should be updated
6254 Property::Value* borderlineWidthValue = resultMap2.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
6255 DALI_TEST_CHECK(borderlineWidthValue);
6256 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
6258 Property::Value* borderlineColorValue = resultMap2.Find(DevelVisual::Property::BORDERLINE_COLOR, Property::VECTOR4);
6259 DALI_TEST_CHECK(borderlineColorValue);
6260 DALI_TEST_EQUALS(borderlineColorValue->Get<Vector4>(), targetBorderlineColor, TEST_LOCATION);
6262 Property::Value* borderlineOffsetValue = resultMap2.Find(DevelVisual::Property::BORDERLINE_OFFSET, Property::FLOAT);
6263 DALI_TEST_CHECK(borderlineOffsetValue);
6264 DALI_TEST_EQUALS(borderlineOffsetValue->Get<float>(), targetBorderlineOffset, TEST_LOCATION);
6266 TestShaderCodeContainSubstrings(
6269 {"#define IS_REQUIRED_BORDERLINE", false}, // Note : borderline width is zero. so we don't change shader!
6270 {"#define IS_REQUIRED_ROUNDED_CORNER", false},
6274 // Send shader compile signal
6275 application.SendNotification();
6276 application.Render();
6278 callStack.Enable(false);
6280 // Shader doesn't changed
6281 DALI_TEST_CHECK(!(callStack.FindMethod("CreateShader")));
6286 int UtcDaliVisualUpdatePropertyChangeShader03(void)
6288 ToolkitTestApplication application;
6289 tet_infoline("UtcDaliVisualUpdatePropertyChangeShader03: Test update property by DoAction. Blur Radius");
6291 TraceCallStack& callStack = application.GetGraphicsController().mCallStack;
6293 VisualFactory factory = VisualFactory::Get();
6294 Property::Map propertyMap;
6296 propertyMap[Visual::Property::TYPE] = Visual::Type::COLOR;
6297 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
6299 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
6301 DummyControl dummyControl = DummyControl::New(true);
6302 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
6303 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
6304 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
6305 application.GetScene().Add(dummyControl);
6307 application.SendNotification();
6308 application.Render();
6310 application.SendNotification();
6311 application.Render();
6313 TestShaderCodeContainSubstrings(
6316 {"#define IS_REQUIRED_BLUR", false},
6317 {"#define IS_REQUIRED_BORDERLINE", false},
6318 {"#define IS_REQUIRED_ROUNDED_CORNER", false},
6322 float targetBlurRadius = 15.0f;
6323 Vector4 targetCornerRadius = Vector4(1.0f, 0.1f, 1.1f, 0.0f);
6325 Property::Map targetPropertyMap;
6326 targetPropertyMap[DevelColorVisual::Property::BLUR_RADIUS] = targetBlurRadius;
6327 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
6328 targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = 10.0f; // Don't care. just dummy
6331 callStack.Enable(true);
6333 // Update Properties with CornerRadius
6334 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
6336 Property::Map resultMap;
6337 imageVisual.CreatePropertyMap(resultMap);
6339 // Test property values: they should be updated
6340 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
6341 DALI_TEST_CHECK(blurRadiusValue);
6342 DALI_TEST_EQUALS(blurRadiusValue->Get<float>(), targetBlurRadius, TEST_LOCATION);
6344 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6345 DALI_TEST_CHECK(cornerRadiusValue);
6346 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
6348 TestShaderCodeContainSubstrings(
6351 {"#define IS_REQUIRED_BLUR", true},
6352 {"#define IS_REQUIRED_BORDERLINE", false}, // Note : We ignore borderline when blur radius occured
6353 {"#define IS_REQUIRED_ROUNDED_CORNER", true},
6357 // Send shader compile signal
6358 application.SendNotification();
6359 application.Render();
6361 callStack.Enable(false);
6364 DALI_TEST_CHECK((callStack.FindMethod("CreateShader")));
6366 callStack.Enable(true);
6368 Property::Map targetPropertyMap2;
6369 targetPropertyMap2[DevelColorVisual::Property::BLUR_RADIUS] = 0.0f;
6370 targetPropertyMap2[DevelVisual::Property::CORNER_RADIUS] = Vector4::ZERO;
6371 targetPropertyMap2[DevelVisual::Property::BORDERLINE_WIDTH] = 15.0f; // Don't care. just dummy
6373 // Update Properties with CornerRadius
6374 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap2);
6376 Property::Map resultMap2;
6377 imageVisual.CreatePropertyMap(resultMap2);
6379 // Test property values: they should be updated
6380 blurRadiusValue = resultMap2.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
6381 DALI_TEST_CHECK(blurRadiusValue);
6382 DALI_TEST_EQUALS(blurRadiusValue->Get<float>(), 0.0f, TEST_LOCATION);
6384 cornerRadiusValue = resultMap2.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6385 DALI_TEST_CHECK(cornerRadiusValue);
6386 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), Vector4::ZERO, TEST_LOCATION);
6388 TestShaderCodeContainSubstrings(
6391 {"#define IS_REQUIRED_BLUR", true}, // Note : mAlwaysUsingBlurRadius is true.
6392 {"#define IS_REQUIRED_BORDERLINE", false}, // Note : We ignore borderline when blur radius occured
6393 {"#define IS_REQUIRED_ROUNDED_CORNER", true}, // Note : mAlwaysUsingCornerRadius is true.
6397 // Send shader compile signal
6398 application.SendNotification();
6399 application.Render();
6401 callStack.Enable(false);
6403 // Shader not changed
6404 DALI_TEST_CHECK(!(callStack.FindMethod("CreateShader")));
6409 int UtcDaliVisualUpdatePropertyChangeShader04(void)
6411 ToolkitTestApplication application;
6412 tet_infoline("UtcDaliVisualUpdatePropertyChangeShader04: Test update property by DoAction during Animation. Change the shader case");
6414 TraceCallStack& callStack = application.GetGraphicsController().mCallStack;
6416 VisualFactory factory = VisualFactory::Get();
6417 Property::Map propertyMap;
6419 propertyMap[Visual::Property::TYPE] = Visual::Type::IMAGE;
6420 propertyMap[ImageVisual::Property::URL] = TEST_IMAGE_FILE_NAME;
6421 propertyMap[DevelVisual::Property::CORNER_RADIUS] = 10.0f;
6423 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
6425 DummyControl dummyControl = DummyControl::New(true);
6426 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
6427 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
6428 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
6429 application.GetScene().Add(dummyControl);
6431 application.SendNotification();
6432 application.Render();
6434 // Wait for image loading
6435 DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
6437 application.SendNotification();
6438 application.Render();
6440 TestShaderCodeContainSubstrings(
6443 {"#define IS_REQUIRED_BORDERLINE", false},
6444 {"#define IS_REQUIRED_ROUNDED_CORNER", true},
6449 callStack.Enable(true);
6451 Vector4 targetCornerRadius = Vector4(0.0f, 0.0f, 0.0f, 0.0f);
6453 Animation animation = Animation::New(1.0f);
6454 animation.AnimateTo(DevelControl::GetVisualProperty(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Property::CORNER_RADIUS), targetCornerRadius);
6457 application.SendNotification();
6458 application.Render();
6459 application.Render(1001u); // End of animation
6461 TestShaderCodeContainSubstrings(
6464 {"#define IS_REQUIRED_BORDERLINE", false},
6465 {"#define IS_REQUIRED_ROUNDED_CORNER", true}, // Note : mAlwaysUsingCornerRadius is true.
6469 callStack.Enable(false);
6470 // Shader not changed
6471 DALI_TEST_CHECK(!callStack.FindMethod("CreateShader"));
6473 callStack.Enable(true);
6475 float targetBorderlineWidth = 10.0f;
6476 Property::Map targetPropertyMap;
6477 targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = targetBorderlineWidth;
6479 // Update Properties with CornerRadius
6480 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
6482 Property::Map resultMap;
6483 imageVisual.CreatePropertyMap(resultMap);
6485 // Test property values: they should be updated
6486 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6487 DALI_TEST_CHECK(cornerRadiusValue);
6488 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
6490 Property::Value* cornerRadiusPolicyValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS_POLICY, Property::INTEGER);
6491 DALI_TEST_CHECK(cornerRadiusPolicyValue);
6492 DALI_TEST_EQUALS(cornerRadiusPolicyValue->Get<int>(), static_cast<int>(Toolkit::Visual::Transform::Policy::ABSOLUTE), TEST_LOCATION);
6494 Property::Value* borderlineWidthValue = resultMap.Find(DevelVisual::Property::BORDERLINE_WIDTH, Property::FLOAT);
6495 DALI_TEST_CHECK(borderlineWidthValue);
6496 DALI_TEST_EQUALS(borderlineWidthValue->Get<float>(), targetBorderlineWidth, TEST_LOCATION);
6498 TestShaderCodeContainSubstrings(
6501 {"#define IS_REQUIRED_BORDERLINE", true},
6502 {"#define IS_REQUIRED_ROUNDED_CORNER", true}, // Note : mAlwaysUsingCornerRadius is true.
6506 // Send shader compile signal
6507 application.SendNotification();
6508 application.Render();
6510 callStack.Enable(false);
6512 DALI_TEST_CHECK(callStack.FindMethod("CreateShader"));
6517 int UtcDaliVisualUpdatePropertyChangeShader05(void)
6519 ToolkitTestApplication application;
6520 tet_infoline("UtcDaliVisualUpdatePropertyChangeShader05: Test update property under glsl version is under 300");
6522 auto originalShaderVersion = application.GetGlAbstraction().GetShaderLanguageVersion();
6524 // Change the shader language version forcely!
6525 application.GetGlAbstraction().mShaderLanguageVersion = 200;
6529 TraceCallStack& callStack = application.GetGraphicsController().mCallStack;
6531 VisualFactory factory = VisualFactory::Get();
6532 Property::Map propertyMap;
6534 propertyMap[Visual::Property::TYPE] = Visual::Type::COLOR;
6535 propertyMap[ColorVisual::Property::MIX_COLOR] = Color::BLUE;
6537 Visual::Base imageVisual = factory.CreateVisual(propertyMap);
6539 DummyControl dummyControl = DummyControl::New(true);
6540 Impl::DummyControl& dummyImpl = static_cast<Impl::DummyControl&>(dummyControl.GetImplementation());
6541 dummyImpl.RegisterVisual(DummyControl::Property::TEST_VISUAL, imageVisual);
6542 dummyControl[Actor::Property::SIZE] = Vector2(200.f, 200.f);
6543 application.GetScene().Add(dummyControl);
6545 application.SendNotification();
6546 application.Render();
6548 application.SendNotification();
6549 application.Render();
6551 TestShaderCodeContainSubstrings(
6554 {"#define IS_REQUIRED_BLUR", false},
6555 {"#define IS_REQUIRED_BORDERLINE", false},
6556 {"#define IS_REQUIRED_ROUNDED_CORNER", false},
6560 float targetBlurRadius = 15.0f;
6561 Vector4 targetCornerRadius = Vector4(1.0f, 0.1f, 1.1f, 0.0f);
6563 Property::Map targetPropertyMap;
6564 targetPropertyMap[DevelColorVisual::Property::BLUR_RADIUS] = targetBlurRadius;
6565 targetPropertyMap[DevelVisual::Property::CORNER_RADIUS] = targetCornerRadius;
6566 targetPropertyMap[DevelVisual::Property::BORDERLINE_WIDTH] = 10.0f; // Don't care. just dummy
6569 callStack.Enable(true);
6571 // Update Properties with CornerRadius
6572 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap);
6574 Property::Map resultMap;
6575 imageVisual.CreatePropertyMap(resultMap);
6577 // Test property values: they should be updated
6578 Property::Value* blurRadiusValue = resultMap.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
6579 DALI_TEST_CHECK(blurRadiusValue);
6580 DALI_TEST_EQUALS(blurRadiusValue->Get<float>(), targetBlurRadius, TEST_LOCATION);
6582 Property::Value* cornerRadiusValue = resultMap.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6583 DALI_TEST_CHECK(cornerRadiusValue);
6584 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), targetCornerRadius, TEST_LOCATION);
6586 TestShaderCodeContainSubstringsForEachShader(
6589 {"#define IS_REQUIRED_BLUR", {true, true}},
6590 {"#define IS_REQUIRED_BORDERLINE", {false, false}}, // Note : We ignore borderline when blur radius occured
6591 {"#define IS_REQUIRED_ROUNDED_CORNER", {true, true}},
6592 {"#define SL_VERSION_LOW", {false, true}},
6596 // Send shader compile signal
6597 application.SendNotification();
6598 application.Render();
6600 callStack.Enable(false);
6603 DALI_TEST_CHECK((callStack.FindMethod("CreateShader")));
6605 callStack.Enable(true);
6607 Property::Map targetPropertyMap2;
6608 targetPropertyMap2[DevelColorVisual::Property::BLUR_RADIUS] = 0.0f;
6609 targetPropertyMap2[DevelVisual::Property::CORNER_RADIUS] = Vector4::ZERO;
6610 targetPropertyMap2[DevelVisual::Property::BORDERLINE_WIDTH] = 15.0f; // Don't care. just dummy
6612 // Update Properties with CornerRadius
6613 DevelControl::DoAction(dummyControl, DummyControl::Property::TEST_VISUAL, DevelVisual::Action::UPDATE_PROPERTY, targetPropertyMap2);
6615 Property::Map resultMap2;
6616 imageVisual.CreatePropertyMap(resultMap2);
6618 // Test property values: they should be updated
6619 blurRadiusValue = resultMap2.Find(DevelColorVisual::Property::BLUR_RADIUS, Property::FLOAT);
6620 DALI_TEST_CHECK(blurRadiusValue);
6621 DALI_TEST_EQUALS(blurRadiusValue->Get<float>(), 0.0f, TEST_LOCATION);
6623 cornerRadiusValue = resultMap2.Find(DevelVisual::Property::CORNER_RADIUS, Property::VECTOR4);
6624 DALI_TEST_CHECK(cornerRadiusValue);
6625 DALI_TEST_EQUALS(cornerRadiusValue->Get<Vector4>(), Vector4::ZERO, TEST_LOCATION);
6627 TestShaderCodeContainSubstringsForEachShader(
6630 {"#define IS_REQUIRED_BLUR", {true, true}}, // Note : mAlwaysUsingBlurRadius is true.
6631 {"#define IS_REQUIRED_BORDERLINE", {false, false}}, // Note : We ignore borderline when blur radius occured
6632 {"#define IS_REQUIRED_ROUNDED_CORNER", {true, true}}, // Note : mAlwaysUsingCornerRadius is true.
6633 {"#define SL_VERSION_LOW", {false, true}},
6637 // Send shader compile signal
6638 application.SendNotification();
6639 application.Render();
6641 callStack.Enable(false);
6643 // Shader not changed
6644 DALI_TEST_CHECK(!(callStack.FindMethod("CreateShader")));
6648 DALI_TEST_CHECK(false);
6651 // Revert shader version. We should revert it even if UTC failed.
6652 application.GetGlAbstraction().mShaderLanguageVersion = originalShaderVersion;