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 <toolkit-event-thread-callback.h>
21 #include <dali/devel-api/rendering/renderer.h>
22 #include <dali/devel-api/rendering/texture-set.h>
23 #include <dali/devel-api/rendering/shader.h>
24 #include <dali-toolkit/devel-api/controls/renderer-factory/renderer-factory.h>
27 using namespace Dali::Toolkit;
31 typedef NinePatchImage::StretchRanges StretchRanges;
33 const char* TEST_IMAGE_FILE_NAME = "gallery_image_01.jpg";
34 const char* TEST_NPATCH_FILE_NAME = "gallery_image_01.9.jpg";
36 const char* TEST_SVG_FILE_NAME = TEST_RESOURCE_DIR "/svg1.svg";
38 Integration::Bitmap* CreateBitmap( unsigned int imageWidth, unsigned int imageHeight, unsigned int initialColor, Pixel::Format pixelFormat )
40 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_RETAIN );
41 Integration::PixelBuffer* pixbuffer = bitmap->GetPackedPixelsProfile()->ReserveBuffer( pixelFormat, imageWidth, imageHeight, imageWidth, imageHeight );
42 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
44 memset( pixbuffer, initialColor, imageHeight * imageWidth * bytesPerPixel );
49 void InitialiseRegionsToZeroAlpha( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, Pixel::Format pixelFormat )
51 PixelBuffer* pixbuffer = image->GetBuffer();
52 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
54 for( unsigned int row = 0; row < imageWidth; ++row )
56 unsigned int pixelOffset = row * bytesPerPixel;
57 pixbuffer[ pixelOffset + 3 ] = 0x00;
58 pixelOffset += ( imageHeight - 1 ) * imageWidth * bytesPerPixel;
59 pixbuffer[ pixelOffset + 3 ] = 0x00;
62 for ( unsigned int column = 0; column < imageHeight; ++column )
64 unsigned int pixelOffset = column * imageWidth * bytesPerPixel;
65 pixbuffer[ pixelOffset + 3 ] = 0x00;
66 pixelOffset += ( imageWidth -1 ) * bytesPerPixel;
67 pixbuffer[ pixelOffset + 3 ] = 0x00;
71 void AddStretchRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const StretchRanges& stretchRangesX, const StretchRanges& stretchRangesY, Pixel::Format pixelFormat )
73 PixelBuffer* pixbuffer = image->GetBuffer();
74 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
76 for(StretchRanges::ConstIterator it = stretchRangesX.Begin(); it != stretchRangesX.End(); ++it)
78 const Uint16Pair& range = *it;
79 //since the stretch range is in the cropped image space, we need to offset by 1 to get it to the uncropped image space
80 for( unsigned int column = range.GetX() + 1u; column < range.GetY() + 1u; ++column )
82 unsigned int pixelOffset = column * bytesPerPixel;
83 pixbuffer[ pixelOffset ] = 0x00;
84 pixbuffer[ pixelOffset + 1 ] = 0x00;
85 pixbuffer[ pixelOffset + 2 ] = 0x00;
86 pixbuffer[ pixelOffset + 3 ] = 0xFF;
91 for(StretchRanges::ConstIterator it = stretchRangesY.Begin(); it != stretchRangesY.End(); ++it)
93 const Uint16Pair& range = *it;
94 //since the stretch range is in the cropped image space, we need to offset by 1 to get it to the uncropped image space
95 for( unsigned int row = range.GetX() + 1u; row < range.GetY() + 1u; ++row )
97 unsigned int pixelOffset = row * imageWidth * bytesPerPixel;
98 pixbuffer[ pixelOffset ] = 0x00;
99 pixbuffer[ pixelOffset + 1 ] = 0x00;
100 pixbuffer[ pixelOffset + 2 ] = 0x00;
101 pixbuffer[ pixelOffset + 3 ] = 0xFF;
106 void AddChildRegionsToImage( Integration::Bitmap* image, unsigned int imageWidth, unsigned int imageHeight, const Vector4& requiredChildRegion, Pixel::Format pixelFormat )
108 PixelBuffer* pixbuffer = image->GetBuffer();
109 unsigned int bytesPerPixel = GetBytesPerPixel( pixelFormat );
111 Integration::Bitmap::PackedPixelsProfile* srcProfile = image->GetPackedPixelsProfile();
112 unsigned int bufferStride = srcProfile->GetBufferStride();
114 // Add bottom child region
115 for( unsigned int column = requiredChildRegion.x; column < imageWidth - requiredChildRegion.z; ++column )
117 unsigned int pixelOffset = column * bytesPerPixel;
118 pixelOffset += ( imageHeight - 1 ) * bufferStride;
119 pixbuffer[ pixelOffset ] = 0x00;
120 pixbuffer[ pixelOffset + 1 ] = 0x00;
121 pixbuffer[ pixelOffset + 2 ] = 0x00;
122 pixbuffer[ pixelOffset + 3 ] = 0xFF;
125 // Add right child region
126 for ( unsigned int row = requiredChildRegion.y; row < imageHeight - requiredChildRegion.w; ++row )
128 unsigned int pixelOffset = row * bufferStride + ( imageWidth - 1 ) * bytesPerPixel;
129 pixbuffer[ pixelOffset ] = 0x00;
130 pixbuffer[ pixelOffset + 1 ] = 0x00;
131 pixbuffer[ pixelOffset + 2 ] = 0x00;
132 pixbuffer[ pixelOffset + 3 ] = 0xFF;
136 Integration::ResourcePointer CustomizeNinePatch( TestApplication& application,
137 unsigned int ninePatchImageWidth,
138 unsigned int ninePatchImageHeight,
139 const StretchRanges& stretchRangesX,
140 const StretchRanges& stretchRangesY,
141 bool addChildRegion = false,
142 Vector4 requiredChildRegion = Vector4::ZERO )
144 TestPlatformAbstraction& platform = application.GetPlatform();
146 Pixel::Format pixelFormat = Pixel::RGBA8888;
148 tet_infoline("Create Bitmap");
149 platform.SetClosestImageSize(Vector2( ninePatchImageWidth, ninePatchImageHeight));
150 Integration::Bitmap* bitmap = CreateBitmap( ninePatchImageWidth, ninePatchImageHeight, 0xFF, pixelFormat );
152 tet_infoline("Clear border regions");
153 InitialiseRegionsToZeroAlpha( bitmap, ninePatchImageWidth, ninePatchImageHeight, pixelFormat );
155 tet_infoline("Add Stretch regions to Bitmap");
156 AddStretchRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY, pixelFormat );
160 tet_infoline("Add Child regions to Bitmap");
161 AddChildRegionsToImage( bitmap, ninePatchImageWidth, ninePatchImageHeight, requiredChildRegion, pixelFormat );
164 tet_infoline("Getting resource");
165 Integration::ResourcePointer resourcePtr(bitmap);
166 platform.SetResourceLoaded( 0, Dali::Integration::ResourceBitmap, resourcePtr );
171 void TestControlRendererRender( ToolkitTestApplication& application,
173 ControlRenderer& controlRenderer,
174 std::size_t expectedSamplers = 0,
175 ImageDimensions imageDimensions = ImageDimensions(),
176 Integration::ResourcePointer resourcePtr = Integration::ResourcePointer())
180 // set the image size, for test case, this needs to be set before loading started
181 application.GetPlatform().SetClosestImageSize( Vector2(imageDimensions.GetWidth(), imageDimensions.GetHeight()) );
184 actor.SetSize( 200.f, 200.f );
185 Stage::GetCurrent().Add( actor );
186 controlRenderer.SetSize( Vector2(200.f, 200.f) );
187 controlRenderer.SetOnStage( actor );
189 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
191 application.SendNotification();
192 application.Render();
196 Integration::ResourceRequest* request = application.GetPlatform().GetRequest();
199 application.GetPlatform().SetResourceLoaded(request->GetId(), request->GetType()->id, resourcePtr );
203 application.Render();
204 application.SendNotification();
208 DALI_TEST_CHECK(application.GetPlatform().WasCalled(TestPlatformAbstraction::LoadResourceFunc));
211 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
218 void dali_renderer_factory_startup(void)
220 test_return_value = TET_UNDEF;
223 void dali_renderer_factory_cleanup(void)
225 test_return_value = TET_PASS;
228 int UtcDaliRendererFactoryGet(void)
230 ToolkitTestApplication application;
231 tet_infoline( "UtcDaliRendererFactory" );
235 type = TypeRegistry::Get().GetTypeInfo( "RendererFactory" );
236 DALI_TEST_CHECK( type );
237 BaseHandle handle = type.CreateInstance();
238 DALI_TEST_CHECK( handle );
240 RendererFactory factory;
241 factory = RendererFactory::Get();
242 DALI_TEST_CHECK( factory );
244 RendererFactory newFactory = RendererFactory::Get();
245 DALI_TEST_CHECK( newFactory );
247 // Check that renderer factory is a singleton
248 DALI_TEST_CHECK(factory == newFactory);
253 int UtcDaliRendererFactoryCopyAndAssignment(void)
255 ToolkitTestApplication application;
256 tet_infoline( "UtcDaliRendererFactoryCopyAndAssignment" );
257 RendererFactory factory = RendererFactory::Get();
259 RendererFactory factoryCopy( factory );
260 DALI_TEST_CHECK(factory == factoryCopy);
262 RendererFactory emptyFactory;
263 RendererFactory emptyFactoryCopy( emptyFactory );
264 DALI_TEST_CHECK(emptyFactory == emptyFactoryCopy);
266 RendererFactory factoryEquals;
267 factoryEquals = factory;
268 DALI_TEST_CHECK(factory == factoryEquals);
270 RendererFactory emptyFactoryEquals;
271 emptyFactoryEquals = emptyFactory;
272 DALI_TEST_CHECK( emptyFactory == emptyFactoryEquals );
276 DALI_TEST_CHECK( factory = factoryCopy );
281 int UtcDaliRendererFactoryGetColorRenderer1(void)
283 ToolkitTestApplication application;
284 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer1: Request color renderer with a Property::Map" );
286 RendererFactory factory = RendererFactory::Get();
287 DALI_TEST_CHECK( factory );
289 Property::Map propertyMap;
290 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
291 propertyMap.Insert("rendererType", "color");
292 propertyMap.Insert("blendColor", testColor);
294 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
295 DALI_TEST_CHECK( controlRenderer );
297 Actor actor = Actor::New();
298 TestControlRendererRender( application, actor, controlRenderer );
300 Vector4 actualValue(Vector4::ZERO);
301 TestGlAbstraction& gl = application.GetGlAbstraction();
302 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
303 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
308 int UtcDaliRendererFactoryGetColorRenderer2(void)
310 ToolkitTestApplication application;
311 tet_infoline( "UtcDaliRendererFactoryGetColorRenderer2: Request color renderer with a Vector4" );
313 RendererFactory factory = RendererFactory::Get();
314 DALI_TEST_CHECK( factory );
316 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
317 ControlRenderer controlRenderer = factory.GetControlRenderer(testColor);
318 DALI_TEST_CHECK( controlRenderer );
320 Actor actor = Actor::New();
321 TestControlRendererRender( application, actor, controlRenderer );
323 Vector4 actualValue(Vector4::ZERO);
324 TestGlAbstraction& gl = application.GetGlAbstraction();
325 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
326 DALI_TEST_EQUALS( actualValue, testColor, TEST_LOCATION );
328 controlRenderer.SetOffStage( actor );
329 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
334 int UtcDaliRendererFactoryGetBorderRenderer1(void)
336 ToolkitTestApplication application;
337 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer1: Request border renderer with a Property::Map" );
339 RendererFactory factory = RendererFactory::Get();
340 DALI_TEST_CHECK( factory );
342 Property::Map propertyMap;
343 Vector4 testColor( 1.f, 0.5f, 0.3f, 0.2f );
344 float testSize = 5.f;
345 propertyMap.Insert("rendererType", "border");
346 propertyMap.Insert("borderColor", testColor);
347 propertyMap.Insert("borderSize", testSize);
349 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
350 DALI_TEST_CHECK( controlRenderer );
352 Actor actor = Actor::New();
353 actor.SetSize(200.f, 200.f);
354 Stage::GetCurrent().Add( actor );
355 controlRenderer.SetSize(Vector2(200.f, 200.f));
356 controlRenderer.SetOnStage( actor );
358 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
359 int blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLENDING_MODE );
360 DALI_TEST_EQUALS( static_cast<BlendingMode::Type>(blendMode), BlendingMode::ON, TEST_LOCATION );
362 TestGlAbstraction& gl = application.GetGlAbstraction();
364 application.SendNotification();
365 application.Render(0);
367 Vector4 actualColor(Vector4::ZERO);
368 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "borderColor", actualColor ) );
369 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
371 float actualSize = 0.f;
372 DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
373 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
375 controlRenderer.SetOffStage( actor );
376 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
381 int UtcDaliRendererFactoryGetBorderRenderer2(void)
383 ToolkitTestApplication application;
384 tet_infoline( "UtcDaliRendererFactoryGetBorderRenderer2: Request border renderer with a borderSize and a borderColor" );
386 RendererFactory factory = RendererFactory::Get();
387 DALI_TEST_CHECK( factory );
389 Vector4 testColor( 1.f, 0.5f, 0.3f, 1.f );
390 float testSize = 5.f;
392 ControlRenderer controlRenderer = factory.GetControlRenderer(testSize, testColor );
393 DALI_TEST_CHECK( controlRenderer );
395 Actor actor = Actor::New();
396 actor.SetSize(200.f, 200.f);
397 Stage::GetCurrent().Add( actor );
398 controlRenderer.SetSize(Vector2(200.f, 200.f));
399 controlRenderer.SetOnStage( actor );
401 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
403 TestGlAbstraction& gl = application.GetGlAbstraction();
405 application.SendNotification();
406 application.Render(0);
408 int blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLENDING_MODE );
409 DALI_TEST_EQUALS( static_cast<BlendingMode::Type>(blendMode), BlendingMode::AUTO, TEST_LOCATION );
411 Vector4 actualColor(Vector4::ZERO);
412 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "borderColor", actualColor ) );
413 DALI_TEST_EQUALS( actualColor, testColor, TEST_LOCATION );
415 float actualSize = 0.f;
416 DALI_TEST_CHECK( gl.GetUniformValue<float>( "borderSize", actualSize ) );
417 DALI_TEST_EQUALS( actualSize, testSize, TEST_LOCATION );
419 controlRenderer.SetOffStage( actor );
421 // enable the anti-aliasing
422 controlRenderer = factory.GetControlRenderer(testSize, testColor, true );
423 controlRenderer.SetOnStage( actor );
425 application.SendNotification();
426 application.Render(0);
427 blendMode = actor.GetRendererAt(0u).GetProperty<int>( Renderer::Property::BLENDING_MODE );
428 DALI_TEST_EQUALS( static_cast<BlendingMode::Type>(blendMode), BlendingMode::ON, TEST_LOCATION );
433 int UtcDaliRendererFactoryGetLinearGradientRenderer(void)
435 ToolkitTestApplication application;
436 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
438 RendererFactory factory = RendererFactory::Get();
439 DALI_TEST_CHECK( factory );
441 Property::Map propertyMap;
442 propertyMap.Insert("rendererType", "gradient");
444 Vector2 start(-1.f, -1.f);
445 Vector2 end(1.f, 1.f);
446 propertyMap.Insert("startPosition", start);
447 propertyMap.Insert("endPosition", end);
448 propertyMap.Insert("spreadMethod", "repeat");
450 Property::Array stopOffsets;
451 stopOffsets.PushBack( 0.2f );
452 stopOffsets.PushBack( 0.8f );
453 propertyMap.Insert("stopOffset", stopOffsets);
455 Property::Array stopColors;
456 stopColors.PushBack( Color::RED );
457 stopColors.PushBack( Color::GREEN );
458 propertyMap.Insert("stopColor", stopColors);
460 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
461 DALI_TEST_CHECK( controlRenderer );
463 // A lookup texture is generated and pass to shader as sampler
464 Actor actor = Actor::New();
465 TestControlRendererRender( application, actor, controlRenderer, 1u );
467 controlRenderer.SetOffStage( actor );
468 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
473 int UtcDaliRendererFactoryGetRadialGradientRenderer(void)
475 ToolkitTestApplication application;
476 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
478 RendererFactory factory = RendererFactory::Get();
479 DALI_TEST_CHECK( factory );
481 Property::Map propertyMap;
482 propertyMap.Insert("rendererType", "gradient");
484 Vector2 center(100.f, 100.f);
485 float radius = 100.f;
486 propertyMap.Insert("units", "userSpace");
487 propertyMap.Insert("center", center);
488 propertyMap.Insert("radius", radius);
490 Property::Array stopOffsets;
491 stopOffsets.PushBack( 0.0f );
492 stopOffsets.PushBack( 1.f );
493 propertyMap.Insert("stopOffset", stopOffsets);
495 Property::Array stopColors;
496 stopColors.PushBack( Color::RED );
497 stopColors.PushBack( Color::GREEN );
498 propertyMap.Insert("stopColor", stopColors);
500 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
501 DALI_TEST_CHECK( controlRenderer );
503 // A lookup texture is generated and pass to shader as sampler
504 Actor actor = Actor::New();
505 TestControlRendererRender( application, actor, controlRenderer, 1u );
507 Matrix3 alignMatrix( radius, 0.f, 0.f, 0.f, radius, 0.f, center.x, center.y, 1.f );
508 alignMatrix.Invert();
510 Matrix3 actualValue( Matrix3::IDENTITY );
511 TestGlAbstraction& gl = application.GetGlAbstraction();
512 DALI_TEST_CHECK( gl.GetUniformValue<Matrix3>( "uAlignmentMatrix", actualValue ) );
513 DALI_TEST_EQUALS( actualValue, alignMatrix, Math::MACHINE_EPSILON_100, TEST_LOCATION );
518 int UtcDaliRendererFactoryDefaultOffsetsGradientRenderer(void)
520 ToolkitTestApplication application;
521 tet_infoline("UtcDaliRendererFactoryGetRadialGradientRenderer");
523 RendererFactory factory = RendererFactory::Get();
524 DALI_TEST_CHECK( factory );
526 Property::Map propertyMap;
527 propertyMap.Insert("rendererType", "gradient");
529 Vector2 start(-1.f, -1.f);
530 Vector2 end(1.f, 1.f);
531 propertyMap.Insert("startPosition", start);
532 propertyMap.Insert("endPosition", end);
533 propertyMap.Insert("spreadMethod", "repeat");
535 Property::Array stopColors;
536 stopColors.PushBack( Color::RED );
537 stopColors.PushBack( Color::GREEN );
538 propertyMap.Insert("stopColor", stopColors);
540 ControlRenderer controlRenderer = factory.GetControlRenderer(propertyMap);
541 DALI_TEST_CHECK( controlRenderer );
543 // A lookup texture is generated and pass to shader as sampler
544 Actor actor = Actor::New();
545 TestControlRendererRender( application, actor, controlRenderer, 1u );
547 controlRenderer.SetOffStage( actor );
548 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
553 int UtcDaliRendererFactoryGetImageRenderer1(void)
555 ToolkitTestApplication application;
556 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer1: Request image renderer with a Property::Map" );
558 RendererFactory factory = RendererFactory::Get();
559 DALI_TEST_CHECK( factory );
561 Property::Map propertyMap;
562 propertyMap.Insert( "rendererType", "image" );
563 propertyMap.Insert( "imageUrl", TEST_IMAGE_FILE_NAME );
565 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
566 DALI_TEST_CHECK( controlRenderer );
568 Actor actor = Actor::New();
569 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
570 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
573 const int height=513;
574 TestGlAbstraction& gl = application.GetGlAbstraction();
575 TraceCallStack& textureTrace = gl.GetTextureTrace();
576 textureTrace.Enable(true);
578 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
579 bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, width, height,width, height );
581 TestControlRendererRender( application, actor, controlRenderer, 1u,
582 ImageDimensions(width, height),
583 Integration::ResourcePointer( bitmap ) );
585 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
587 controlRenderer.SetOffStage( actor );
588 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
593 int UtcDaliRendererFactoryGetImageRenderer2(void)
595 ToolkitTestApplication application;
596 tet_infoline( "UtcDaliRendererFactoryGetImageRenderer2: Request image renderer with an image handle" );
598 RendererFactory factory = RendererFactory::Get();
599 DALI_TEST_CHECK( factory );
601 Image image = ResourceImage::New(TEST_IMAGE_FILE_NAME);
602 ControlRenderer controlRenderer = factory.GetControlRenderer( image );
604 Actor actor = Actor::New();
605 // For tesing the LoadResourceFunc is called, a big image size should be set, so the atlasing is not applied.
606 // Image with a size smaller than 512*512 will be uploaded as a part of the atlas.
609 const int height=513;
611 Integration::Bitmap* bitmap = Integration::Bitmap::New( Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD );
612 bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, width, height,width, height );
614 TestGlAbstraction& gl = application.GetGlAbstraction();
615 TraceCallStack& textureTrace = gl.GetTextureTrace();
616 textureTrace.Enable(true);
618 TestControlRendererRender( application, actor, controlRenderer, 1u,
619 ImageDimensions(width, height),
620 Integration::ResourcePointer(bitmap) );
622 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
627 int UtcDaliRendererFactoryGetNPatchRenderer1(void)
629 ToolkitTestApplication application;
630 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer1: Request 9-patch renderer with a Property::Map" );
632 RendererFactory factory = RendererFactory::Get();
633 DALI_TEST_CHECK( factory );
635 const unsigned int ninePatchImageHeight = 18;
636 const unsigned int ninePatchImageWidth = 28;
637 StretchRanges stretchRangesX;
638 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
639 StretchRanges stretchRangesY;
640 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
641 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
643 Property::Map propertyMap;
644 propertyMap.Insert( "rendererType", "nPatch" );
645 propertyMap.Insert( "imageUrl", TEST_NPATCH_FILE_NAME );
647 tet_infoline( "whole grid" );
648 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
649 DALI_TEST_CHECK( controlRenderer );
651 Actor actor = Actor::New();
653 TestGlAbstraction& gl = application.GetGlAbstraction();
654 TraceCallStack& textureTrace = gl.GetTextureTrace();
655 textureTrace.Enable(true);
657 TestControlRendererRender( application, actor, controlRenderer, 1u,
658 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
661 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
664 propertyMap.Insert( "borderOnly", true );
666 tet_infoline( "border only" );
667 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
668 DALI_TEST_CHECK( controlRenderer );
670 Actor actor = Actor::New();
672 TestGlAbstraction& gl = application.GetGlAbstraction();
673 TraceCallStack& textureTrace = gl.GetTextureTrace();
674 textureTrace.Enable(true);
676 TestControlRendererRender( application, actor, controlRenderer, 1u,
677 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
680 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
686 int UtcDaliRendererFactoryGetNPatchRenderer2(void)
688 ToolkitTestApplication application;
689 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer2: Request n-patch renderer with a Property::Map" );
691 RendererFactory factory = RendererFactory::Get();
692 DALI_TEST_CHECK( factory );
694 const unsigned int ninePatchImageWidth = 18;
695 const unsigned int ninePatchImageHeight = 28;
696 StretchRanges stretchRangesX;
697 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
698 stretchRangesX.PushBack( Uint16Pair( 5, 7 ) );
699 stretchRangesX.PushBack( Uint16Pair( 12, 15 ) );
700 StretchRanges stretchRangesY;
701 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
702 stretchRangesY.PushBack( Uint16Pair( 8, 12 ) );
703 stretchRangesY.PushBack( Uint16Pair( 15, 16 ) );
704 stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
705 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
707 Property::Map propertyMap;
708 propertyMap.Insert( "rendererType", "nPatch" );
709 propertyMap.Insert( "imageUrl", TEST_NPATCH_FILE_NAME );
711 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
712 DALI_TEST_CHECK( controlRenderer );
714 Actor actor = Actor::New();
715 TestGlAbstraction& gl = application.GetGlAbstraction();
716 TraceCallStack& textureTrace = gl.GetTextureTrace();
717 textureTrace.Enable(true);
719 TestControlRendererRender( application, actor, controlRenderer, 1u,
720 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
724 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
726 controlRenderer.SetOffStage( actor );
727 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
730 propertyMap.Insert( "borderOnly", true );
732 tet_infoline( "border only" );
733 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
734 DALI_TEST_CHECK( controlRenderer );
736 TestGlAbstraction& gl = application.GetGlAbstraction();
737 TraceCallStack& textureTrace = gl.GetTextureTrace();
738 textureTrace.Enable(true);
739 Actor actor = Actor::New();
740 TestControlRendererRender( application, actor, controlRenderer, 1u,
741 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
745 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
747 controlRenderer.SetOffStage( actor );
748 DALI_TEST_CHECK( actor.GetRendererCount() == 0u );
754 int UtcDaliRendererFactoryGetNPatchRenderer3(void)
756 ToolkitTestApplication application;
757 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer3: Request 9-patch renderer with an image url" );
759 RendererFactory factory = RendererFactory::Get();
760 DALI_TEST_CHECK( factory );
762 const unsigned int ninePatchImageHeight = 18;
763 const unsigned int ninePatchImageWidth = 28;
764 StretchRanges stretchRangesX;
765 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
766 StretchRanges stretchRangesY;
767 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
768 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
770 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
771 DALI_TEST_CHECK( controlRenderer );
773 Actor actor = Actor::New();
775 TestGlAbstraction& gl = application.GetGlAbstraction();
776 TraceCallStack& textureTrace = gl.GetTextureTrace();
777 textureTrace.Enable(true);
779 TestControlRendererRender( application, actor, controlRenderer, 1u,
780 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
783 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
788 int UtcDaliRendererFactoryGetNPatchRenderer4(void)
790 ToolkitTestApplication application;
791 tet_infoline( "UtcDaliRendererFactoryGetNPatchRenderer4: Request n-patch renderer with an image url" );
793 RendererFactory factory = RendererFactory::Get();
794 DALI_TEST_CHECK( factory );
796 const unsigned int ninePatchImageHeight = 18;
797 const unsigned int ninePatchImageWidth = 28;
798 StretchRanges stretchRangesX;
799 stretchRangesX.PushBack( Uint16Pair( 2, 3 ) );
800 stretchRangesX.PushBack( Uint16Pair( 5, 7 ) );
801 stretchRangesX.PushBack( Uint16Pair( 12, 15 ) );
802 StretchRanges stretchRangesY;
803 stretchRangesY.PushBack( Uint16Pair( 4, 5 ) );
804 stretchRangesY.PushBack( Uint16Pair( 8, 12 ) );
805 stretchRangesY.PushBack( Uint16Pair( 15, 16 ) );
806 stretchRangesY.PushBack( Uint16Pair( 25, 27 ) );
807 Integration::ResourcePointer ninePatchResource = CustomizeNinePatch( application, ninePatchImageWidth, ninePatchImageHeight, stretchRangesX, stretchRangesY );
809 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_NPATCH_FILE_NAME );
810 DALI_TEST_CHECK( controlRenderer );
812 Actor actor = Actor::New();
814 TestGlAbstraction& gl = application.GetGlAbstraction();
815 TraceCallStack& textureTrace = gl.GetTextureTrace();
816 textureTrace.Enable(true);
818 TestControlRendererRender( application, actor, controlRenderer, 1u,
819 ImageDimensions(ninePatchImageWidth, ninePatchImageHeight),
822 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
827 int UtcDaliRendererFactoryGetNPatchRendererN1(void)
829 //This should still load but display an error image
831 ToolkitTestApplication application;
832 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid image url" );
834 RendererFactory factory = RendererFactory::Get();
835 DALI_TEST_CHECK( factory );
837 ControlRenderer controlRenderer = factory.GetControlRenderer( "ERROR.9.jpg" );
838 DALI_TEST_CHECK( controlRenderer );
840 Actor actor = Actor::New();
842 //The testkit still has to load a bitmap for the broken renderer image
843 Integration::Bitmap* bitmap = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD);
844 bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, 100, 100, 100, 100 );
846 TestGlAbstraction& gl = application.GetGlAbstraction();
847 TraceCallStack& textureTrace = gl.GetTextureTrace();
848 textureTrace.Enable(true);
850 TestControlRendererRender( application, actor, controlRenderer, 1u,
852 Integration::ResourcePointer(bitmap) );
854 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
859 int UtcDaliRendererFactoryGetNPatchRendererN2(void)
861 //This should still load but display an error image
863 ToolkitTestApplication application;
864 tet_infoline( "UtcDaliRendererFactoryGetNPatchRendererN: Request n-patch renderer with an invalid Property::Map" );
866 RendererFactory factory = RendererFactory::Get();
867 DALI_TEST_CHECK( factory );
869 Property::Map propertyMap;
870 propertyMap.Insert( "rendererType", "nPatch" );
871 propertyMap.Insert( "imageUrl", 111 );
873 ControlRenderer controlRenderer = factory.GetControlRenderer( propertyMap );
874 DALI_TEST_CHECK( controlRenderer );
876 Actor actor = Actor::New();
878 //The testkit still has to load a bitmap for the broken renderer image
879 Integration::Bitmap* bitmap = Integration::Bitmap::New(Integration::Bitmap::BITMAP_2D_PACKED_PIXELS, ResourcePolicy::OWNED_DISCARD);
880 bitmap->GetPackedPixelsProfile()->ReserveBuffer( Pixel::RGBA8888, 100, 100, 100, 100 );
882 TestGlAbstraction& gl = application.GetGlAbstraction();
883 TraceCallStack& textureTrace = gl.GetTextureTrace();
884 textureTrace.Enable(true);
886 TestControlRendererRender( application, actor, controlRenderer, 1u,
888 Integration::ResourcePointer(bitmap) );
890 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
895 int UtcDaliRendererFactoryGetSvgRenderer(void)
897 ToolkitTestApplication application;
898 tet_infoline( "UtcDaliRendererFactoryGetSvgRenderer: Request svg renderer with a svg url" );
900 RendererFactory factory = RendererFactory::Get();
901 ControlRenderer controlRenderer = factory.GetControlRenderer( TEST_SVG_FILE_NAME );
902 DALI_TEST_CHECK( controlRenderer );
904 TestGlAbstraction& gl = application.GetGlAbstraction();
905 TraceCallStack& textureTrace = gl.GetTextureTrace();
906 textureTrace.Enable(true);
908 Actor actor = Actor::New();
909 actor.SetSize( 200.f, 200.f );
910 Stage::GetCurrent().Add( actor );
911 controlRenderer.SetSize( Vector2(200.f, 200.f) );
912 controlRenderer.SetOnStage( actor );
913 application.SendNotification();
914 application.Render();
916 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
918 EventThreadCallback* eventTrigger = EventThreadCallback::Get();
919 CallbackBase* callback = eventTrigger->GetCallback();
921 eventTrigger->WaitingForTrigger( 1 );// waiting until the svg image is rasterized.
922 CallbackBase::Execute( *callback );
924 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
926 // waiting for the resource uploading
927 application.SendNotification();
928 application.Render();
930 DALI_TEST_EQUALS( textureTrace.FindMethod("BindTexture"), true, TEST_LOCATION );
935 int UtcDaliRendererFactoryResetRenderer1(void)
937 ToolkitTestApplication application;
938 tet_infoline( "UtcDaliRendererFactoryResetRenderer1" );
940 RendererFactory factory = RendererFactory::Get();
941 DALI_TEST_CHECK( factory );
943 ControlRenderer controlRenderer = factory.GetControlRenderer( Color::RED );
944 DALI_TEST_CHECK( controlRenderer );
946 Actor actor = Actor::New();
947 TestControlRendererRender( application, actor, controlRenderer );
949 Vector4 actualValue(Vector4::ZERO);
950 TestGlAbstraction& gl = application.GetGlAbstraction();
951 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
952 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
954 factory.ResetRenderer( controlRenderer, actor, Color::GREEN );
955 application.SendNotification();
956 application.Render(0);
957 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
958 DALI_TEST_EQUALS( actualValue, Color::GREEN, TEST_LOCATION );
960 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
961 factory.ResetRenderer( controlRenderer, actor, bufferImage );
963 Actor actor2 = Actor::New();
964 actor2.SetSize(200.f, 200.f);
965 Stage::GetCurrent().Add( actor2 );
966 controlRenderer.SetSize(Vector2(200.f, 200.f));
967 controlRenderer.SetOnStage( actor2 );
968 application.SendNotification();
969 application.Render(0);
974 int UtcDaliRendererFactoryResetRenderer2(void)
976 ToolkitTestApplication application;
977 tet_infoline( "UtcDaliRendererFactoryResetRenderer2" );
979 Actor actor = Actor::New();
980 actor.SetSize(200.f, 200.f);
981 Stage::GetCurrent().Add( actor );
982 RendererFactory factory = RendererFactory::Get();
983 DALI_TEST_CHECK( factory );
985 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
986 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
987 DALI_TEST_CHECK( controlRenderer );
988 controlRenderer.SetSize(Vector2(200.f, 200.f));
989 controlRenderer.SetOnStage( actor );
990 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
992 application.SendNotification();
993 application.Render(0);
995 Image bufferImage = CreateBufferImage( 100, 200, Vector4( 1.f, 1.f, 1.f, 1.f ) );
996 factory.ResetRenderer( controlRenderer, actor, bufferImage );
997 application.SendNotification();
998 application.Render(0);
1000 factory.ResetRenderer( controlRenderer, actor, Color::RED );
1002 Actor actor2 = Actor::New();
1003 actor2.SetSize(200.f, 200.f);
1004 Stage::GetCurrent().Add( actor2 );
1005 controlRenderer.SetSize(Vector2(200.f, 200.f));
1006 controlRenderer.SetOnStage( actor2 );
1007 TestGlAbstraction& gl = application.GetGlAbstraction();
1008 application.SendNotification();
1009 application.Render(0);
1010 Vector4 actualValue(Vector4::ZERO);
1011 DALI_TEST_CHECK( gl.GetUniformValue<Vector4>( "blendColor", actualValue ) );
1012 DALI_TEST_EQUALS( actualValue, Color::RED, TEST_LOCATION );
1017 int UtcDaliRendererFactoryResetRenderer3(void)
1019 ToolkitTestApplication application;
1020 tet_infoline( "UtcDaliRendererFactoryResetRenderer3" );
1022 Actor actor = Actor::New();
1023 actor.SetSize(200.f, 200.f);
1024 Stage::GetCurrent().Add( actor );
1025 RendererFactory factory = RendererFactory::Get();
1026 DALI_TEST_CHECK( factory );
1028 // Get renderer for rendering a resource image
1029 Image resourceImage = ResourceImage::New(TEST_IMAGE_FILE_NAME);
1030 ControlRenderer controlRenderer = factory.GetControlRenderer( resourceImage );
1031 DALI_TEST_CHECK( controlRenderer );
1032 controlRenderer.SetSize(Vector2(200.f, 200.f));
1033 controlRenderer.SetOnStage( actor );
1034 application.SendNotification();
1035 application.Render();
1037 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1039 // reset the renderer to renderer a svg image
1040 factory.ResetRenderer( controlRenderer, actor, TEST_SVG_FILE_NAME, ImageDimensions( 100, 100 ) );
1041 application.SendNotification();
1042 application.Render();
1044 DALI_TEST_CHECK( actor.GetRendererCount() == 1u );
1046 EventThreadCallback* eventTrigger = EventThreadCallback::Get();
1047 CallbackBase* callback = eventTrigger->GetCallback();
1049 eventTrigger->WaitingForTrigger( 1 );// waiting until the svg image is rasterized.
1050 CallbackBase::Execute( *callback );