2 * Copyright (c) 2015 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.
19 #include <dali-toolkit-test-suite-utils.h>
20 #include <dali/devel-api/rendering/renderer.h>
21 #include <dali/devel-api/rendering/material.h>
22 #include <dali/devel-api/rendering/shader.h>
23 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
26 using namespace Dali::Toolkit;
30 typedef NinePatchImage::StretchRanges StretchRanges;
32 const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg";
33 const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.jpg";
35 Integration::Bitmap* CreateBitmap( unsigned int imageWidth, unsigned int imageHeight, unsigned int initialColor, Pixel::Format pixelFormat )
37 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
38 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
39 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
41 memset( pixbuffer, initialColor, imageHeight * imageWidth * bytesPerPixel );
46 void InitialiseRegionsToZeroAlpha( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
48 PixelBuffer* pixbuffer = image->GetBuffer();
49 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
51 for( unsigned int row = 0; row < imageWidth; ++row )
53 unsigned int pixelOffset = row * bytesPerPixel;
54 pixbuffer[ pixelOffset + 3 ] = 0x00;
55 pixelOffset += ( imageHeight - 1 ) * imageWidth * bytesPerPixel;
56 pixbuffer[ pixelOffset + 3 ] = 0x00;
59 for ( unsigned int column = 0; column < imageHeight; ++column )
61 unsigned int pixelOffset = column * imageWidth * bytesPerPixel;
62 pixbuffer[ pixelOffset + 3 ] = 0x00;
63 pixelOffset += ( imageWidth -1 ) * bytesPerPixel;
64 pixbuffer[ pixelOffset + 3 ] = 0x00;
68 void AddStretchRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const StretchRanges& stretchRangesX, const StretchRanges& stretchRangesY, Pixel::Format pixelFormat )
70 PixelBuffer* pixbuffer = image->GetBuffer();
71 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
73 for(StretchRanges::ConstIterator it = stretchRangesX.Begin(); it != stretchRangesX.End(); ++it)
75 const Uint16Pair& range = *it;
76 //since the stretch range is in the cropped image space, we need to offset by 1 to get it to the uncropped image space
77 for( unsigned int column = range.GetX() + 1u; column < range.GetY() + 1u; ++column )
79 unsigned int pixelOffset = column * bytesPerPixel;
80 pixbuffer[ pixelOffset ] = 0x00;
81 pixbuffer[ pixelOffset + 1 ] = 0x00;
82 pixbuffer[ pixelOffset + 2 ] = 0x00;
83 pixbuffer[ pixelOffset + 3 ] = 0xFF;
88 for(StretchRanges::ConstIterator it = stretchRangesY.Begin(); it != stretchRangesY.End(); ++it)
90 const Uint16Pair& range = *it;
91 //since the stretch range is in the cropped image space, we need to offset by 1 to get it to the uncropped image space
92 for( unsigned int row = range.GetX() + 1u; row < range.GetY() + 1u; ++row )
94 unsigned int pixelOffset = row * imageWidth * bytesPerPixel;
95 pixbuffer[ pixelOffset ] = 0x00;
96 pixbuffer[ pixelOffset + 1 ] = 0x00;
97 pixbuffer[ pixelOffset + 2 ] = 0x00;
98 pixbuffer[ pixelOffset + 3 ] = 0xFF;
103 void AddChildRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const Vector4& requiredChildRegion, Pixel::Format pixelFormat )
105 PixelBuffer* pixbuffer = image->GetBuffer();
106 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
108 Integration::Bitmap::PackedPixelsProfile* srcProfile = image->GetPackedPixelsProfile();
109 unsigned int bufferStride = srcProfile->GetBufferStride();
111 // Add bottom child region
112 for( unsigned int column = requiredChildRegion.x; column < imageWidth - requiredChildRegion.z; ++column )
114 unsigned int pixelOffset = column * bytesPerPixel;
115 pixelOffset += ( imageHeight - 1 ) * bufferStride;
116 pixbuffer[ pixelOffset ] = 0x00;
117 pixbuffer[ pixelOffset + 1 ] = 0x00;
118 pixbuffer[ pixelOffset + 2 ] = 0x00;
119 pixbuffer[ pixelOffset + 3 ] = 0xFF;
122 // Add right child region
123 for ( unsigned int row = requiredChildRegion.y; row < imageHeight - requiredChildRegion.w; ++row )
125 unsigned int pixelOffset = row * bufferStride + ( imageWidth - 1 ) * bytesPerPixel;
126 pixbuffer[ pixelOffset ] = 0x00;
127 pixbuffer[ pixelOffset + 1 ] = 0x00;
128 pixbuffer[ pixelOffset + 2 ] = 0x00;
129 pixbuffer[ pixelOffset + 3 ] = 0xFF;
133 Integration::ResourcePointer CustomizeNinePatch( TestApplication& application,
134 unsigned int ninePatchImageWidth,
135 unsigned int ninePatchImageHeight,
136 const StretchRanges& stretchRangesX,
137 const StretchRanges& stretchRangesY,
138 bool addChildRegion = false,
139 Vector4 requiredChildRegion = Vector4::ZERO )
141 TestPlatformAbstraction& platform = application.GetPlatform();
143 Pixel::Format pixelFormat = Pixel::RGBA8888;
145 tet_infoline("Create Bitmap");
146 platform.SetClosestImageSize(Vector2( ninePatchImageWidth, ninePatchImageHeight));
147 Integration::Bitmap* bitmap = CreateBitmap( ninePatchImageWidth, ninePatchImageHeight, 0xFF, pixelFormat );
149 tet_infoline("Clear border regions");
150 InitialiseRegionsToZeroAlpha( bitmap, ninePatchImageWidth, ninePatchImageHeight, pixelFormat );
152 tet_infoline("Add Stretch regions to Bitmap");
153 AddStretchRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY, pixelFormat );
157 tet_infoline("Add Child regions to Bitmap");
158 AddChildRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, requiredChildRegion, pixelFormat );
161 tet_infoline("Getting resource");
162 Integration::ResourcePointer resourcePtr(bitmap);
163 platform.SetResourceLoaded( 0, Dali::Integration::ResourceBitmap, resourcePtr );
168 void TestControlRendererRender( ToolkitTestApplication& application, Actor& actor, ControlRenderer& controlRenderer, Integration::ResourcePointer resourcePtr = Integration::ResourcePointer(), std::size_t expectedSamplers = 0)
170 actor.SetSize( 200.f, 200.f );
171 Stage::GetCurrent().Add( actor );
172 controlRenderer.SetSize( Vector2(200.f, 200.f) );
173 controlRenderer.SetOnStage( actor );
175 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
176 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfSamplers() == expectedSamplers );
178 application.SendNotification();
179 application.Render();
183 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
186 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resourcePtr );
190 application.Render();
191 application.SendNotification();
195 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
198 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
205 void dali_renderer_factory_startup(void)
207 test_return_value = TET_UNDEF;
210 void dali_renderer_factory_cleanup(void)
212 test_return_value = TET_PASS;
215 int UtcDaliRendererFactoryGet(void)
217 ToolkitTestApplication application;
218 tet_infoline( "UtcDaliRendererFactory" );
222 type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
223 DALI_TEST_CHECK( type );
224 BaseHandle handle = type.CreateInstance();
225 DALI_TEST_CHECK( handle );
227 RendererFactory factory;
228 factory = RendererFactory::Get();
229 DALI_TEST_CHECK( factory );
231 RendererFactory newFactory = RendererFactory::Get();
232 DALI_TEST_CHECK( newFactory );
234 // Check that renderer factory is a singleton
235 DALI_TEST_CHECK(factory == newFactory);
240 int UtcDaliRendererFactoryCopyAndAssignment(void)
242 ToolkitTestApplication application;
243 tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
244 RendererFactory factory = RendererFactory::Get();
246 RendererFactory factoryCopy( factory );
247 DALI_TEST_CHECK(factory == factoryCopy);
249 RendererFactory emptyFactory;
250 RendererFactory emptyFactoryCopy( emptyFactory );
251 DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
253 RendererFactory factoryEquals;
254 factoryEquals = factory;
255 DALI_TEST_CHECK(factory == factoryEquals);
257 RendererFactory emptyFactoryEquals;
258 emptyFactoryEquals = emptyFactory;
259 DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
263 DALI_TEST_CHECK( factory = factoryCopy );
268 int UtcDaliRendererFactoryGetColorRenderer1(void)
270 ToolkitTestApplication application;
271 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1: Request color renderer with a Property::Map" );
273 RendererFactory factory = RendererFactory::Get();
274 DALI_TEST_CHECK( factory );
276 Property::Map propertyMap;
277 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
278 propertyMap.Insert("renderer-type", "color-renderer");
279 propertyMap.Insert("blend-color", testColor);
281 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
282 DALI_TEST_CHECK( controlRenderer );
284 Actor actor = Actor::New();
285 TestControlRendererRender( application, actor, controlRenderer );
287 Vector4 actualValue(Vector4::ZERO);
288 TestGlAbstraction& gl = application.GetGlAbstraction();
289 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
290 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
295 int UtcDaliRendererFactoryGetColorRenderer2(void)
297 ToolkitTestApplication application;
298 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" );
300 RendererFactory factory = RendererFactory::Get();
301 DALI_TEST_CHECK( factory );
303 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
304 ControlRenderer controlRenderer = factory.GetControlRenderer(testColor);
305 DALI_TEST_CHECK( controlRenderer );
307 Actor actor = Actor::New();
308 TestControlRendererRender( application, actor, controlRenderer );
310 Vector4 actualValue(Vector4::ZERO);
311 TestGlAbstraction& gl = application.GetGlAbstraction();
312 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
313 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
315 controlRenderer.SetOffStage( actor );
316 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
321 int UtcDaliRendererFactoryGetBorderRenderer1(void)
323 ToolkitTestApplication application;
324 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer1: Request border renderer with a Property::Map" );
326 RendererFactory factory = RendererFactory::Get();
327 DALI_TEST_CHECK( factory );
329 Property::Map propertyMap;
330 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
331 float testSize = 5.f;
332 propertyMap.Insert("renderer-type", "border-renderer");
333 propertyMap.Insert("border-color", testColor);
334 propertyMap.Insert("border-size", testSize);
336 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
337 DALI_TEST_CHECK( controlRenderer );
339 Actor actor = Actor::New();
340 actor.SetSize(200.f, 200.f);
341 Stage::GetCurrent().Add( actor );
342 controlRenderer.SetSize(Vector2(200.f, 200.f));
343 controlRenderer.SetOnStage( actor );
345 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
347 TestGlAbstraction& gl = application.GetGlAbstraction();
349 application.SendNotification();
350 application.Render(0);
352 Vector4 actualColor(Vector4::ZERO);
353 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBorderColor", actualColor ) );
354 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
356 float actualSize = 0.f;
357 DALI_TEST_CHECK( gl.GetUniformValue<float>( "uBorderSize", actualSize ) );
358 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
360 controlRenderer.SetOffStage( actor );
361 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
366 int UtcDaliRendererFactoryGetBorderRenderer2(void)
368 ToolkitTestApplication application;
369 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer2: Request border renderer with a borderSize and a borderColor" );
371 RendererFactory factory = RendererFactory::Get();
372 DALI_TEST_CHECK( factory );
374 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
375 float testSize = 5.f;
377 ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor);
378 DALI_TEST_CHECK( controlRenderer );
380 Actor actor = Actor::New();
381 actor.SetSize(200.f, 200.f);
382 Stage::GetCurrent().Add( actor );
383 controlRenderer.SetSize(Vector2(200.f, 200.f));
384 controlRenderer.SetOnStage( actor );
386 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
388 TestGlAbstraction& gl = application.GetGlAbstraction();
390 application.SendNotification();
391 application.Render(0);
393 Vector4 actualColor(Vector4::ZERO);
394 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBorderColor", actualColor ) );
395 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
397 float actualSize = 0.f;
398 DALI_TEST_CHECK( gl.GetUniformValue<float>( "uBorderSize", actualSize ) );
399 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
405 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
407 ToolkitTestApplication application;
408 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
410 RendererFactory factory = RendererFactory::Get();
411 DALI_TEST_CHECK( factory );
413 Property::Map propertyMap;
414 propertyMap.Insert("renderer-type", "gradient-renderer");
416 Vector2 start(-1.f, -1.f);
417 Vector2 end(1.f, 1.f);
418 propertyMap.Insert("gradient-start-position", start);
419 propertyMap.Insert("gradient-end-position", end);
420 propertyMap.Insert("gradient-spread-method", "repeat");
422 Property::Array stopOffsets;
423 stopOffsets.PushBack( 0.2f );
424 stopOffsets.PushBack( 0.8f );
425 propertyMap.Insert("gradient-stop-offset", stopOffsets);
427 Property::Array stopColors;
428 stopColors.PushBack( Color::RED );
429 stopColors.PushBack( Color::GREEN );
430 propertyMap.Insert("gradient-stop-color", stopColors);
432 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
433 DALI_TEST_CHECK( controlRenderer );
435 // A lookup texture is generated and pass to shader as sampler
436 Actor actor = Actor::New();
437 TestControlRendererRender( application, actor, controlRenderer, Integration::ResourcePointer(), 1u );
439 controlRenderer.SetOffStage( actor );
440 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
445 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
447 ToolkitTestApplication application;
448 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
450 RendererFactory factory = RendererFactory::Get();
451 DALI_TEST_CHECK( factory );
453 Property::Map propertyMap;
454 propertyMap.Insert("renderer-type", "gradient-renderer");
456 Vector2 center(100.f, 100.f);
457 float radius = 100.f;
458 propertyMap.Insert("gradient-units", "user-space");
459 propertyMap.Insert("gradient-center", center);
460 propertyMap.Insert("gradient-radius", radius);
462 Property::Array stopOffsets;
463 stopOffsets.PushBack( 0.0f );
464 stopOffsets.PushBack( 1.f );
465 propertyMap.Insert("gradient-stop-offset", stopOffsets);
467 Property::Array stopColors;
468 stopColors.PushBack( Color::RED );
469 stopColors.PushBack( Color::GREEN );
470 propertyMap.Insert("gradient-stop-color", stopColors);
472 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
473 DALI_TEST_CHECK( controlRenderer );
475 // A lookup texture is generated and pass to shader as sampler
476 Actor actor = Actor::New();
477 TestControlRendererRender( application, actor, controlRenderer, Integration::ResourcePointer(), 1u );
479 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
480 alignMatrix.Invert();
482 Matrix3 actualValue( Matrix3::IDENTITY );
483 TestGlAbstraction& gl = application.GetGlAbstraction();
484 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
485 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
490 int UtcDaliRendererFactoryGetImageRenderer1(void)
492 ToolkitTestApplication application;
493 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
495 RendererFactory factory = RendererFactory::Get();
496 DALI_TEST_CHECK( factory );
498 Property::Map propertyMap;
499 propertyMap.Insert( "renderer-type", "image-renderer" );
500 propertyMap.Insert( "image-url", TEST_IMAGE_FILE_NAME );
502 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
503 DALI_TEST_CHECK( controlRenderer );
505 Actor actor = Actor::New();
506 TestControlRendererRender( application, actor, controlRenderer, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)), 1u );
508 TestGlAbstraction& gl = application.GetGlAbstraction();
509 int textureUnit = -1;
510 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
511 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
513 controlRenderer.SetOffStage( actor );
514 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
519 int UtcDaliRendererFactoryGetImageRenderer2(void)
521 ToolkitTestApplication application;
522 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
524 RendererFactory factory = RendererFactory::Get();
525 DALI_TEST_CHECK( factory );
527 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
528 ControlRenderer controlRenderer = factory.GetControlRenderer( image );
530 Actor actor = Actor::New();
531 TestControlRendererRender( application, actor, controlRenderer, Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)), 1u );
533 TestGlAbstraction& gl = application.GetGlAbstraction();
534 int textureUnit = -1;
535 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
536 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
541 int UtcDaliRendererFactoryGetNPatchRenderer1(void)
543 ToolkitTestApplication application;
544 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request 9-patch renderer with a Property::Map" );
546 RendererFactory factory = RendererFactory::Get();
547 DALI_TEST_CHECK( factory );
549 const unsigned int ninePatchImageHeight = 18;
550 const unsigned int ninePatchImageWidth = 28;
551 StretchRanges stretchRangesX;
552 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
553 StretchRanges stretchRangesY;
554 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
555 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
557 Property::Map propertyMap;
558 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
559 propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
561 tet_infoline( "whole grid" );
562 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
563 DALI_TEST_CHECK( controlRenderer );
565 Actor actor = Actor::New();
566 TestControlRendererRender( application, actor, controlRenderer, ninePatchResource, 1u );
568 TestGlAbstraction& gl = application.GetGlAbstraction();
569 int textureUnit = -1;
570 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
571 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
574 propertyMap.Insert( "border-only", true );
576 tet_infoline( "border only" );
577 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
578 DALI_TEST_CHECK( controlRenderer );
580 Actor actor = Actor::New();
581 TestControlRendererRender( application, actor, controlRenderer, ninePatchResource, 1u );
583 TestGlAbstraction& gl = application.GetGlAbstraction();
584 int textureUnit = -1;
585 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
586 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
592 int UtcDaliRendererFactoryGetNPatchRenderer2(void)
594 ToolkitTestApplication application;
595 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with a Property::Map" );
597 RendererFactory factory = RendererFactory::Get();
598 DALI_TEST_CHECK( factory );
600 const unsigned int ninePatchImageWidth = 18;
601 const unsigned int ninePatchImageHeight = 28;
602 StretchRanges stretchRangesX;
603 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
604 stretchRangesX.PushBack( Uint16Pair( 5, 7 ) );
605 stretchRangesX.PushBack( Uint16Pair( 12, 15 ) );
606 StretchRanges stretchRangesY;
607 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
608 stretchRangesY.PushBack( Uint16Pair( 8, 12 ) );
609 stretchRangesY.PushBack( Uint16Pair( 15, 16 ) );
610 stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
611 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
613 Property::Map propertyMap;
614 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
615 propertyMap.Insert( "image-url", TEST_NPATCH_FILE_NAME );
617 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
618 DALI_TEST_CHECK( controlRenderer );
620 Actor actor = Actor::New();
621 TestControlRendererRender( application, actor, controlRenderer, ninePatchResource, 1u );
623 TestGlAbstraction& gl = application.GetGlAbstraction();
624 int textureUnit = -1;
625 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
626 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
628 controlRenderer.SetOffStage( actor );
629 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
632 propertyMap.Insert( "border-only", true );
634 tet_infoline( "border only" );
635 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
636 DALI_TEST_CHECK( controlRenderer );
638 Actor actor = Actor::New();
639 TestControlRendererRender( application, actor, controlRenderer, ninePatchResource, 1u );
641 TestGlAbstraction& gl = application.GetGlAbstraction();
642 int textureUnit = -1;
643 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
644 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
646 controlRenderer.SetOffStage( actor );
647 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
653 int UtcDaliRendererFactoryGetNPatchRenderer3(void)
655 ToolkitTestApplication application;
656 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer3: Request 9-patch renderer with an image url" );
658 RendererFactory factory = RendererFactory::Get();
659 DALI_TEST_CHECK( factory );
661 const unsigned int ninePatchImageHeight = 18;
662 const unsigned int ninePatchImageWidth = 28;
663 StretchRanges stretchRangesX;
664 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
665 StretchRanges stretchRangesY;
666 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
667 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
669 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
670 DALI_TEST_CHECK( controlRenderer );
672 Actor actor = Actor::New();
673 TestControlRendererRender( application, actor, controlRenderer, ninePatchResource, 1u );
675 TestGlAbstraction& gl = application.GetGlAbstraction();
676 int textureUnit = -1;
677 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
678 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
683 int UtcDaliRendererFactoryGetNPatchRenderer4(void)
685 ToolkitTestApplication application;
686 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer4: Request n-patch renderer with an image url" );
688 RendererFactory factory = RendererFactory::Get();
689 DALI_TEST_CHECK( factory );
691 const unsigned int ninePatchImageHeight = 18;
692 const unsigned int ninePatchImageWidth = 28;
693 StretchRanges stretchRangesX;
694 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
695 stretchRangesX.PushBack( Uint16Pair( 5, 7 ) );
696 stretchRangesX.PushBack( Uint16Pair( 12, 15 ) );
697 StretchRanges stretchRangesY;
698 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
699 stretchRangesY.PushBack( Uint16Pair( 8, 12 ) );
700 stretchRangesY.PushBack( Uint16Pair( 15, 16 ) );
701 stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
702 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
704 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
705 DALI_TEST_CHECK( controlRenderer );
707 Actor actor = Actor::New();
708 TestControlRendererRender( application, actor, controlRenderer, ninePatchResource, 1u );
710 TestGlAbstraction& gl = application.GetGlAbstraction();
711 int textureUnit = -1;
712 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
713 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
718 int UtcDaliRendererFactoryGetNPatchRendererN1(void)
720 //This should still load but display an error image
722 ToolkitTestApplication application;
723 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
725 RendererFactory factory = RendererFactory::Get();
726 DALI_TEST_CHECK( factory );
728 ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
729 DALI_TEST_CHECK( controlRenderer );
731 Actor actor = Actor::New();
732 TestControlRendererRender( application, actor, controlRenderer, Integration::ResourcePointer(), 1u );
734 TestGlAbstraction& gl = application.GetGlAbstraction();
735 int textureUnit = -1;
736 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
737 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
742 int UtcDaliRendererFactoryGetNPatchRendererN2(void)
744 //This should still load but display an error image
746 ToolkitTestApplication application;
747 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
749 RendererFactory factory = RendererFactory::Get();
750 DALI_TEST_CHECK( factory );
752 Property::Map propertyMap;
753 propertyMap.Insert( "renderer-type", "n-patch-renderer" );
754 propertyMap.Insert( "image-url", 111 );
756 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
757 DALI_TEST_CHECK( controlRenderer );
759 Actor actor = Actor::New();
760 TestControlRendererRender( application, actor, controlRenderer, Integration::ResourcePointer(), 1u );
762 TestGlAbstraction& gl = application.GetGlAbstraction();
763 int textureUnit = -1;
764 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
765 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
770 int UtcDaliRendererFactoryResetRenderer1(void)
772 ToolkitTestApplication application;
773 tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
775 RendererFactory factory = RendererFactory::Get();
776 DALI_TEST_CHECK( factory );
778 ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
779 DALI_TEST_CHECK( controlRenderer );
781 Actor actor = Actor::New();
782 TestControlRendererRender( application, actor, controlRenderer );
784 Vector4 actualValue(Vector4::ZERO);
785 TestGlAbstraction& gl = application.GetGlAbstraction();
786 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
787 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
789 bool isNewRenderer = factory.ResetRenderer( controlRenderer, Color::GREEN );
790 DALI_TEST_CHECK( !isNewRenderer );
791 application.SendNotification();
792 application.Render(0);
793 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
794 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
796 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
797 isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
798 DALI_TEST_CHECK( isNewRenderer );
800 Actor actor2 = Actor::New();
801 actor2.SetSize(200.f, 200.f);
802 Stage::GetCurrent().Add( actor2 );
803 controlRenderer.SetSize(Vector2(200.f, 200.f));
804 controlRenderer.SetOnStage( actor2 );
805 application.SendNotification();
806 application.Render(0);
807 Image samplerImage = actor2.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
808 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
813 int UtcDaliRendererFactoryResetRenderer2(void)
815 ToolkitTestApplication application;
816 tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
818 Actor actor = Actor::New();
819 actor.SetSize(200.f, 200.f);
820 Stage::GetCurrent().Add( actor );
821 RendererFactory factory = RendererFactory::Get();
822 DALI_TEST_CHECK( factory );
824 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
825 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
826 DALI_TEST_CHECK( controlRenderer );
827 controlRenderer.SetSize(Vector2(200.f, 200.f));
828 controlRenderer.SetOnStage( actor );
829 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
831 application.SendNotification();
832 application.Render(0);
833 Image samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
834 DALI_TEST_CHECK( ResourceImage::DownCast( samplerImage ) );
836 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
837 bool isNewRenderer = factory.ResetRenderer( controlRenderer, bufferImage );
838 DALI_TEST_CHECK( !isNewRenderer );
839 application.SendNotification();
840 application.Render(0);
841 samplerImage = actor.GetRendererAt(0u).GetMaterial().GetSamplerAt(0u).GetImage();
842 DALI_TEST_CHECK( BufferImage::DownCast( samplerImage ) );
844 isNewRenderer = factory.ResetRenderer( controlRenderer, Color::RED );
845 DALI_TEST_CHECK( isNewRenderer );
847 Actor actor2 = Actor::New();
848 actor2.SetSize(200.f, 200.f);
849 Stage::GetCurrent().Add( actor2 );
850 controlRenderer.SetSize(Vector2(200.f, 200.f));
851 controlRenderer.SetOnStage( actor2 );
852 TestGlAbstraction& gl = application.GetGlAbstraction();
853 application.SendNotification();
854 application.Render(0);
855 Vector4 actualValue(Vector4::ZERO);
856 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "uBlendColor", actualValue ) );
857 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );