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,
170 ControlRenderer& controlRenderer,
171 std::size_t expectedSamplers = 0,
172 ImageDimensions imageDimensions = ImageDimensions(),
173 Integration::ResourcePointer resourcePtr = Integration::ResourcePointer())
177 // set the image size, for test case, this needs to be set before loading started
178 application.GetPlatform().SetClosestImageSize( Vector2(imageDimensions.GetWidth(), imageDimensions.GetHeight()) );
181 actor.SetSize( 200.f, 200.f );
182 Stage::GetCurrent().Add( actor );
183 controlRenderer.SetSize( Vector2(200.f, 200.f) );
184 controlRenderer.SetOnStage( actor );
186 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
187 DALI_TEST_CHECK( actor.GetRendererAt(0u).GetMaterial().GetNumberOfTextures() == expectedSamplers );
189 application.SendNotification();
190 application.Render();
194 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
197 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resourcePtr );
201 application.Render();
202 application.SendNotification();
206 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
209 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
216 void dali_renderer_factory_startup(void)
218 test_return_value = TET_UNDEF;
221 void dali_renderer_factory_cleanup(void)
223 test_return_value = TET_PASS;
226 int UtcDaliRendererFactoryGet(void)
228 ToolkitTestApplication application;
229 tet_infoline( "UtcDaliRendererFactory" );
233 type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
234 DALI_TEST_CHECK( type );
235 BaseHandle handle = type.CreateInstance();
236 DALI_TEST_CHECK( handle );
238 RendererFactory factory;
239 factory = RendererFactory::Get();
240 DALI_TEST_CHECK( factory );
242 RendererFactory newFactory = RendererFactory::Get();
243 DALI_TEST_CHECK( newFactory );
245 // Check that renderer factory is a singleton
246 DALI_TEST_CHECK(factory == newFactory);
251 int UtcDaliRendererFactoryCopyAndAssignment(void)
253 ToolkitTestApplication application;
254 tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
255 RendererFactory factory = RendererFactory::Get();
257 RendererFactory factoryCopy( factory );
258 DALI_TEST_CHECK(factory == factoryCopy);
260 RendererFactory emptyFactory;
261 RendererFactory emptyFactoryCopy( emptyFactory );
262 DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
264 RendererFactory factoryEquals;
265 factoryEquals = factory;
266 DALI_TEST_CHECK(factory == factoryEquals);
268 RendererFactory emptyFactoryEquals;
269 emptyFactoryEquals = emptyFactory;
270 DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
274 DALI_TEST_CHECK( factory = factoryCopy );
279 int UtcDaliRendererFactoryGetColorRenderer1(void)
281 ToolkitTestApplication application;
282 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1: Request color renderer with a Property::Map" );
284 RendererFactory factory = RendererFactory::Get();
285 DALI_TEST_CHECK( factory );
287 Property::Map propertyMap;
288 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
289 propertyMap.Insert("rendererType", "colorRenderer");
290 propertyMap.Insert("blendColor", testColor);
292 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
293 DALI_TEST_CHECK( controlRenderer );
295 Actor actor = Actor::New();
296 TestControlRendererRender( application, actor, controlRenderer );
298 Vector4 actualValue(Vector4::ZERO);
299 TestGlAbstraction& gl = application.GetGlAbstraction();
300 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
301 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
306 int UtcDaliRendererFactoryGetColorRenderer2(void)
308 ToolkitTestApplication application;
309 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" );
311 RendererFactory factory = RendererFactory::Get();
312 DALI_TEST_CHECK( factory );
314 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
315 ControlRenderer controlRenderer = factory.GetControlRenderer(testColor);
316 DALI_TEST_CHECK( controlRenderer );
318 Actor actor = Actor::New();
319 TestControlRendererRender( application, actor, controlRenderer );
321 Vector4 actualValue(Vector4::ZERO);
322 TestGlAbstraction& gl = application.GetGlAbstraction();
323 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
324 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
326 controlRenderer.SetOffStage( actor );
327 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
332 int UtcDaliRendererFactoryGetBorderRenderer1(void)
334 ToolkitTestApplication application;
335 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer1: Request border renderer with a Property::Map" );
337 RendererFactory factory = RendererFactory::Get();
338 DALI_TEST_CHECK( factory );
340 Property::Map propertyMap;
341 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
342 float testSize = 5.f;
343 propertyMap.Insert("rendererType", "borderRenderer");
344 propertyMap.Insert("borderColor", testColor);
345 propertyMap.Insert("borderSize", testSize);
347 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
348 DALI_TEST_CHECK( controlRenderer );
350 Actor actor = Actor::New();
351 actor.SetSize(200.f, 200.f);
352 Stage::GetCurrent().Add( actor );
353 controlRenderer.SetSize(Vector2(200.f, 200.f));
354 controlRenderer.SetOnStage( actor );
356 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
358 TestGlAbstraction& gl = application.GetGlAbstraction();
360 application.SendNotification();
361 application.Render(0);
363 Vector4 actualColor(Vector4::ZERO);
364 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "borderColor", actualColor ) );
365 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
367 float actualSize = 0.f;
368 DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
369 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
371 controlRenderer.SetOffStage( actor );
372 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
377 int UtcDaliRendererFactoryGetBorderRenderer2(void)
379 ToolkitTestApplication application;
380 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer2: Request border renderer with a borderSize and a borderColor" );
382 RendererFactory factory = RendererFactory::Get();
383 DALI_TEST_CHECK( factory );
385 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
386 float testSize = 5.f;
388 ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor);
389 DALI_TEST_CHECK( controlRenderer );
391 Actor actor = Actor::New();
392 actor.SetSize(200.f, 200.f);
393 Stage::GetCurrent().Add( actor );
394 controlRenderer.SetSize(Vector2(200.f, 200.f));
395 controlRenderer.SetOnStage( actor );
397 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
399 TestGlAbstraction& gl = application.GetGlAbstraction();
401 application.SendNotification();
402 application.Render(0);
404 Vector4 actualColor(Vector4::ZERO);
405 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "borderColor", actualColor ) );
406 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
408 float actualSize = 0.f;
409 DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
410 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
416 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
418 ToolkitTestApplication application;
419 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
421 RendererFactory factory = RendererFactory::Get();
422 DALI_TEST_CHECK( factory );
424 Property::Map propertyMap;
425 propertyMap.Insert("rendererType", "gradientRenderer");
427 Vector2 start(-1.f, -1.f);
428 Vector2 end(1.f, 1.f);
429 propertyMap.Insert("gradientStartPosition", start);
430 propertyMap.Insert("gradientEndPosition", end);
431 propertyMap.Insert("gradientSpreadMethod", "repeat");
433 Property::Array stopOffsets;
434 stopOffsets.PushBack( 0.2f );
435 stopOffsets.PushBack( 0.8f );
436 propertyMap.Insert("gradientStopOffset", stopOffsets);
438 Property::Array stopColors;
439 stopColors.PushBack( Color::RED );
440 stopColors.PushBack( Color::GREEN );
441 propertyMap.Insert("gradientStopColor", stopColors);
443 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
444 DALI_TEST_CHECK( controlRenderer );
446 // A lookup texture is generated and pass to shader as sampler
447 Actor actor = Actor::New();
448 TestControlRendererRender( application, actor, controlRenderer, 1u );
450 controlRenderer.SetOffStage( actor );
451 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
456 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
458 ToolkitTestApplication application;
459 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
461 RendererFactory factory = RendererFactory::Get();
462 DALI_TEST_CHECK( factory );
464 Property::Map propertyMap;
465 propertyMap.Insert("rendererType", "gradientRenderer");
467 Vector2 center(100.f, 100.f);
468 float radius = 100.f;
469 propertyMap.Insert("gradientUnits", "userSpace");
470 propertyMap.Insert("gradientCenter", center);
471 propertyMap.Insert("gradientRadius", radius);
473 Property::Array stopOffsets;
474 stopOffsets.PushBack( 0.0f );
475 stopOffsets.PushBack( 1.f );
476 propertyMap.Insert("gradientStopOffset", stopOffsets);
478 Property::Array stopColors;
479 stopColors.PushBack( Color::RED );
480 stopColors.PushBack( Color::GREEN );
481 propertyMap.Insert("gradientStopColor", stopColors);
483 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
484 DALI_TEST_CHECK( controlRenderer );
486 // A lookup texture is generated and pass to shader as sampler
487 Actor actor = Actor::New();
488 TestControlRendererRender( application, actor, controlRenderer, 1u );
490 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
491 alignMatrix.Invert();
493 Matrix3 actualValue( Matrix3::IDENTITY );
494 TestGlAbstraction& gl = application.GetGlAbstraction();
495 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
496 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
501 int UtcDaliRendererFactoryGetImageRenderer1(void)
503 ToolkitTestApplication application;
504 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
506 RendererFactory factory = RendererFactory::Get();
507 DALI_TEST_CHECK( factory );
509 Property::Map propertyMap;
510 propertyMap.Insert( "rendererType", "imageRenderer" );
511 propertyMap.Insert( "imageUrl", TEST_IMAGE_FILE_NAME );
513 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
514 DALI_TEST_CHECK( controlRenderer );
516 Actor actor = Actor::New();
517 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
518 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
519 TestControlRendererRender( application, actor, controlRenderer, 1u,
520 ImageDimensions(512, 513),
521 Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)));
523 TestGlAbstraction& gl = application.GetGlAbstraction();
524 int textureUnit = -1;
525 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
526 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
528 controlRenderer.SetOffStage( actor );
529 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
534 int UtcDaliRendererFactoryGetImageRenderer2(void)
536 ToolkitTestApplication application;
537 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
539 RendererFactory factory = RendererFactory::Get();
540 DALI_TEST_CHECK( factory );
542 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
543 ControlRenderer controlRenderer = factory.GetControlRenderer( image );
545 Actor actor = Actor::New();
546 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
547 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
548 TestControlRendererRender( application, actor, controlRenderer, 1u,
549 ImageDimensions(512, 513),
550 Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)) );
552 TestGlAbstraction& gl = application.GetGlAbstraction();
553 int textureUnit = -1;
554 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
555 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
560 int UtcDaliRendererFactoryGetNPatchRenderer1(void)
562 ToolkitTestApplication application;
563 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request 9-patch renderer with a Property::Map" );
565 RendererFactory factory = RendererFactory::Get();
566 DALI_TEST_CHECK( factory );
568 const unsigned int ninePatchImageHeight = 18;
569 const unsigned int ninePatchImageWidth = 28;
570 StretchRanges stretchRangesX;
571 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
572 StretchRanges stretchRangesY;
573 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
574 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
576 Property::Map propertyMap;
577 propertyMap.Insert( "rendererType", "nPatchRenderer" );
578 propertyMap.Insert( "imageUrl", TEST_NPATCH_FILE_NAME );
580 tet_infoline( "whole grid" );
581 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
582 DALI_TEST_CHECK( controlRenderer );
584 Actor actor = Actor::New();
585 TestControlRendererRender( application, actor, controlRenderer, 1u,
586 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
589 TestGlAbstraction& gl = application.GetGlAbstraction();
590 int textureUnit = -1;
591 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
592 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
595 propertyMap.Insert( "borderOnly", true );
597 tet_infoline( "border only" );
598 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
599 DALI_TEST_CHECK( controlRenderer );
601 Actor actor = Actor::New();
602 TestControlRendererRender( application, actor, controlRenderer, 1u,
603 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
606 TestGlAbstraction& gl = application.GetGlAbstraction();
607 int textureUnit = -1;
608 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
609 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
615 int UtcDaliRendererFactoryGetNPatchRenderer2(void)
617 ToolkitTestApplication application;
618 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with a Property::Map" );
620 RendererFactory factory = RendererFactory::Get();
621 DALI_TEST_CHECK( factory );
623 const unsigned int ninePatchImageWidth = 18;
624 const unsigned int ninePatchImageHeight = 28;
625 StretchRanges stretchRangesX;
626 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
627 stretchRangesX.PushBack( Uint16Pair( 5, 7 ) );
628 stretchRangesX.PushBack( Uint16Pair( 12, 15 ) );
629 StretchRanges stretchRangesY;
630 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
631 stretchRangesY.PushBack( Uint16Pair( 8, 12 ) );
632 stretchRangesY.PushBack( Uint16Pair( 15, 16 ) );
633 stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
634 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
636 Property::Map propertyMap;
637 propertyMap.Insert( "rendererType", "nPatchRenderer" );
638 propertyMap.Insert( "imageUrl", TEST_NPATCH_FILE_NAME );
640 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
641 DALI_TEST_CHECK( controlRenderer );
643 Actor actor = Actor::New();
644 TestControlRendererRender( application, actor, controlRenderer, 1u,
645 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
648 TestGlAbstraction& gl = application.GetGlAbstraction();
649 int textureUnit = -1;
650 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
651 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
653 controlRenderer.SetOffStage( actor );
654 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
657 propertyMap.Insert( "borderOnly", true );
659 tet_infoline( "border only" );
660 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
661 DALI_TEST_CHECK( controlRenderer );
663 Actor actor = Actor::New();
664 TestControlRendererRender( application, actor, controlRenderer, 1u,
665 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
668 TestGlAbstraction& gl = application.GetGlAbstraction();
669 int textureUnit = -1;
670 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
671 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
673 controlRenderer.SetOffStage( actor );
674 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
680 int UtcDaliRendererFactoryGetNPatchRenderer3(void)
682 ToolkitTestApplication application;
683 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer3: Request 9-patch renderer with an image url" );
685 RendererFactory factory = RendererFactory::Get();
686 DALI_TEST_CHECK( factory );
688 const unsigned int ninePatchImageHeight = 18;
689 const unsigned int ninePatchImageWidth = 28;
690 StretchRanges stretchRangesX;
691 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
692 StretchRanges stretchRangesY;
693 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
694 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
696 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
697 DALI_TEST_CHECK( controlRenderer );
699 Actor actor = Actor::New();
700 TestControlRendererRender( application, actor, controlRenderer, 1u,
701 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
704 TestGlAbstraction& gl = application.GetGlAbstraction();
705 int textureUnit = -1;
706 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
707 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
712 int UtcDaliRendererFactoryGetNPatchRenderer4(void)
714 ToolkitTestApplication application;
715 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer4: Request n-patch renderer with an image url" );
717 RendererFactory factory = RendererFactory::Get();
718 DALI_TEST_CHECK( factory );
720 const unsigned int ninePatchImageHeight = 18;
721 const unsigned int ninePatchImageWidth = 28;
722 StretchRanges stretchRangesX;
723 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
724 stretchRangesX.PushBack( Uint16Pair( 5, 7 ) );
725 stretchRangesX.PushBack( Uint16Pair( 12, 15 ) );
726 StretchRanges stretchRangesY;
727 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
728 stretchRangesY.PushBack( Uint16Pair( 8, 12 ) );
729 stretchRangesY.PushBack( Uint16Pair( 15, 16 ) );
730 stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
731 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
733 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
734 DALI_TEST_CHECK( controlRenderer );
736 Actor actor = Actor::New();
737 TestControlRendererRender( application, actor, controlRenderer, 1u,
738 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
741 TestGlAbstraction& gl = application.GetGlAbstraction();
742 int textureUnit = -1;
743 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
744 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
749 int UtcDaliRendererFactoryGetNPatchRendererN1(void)
751 //This should still load but display an error image
753 ToolkitTestApplication application;
754 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
756 RendererFactory factory = RendererFactory::Get();
757 DALI_TEST_CHECK( factory );
759 ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
760 DALI_TEST_CHECK( controlRenderer );
762 Actor actor = Actor::New();
763 //The testkit still has to load a bitmap for the broken renderer image
764 TestControlRendererRender( application, actor, controlRenderer, 1u,
766 Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)) );
768 TestGlAbstraction& gl = application.GetGlAbstraction();
769 int textureUnit = -1;
770 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
771 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
776 int UtcDaliRendererFactoryGetNPatchRendererN2(void)
778 //This should still load but display an error image
780 ToolkitTestApplication application;
781 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
783 RendererFactory factory = RendererFactory::Get();
784 DALI_TEST_CHECK( factory );
786 Property::Map propertyMap;
787 propertyMap.Insert( "rendererType", "nPatchRenderer" );
788 propertyMap.Insert( "imageUrl", 111 );
790 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
791 DALI_TEST_CHECK( controlRenderer );
793 Actor actor = Actor::New();
794 //The testkit still has to load a bitmap for the broken renderer image
795 TestControlRendererRender( application, actor, controlRenderer, 1u,
797 Integration::ResourcePointer(Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD)) );
799 TestGlAbstraction& gl = application.GetGlAbstraction();
800 int textureUnit = -1;
801 DALI_TEST_CHECK( gl.GetUniformValue< int >( "sTexture", textureUnit ) );
802 DALI_TEST_EQUALS( textureUnit, 0, TEST_LOCATION );
807 int UtcDaliRendererFactoryResetRenderer1(void)
809 ToolkitTestApplication application;
810 tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
812 RendererFactory factory = RendererFactory::Get();
813 DALI_TEST_CHECK( factory );
815 ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
816 DALI_TEST_CHECK( controlRenderer );
818 Actor actor = Actor::New();
819 TestControlRendererRender( application, actor, controlRenderer );
821 Vector4 actualValue(Vector4::ZERO);
822 TestGlAbstraction& gl = application.GetGlAbstraction();
823 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
824 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
826 factory.ResetRenderer( controlRenderer, actor, Color::GREEN );
827 application.SendNotification();
828 application.Render(0);
829 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
830 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
832 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
833 factory.ResetRenderer( controlRenderer, actor, bufferImage );
835 Actor actor2 = Actor::New();
836 actor2.SetSize(200.f, 200.f);
837 Stage::GetCurrent().Add( actor2 );
838 controlRenderer.SetSize(Vector2(200.f, 200.f));
839 controlRenderer.SetOnStage( actor2 );
840 application.SendNotification();
841 application.Render(0);
846 int UtcDaliRendererFactoryResetRenderer2(void)
848 ToolkitTestApplication application;
849 tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
851 Actor actor = Actor::New();
852 actor.SetSize(200.f, 200.f);
853 Stage::GetCurrent().Add( actor );
854 RendererFactory factory = RendererFactory::Get();
855 DALI_TEST_CHECK( factory );
857 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
858 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
859 DALI_TEST_CHECK( controlRenderer );
860 controlRenderer.SetSize(Vector2(200.f, 200.f));
861 controlRenderer.SetOnStage( actor );
862 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
864 application.SendNotification();
865 application.Render(0);
867 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
868 factory.ResetRenderer( controlRenderer, actor, bufferImage );
869 application.SendNotification();
870 application.Render(0);
872 factory.ResetRenderer( controlRenderer, actor, Color::RED );
874 Actor actor2 = Actor::New();
875 actor2.SetSize(200.f, 200.f);
876 Stage::GetCurrent().Add( actor2 );
877 controlRenderer.SetSize(Vector2(200.f, 200.f));
878 controlRenderer.SetOnStage( actor2 );
879 TestGlAbstraction& gl = application.GetGlAbstraction();
880 application.SendNotification();
881 application.Render(0);
882 Vector4 actualValue(Vector4::ZERO);
883 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
884 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );