/*
- * Copyright (c) 2020 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2021 Samsung Electronics Co., Ltd.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
// Test pixel area property
ToolkitTestApplication application;
+ static std::vector<UniformData> customUniforms =
+ {
+ UniformData("pixelArea", Property::Type::VECTOR4),
+ };
+
+ TestGraphicsController& graphics = application.GetGraphicsController();
+ graphics.AddCustomUniforms(customUniforms);
+
// Gif image, use AnimatedImageVisual internally
// Atlasing is applied to pack multiple frames, use custom wrap mode
ImageView gifView = ImageView::New();
callStack.Enable(false);
TraceCallStack::NamedParams params;
- params["width"] = ToString(34);
- params["height"] = ToString(34);
- DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), true, TEST_LOCATION );
+ params["width"] << 34;
+ params["height"] << 34;
+DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), true, TEST_LOCATION );
END_TEST;
}
callStack.Enable(false);
TraceCallStack::NamedParams params;
- params["width"] = ToString(34);
- params["height"] = ToString(34);
+ params["width"] << 34;
+ params["height"] << 34;
DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ), true, TEST_LOCATION );
END_TEST;
application.Render(16);
TraceCallStack::NamedParams params;
- params["width"] = ToString(34);
- params["height"] = ToString(34);
+ params["width"] << 34;
+ params["height"] << 34;
DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ),
true, TEST_LOCATION );
}
application.Render(16);
TraceCallStack::NamedParams params;
- params["width"] = ToString(34);
- params["height"] = ToString(34);
+ params["width"] << 34;
+ params["height"] << 34;
DALI_TEST_EQUALS( callStack.FindMethodAndParams( "TexSubImage2D", params ),
true, TEST_LOCATION );
}
{
ToolkitTestApplication application;
- tet_infoline( "Create an ImageVisual using ScaleToFill and animated vector image ( image: [600,600], view:[600,600] )" );
+ tet_infoline( "Create an ImageVisual using SCALE_TO_FILL and animated vector image ( image: [600,600], view:[600,600] )" );
ImageView imageView = ImageView::New();
Property::Map imageMap;
ToolkitTestApplication application;
Toolkit::ImageView imageView;
- imageView = Toolkit::ImageView::New( );
+ imageView = Toolkit::ImageView::New();
imageView.SetImage("https://dev.w3.org/SVG/tools/svgweb/samples/svg-files/check.svg");
// Victor. Temporary (or permanent?) update as the url above seems not to work from time to time ...
- imageView.SetImage("https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/SVG_logo.svg/64px-SVG_logo.svg.png");
+// imageView.SetImage("https://upload.wikimedia.org/wikipedia/commons/thumb/0/02/SVG_logo.svg/64px-SVG_logo.svg.png");
imageView.SetProperty( Actor::Property::PARENT_ORIGIN, ParentOrigin::TOP_LEFT );
imageView.SetProperty( Actor::Property::ANCHOR_POINT, AnchorPoint::TOP_LEFT );
imageView.SetProperty( Actor::Property::SIZE, Vector2(300, 300) );
{
ToolkitTestApplication application;
- // Local svg file
+ // Local svg file - invalid file path
{
gResourceReadySignalFired = false;
- ImageView imageView = ImageView::New( TEST_RESOURCE_DIR "/Kid1.svg" );
+ ImageView imageView = ImageView::New( TEST_RESOURCE_DIR "/foo.svg" );
imageView.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
imageView.ResourceReadySignal().Connect( &ResourceReadySignal);
application.GetScene().Add( imageView );
application.SendNotification();
+ application.Render(16);
- // loading started, this waits for the loader thread
- DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+ DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION );
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION );
+ DALI_TEST_EQUALS( imageView.GetVisualResourceStatus( ImageView::Property::IMAGE ), Visual::ResourceStatus::FAILED, TEST_LOCATION );
+ }
+
+ // Local svg file - invalid file
+ {
+ gResourceReadySignalFired = false;
+
+ ImageView imageView = ImageView::New( TEST_RESOURCE_DIR "/invalid.svg" );
+ imageView.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
+ imageView.ResourceReadySignal().Connect( &ResourceReadySignal);
+
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), false, TEST_LOCATION );
+
+ application.GetScene().Add( imageView );
application.SendNotification();
application.Render(16);
END_TEST;
}
+int UtcDaliImageViewSvgRasterizationFailure(void)
+{
+ ToolkitTestApplication application;
+
+ gResourceReadySignalFired = false;
+
+ ImageView imageView = ImageView::New( TEST_RESOURCE_DIR "/svg1.svg" );
+ imageView.SetProperty( Actor::Property::SIZE, Vector2( 200.f, 200.f ) );
+ imageView.ResourceReadySignal().Connect( &ResourceReadySignal);
+
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), false, TEST_LOCATION );
+
+ application.GetScene().Add( imageView );
+
+ application.SendNotification();
+
+ // loading started, this waits for the loader thread
+ DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+
+ application.SendNotification();
+ application.Render(16);
+
+ DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION );
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION );
+ DALI_TEST_EQUALS( imageView.GetVisualResourceStatus( ImageView::Property::IMAGE ), Visual::ResourceStatus::READY, TEST_LOCATION );
+
+ // Reset flag
+ gResourceReadySignalFired = false;
+
+ // Change size
+ imageView.SetProperty( Actor::Property::SIZE, Vector2( 0.f, 0.f ) );
+
+ application.SendNotification();
+
+ // rasterization started, this waits for the rasterize thread
+ DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+
+ application.SendNotification();
+ application.Render(16);
+
+ DALI_TEST_EQUALS( gResourceReadySignalFired, true, TEST_LOCATION );
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION );
+ // Fail to rasterize because the size is 0.
+ DALI_TEST_EQUALS( imageView.GetVisualResourceStatus( ImageView::Property::IMAGE ), Visual::ResourceStatus::FAILED, TEST_LOCATION );
+
+ END_TEST;
+}
+
namespace
{
static int gResourceReadySignalCounter = 0;
-void OnResourceReadySignal( Control control )
+void OnResourceReadySignal01( Control control )
{
gResourceReadySignalCounter++;
- if( gResourceReadySignalCounter == 1 )
+ if(control.GetVisualResourceStatus(ImageView::Property::IMAGE) == Visual::ResourceStatus::READY)
{
- // Set image twice
- ImageView::DownCast( control ).SetImage( gImage_34_RGBA );
- ImageView::DownCast( control ).SetImage( gImage_34_RGBA );
+ if( gResourceReadySignalCounter == 1 )
+ {
+ // Set image twice
+ // It makes the first new visual be deleted immediately
+ ImageView::DownCast( control ).SetImage( gImage_34_RGBA );
+ ImageView::DownCast( control ).SetImage( gImage_34_RGBA );
+ }
+ }
+ else if(control.GetVisualResourceStatus(ImageView::Property::IMAGE) == Visual::ResourceStatus::FAILED)
+ {
+ // Make the resource ready immediately
+ control[ImageView::Property::IMAGE] = TEST_RESOURCE_DIR "/svg1.svg";
}
}
+void OnResourceReadySignal02( Control control )
+{
+ if(++gResourceReadySignalCounter == 1)
+ {
+ // It makes the first new visual be deleted immediately
+ // The first image will not be loaded.
+ control[ImageView::Property::IMAGE] = Property::Map().Add(ImageVisual::Property::URL, gImage_600_RGB)
+ .Add(ImageVisual::Property::RELEASE_POLICY, ImageVisual::ReleasePolicy::NEVER);
+ control[ImageView::Property::IMAGE] = TEST_IMAGE_1;
+ }
}
-int UtcDaliImageViewSetImageOnResourceReadySignal(void)
+ImageView gImageView1;
+ImageView gImageView2;
+ImageView gImageView3;
+
+void OnResourceReadySignal03( Control control )
+{
+ if(gResourceReadySignalCounter == 0)
+ {
+ // Queue loading
+ // 1. Use cached image, then UploadComplete will be called right after OnResourceReadySignal03.
+ gImageView2[ImageView::Property::IMAGE] = gImage_34_RGBA;
+
+ // 2. Load a new image
+ gImageView3[ImageView::Property::IMAGE] = TEST_IMAGE_1;
+
+ // 3. Use the new image again
+ gImageView1[ImageView::Property::IMAGE] = TEST_IMAGE_1;
+ gImageView1.ResourceReadySignal().Connect(&OnResourceReadySignal03);
+ }
+ else if(gResourceReadySignalCounter == 1)
+ {
+ // This is called from TextureManager::ProcessQueuedTextures().
+ gImageView1.Unparent();
+ gImageView1.Reset();
+ }
+ gResourceReadySignalCounter++;
+}
+
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal01(void)
+{
+ tet_infoline("Test setting image from within signal handler.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ ImageView imageView = ImageView::New( gImage_34_RGBA );
+ imageView.ResourceReadySignal().Connect( &OnResourceReadySignal01 );
+
+ application.GetScene().Add( imageView );
+
+ DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+
+ application.SendNotification();
+ application.Render();
+
+ DALI_TEST_EQUALS( gResourceReadySignalCounter, 2, TEST_LOCATION );
+
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION );
+
+ // Reset count
+ gResourceReadySignalCounter = 0;
+
+ imageView[ImageView::Property::IMAGE] = "invalid.jpg";
+
+ DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+
+ application.SendNotification();
+ application.Render();
+
+ // Run idle callback
+ application.RunIdles();
+
+ DALI_TEST_EQUALS( gResourceReadySignalCounter, 2, TEST_LOCATION );
+
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION );
+
+ END_TEST;
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal02(void)
{
tet_infoline("Test setting image from within signal handler.");
gResourceReadySignalCounter = 0;
ImageView imageView = ImageView::New( gImage_34_RGBA );
- imageView.ResourceReadySignal().Connect( &OnResourceReadySignal );
+ imageView.ResourceReadySignal().Connect( &OnResourceReadySignal02 );
application.GetScene().Add( imageView );
application.SendNotification();
application.Render();
+ // Wait for loading an image
+ DALI_TEST_EQUALS( Test::WaitForEventThreadTrigger( 1 ), true, TEST_LOCATION );
+
DALI_TEST_EQUALS( gResourceReadySignalCounter, 2, TEST_LOCATION );
DALI_TEST_EQUALS( imageView.IsResourceReady(), true, TEST_LOCATION );
END_TEST;
}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal03(void)
+{
+ tet_infoline("Test setting image from within signal handler.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ gImageView1 = ImageView::New(gImage_34_RGBA);
+ application.GetScene().Add(gImageView1);
+
+ // Wait for loading
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(1), true, TEST_LOCATION);
+
+ gImageView2 = ImageView::New(gImage_600_RGB);
+ gImageView2.ResourceReadySignal().Connect(&OnResourceReadySignal03);
+ application.GetScene().Add(gImageView2);
+
+ gImageView3 = ImageView::New();
+ application.GetScene().Add(gImageView3);
+
+ DALI_TEST_EQUALS(Test::WaitForEventThreadTrigger(2), true, TEST_LOCATION);
+
+ application.SendNotification();
+ application.Render();
+
+ END_TEST;
+}