// Creates a text controller.
ControllerPtr controller = Controller::New();
- ConfigureTextLabel(controller);
+ ConfigureTextLabel( controller );
const Length MAX_TEXT_LENGTH = 1024u * 32u;
// make over length world
- int maxLength = (1024u * 32u) + 10u;
- char world[maxLength];
- for( int i = 0; i < maxLength; i++ )
- {
- world[i] = 'a';
- }
+ int maxLength = ( 1024u * 32u ) + 10u;
+ char world[maxLength] = { 'a' };
// Set the text
- std::string text(world);
+ std::string text( world, maxLength );
controller->SetText( text );
- // Perform a relayout
- const Size size( Dali::Stage::GetCurrent().GetSize() );
- controller->Relayout(size);
-
// check text length
controller->GetText( text );
Length textSize = text.size();
END_TEST;
}
+int UtcDaliImageViewSvgLoadingFailure(void)
+{
+ ToolkitTestApplication application;
+
+ // Local svg file
+ {
+ gResourceReadySignalFired = false;
+
+ ImageView imageView = ImageView::New( TEST_RESOURCE_DIR "/Kid1.svg" );
+ imageView.SetSize( 200.f, 200.f );
+ imageView.ResourceReadySignal().Connect( &ResourceReadySignal);
+
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), false, TEST_LOCATION );
+
+ Stage::GetCurrent().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::FAILED, TEST_LOCATION );
+ }
+
+ // Remote svg file
+ {
+ gResourceReadySignalFired = false;
+
+ ImageView imageView = ImageView::New( "https://bar.org/foobar.svg" );
+ imageView.SetSize( 200.f, 200.f );
+ imageView.ResourceReadySignal().Connect( &ResourceReadySignal);
+
+ DALI_TEST_EQUALS( imageView.IsResourceReady(), false, TEST_LOCATION );
+
+ Stage::GetCurrent().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::FAILED, TEST_LOCATION );
+ }
+
+ END_TEST;
+}
+
+namespace
+{
+
+static int gResourceReadySignalCounter = 0;
+
+void OnResourceReadySignal( Control control )
+{
+ gResourceReadySignalCounter++;
+
+ if( gResourceReadySignalCounter == 1 )
+ {
+ // Set image twice
+ ImageView::DownCast( control ).SetImage( gImage_34_RGBA );
+ ImageView::DownCast( control ).SetImage( gImage_34_RGBA );
+ }
+}
+
+}
+
+int UtcDaliImageViewSetImageOnResourceReadySignal(void)
+{
+ tet_infoline("Test setting image from within signal handler.");
+
+ ToolkitTestApplication application;
+
+ gResourceReadySignalCounter = 0;
+
+ ImageView imageView = ImageView::New( gImage_34_RGBA );
+ imageView.ResourceReadySignal().Connect( &OnResourceReadySignal );
+
+ Stage::GetCurrent().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 );
+
+ END_TEST;
+}
{
for( std::size_t i = 0; i < mImageUrls.size() ; ++i )
{
- mTextureManager.Remove( mImageUrls[i].mTextureId );
+ mTextureManager.Remove( mImageUrls[i].mTextureId, this );
}
}
}
while( !mQueue.IsEmpty() )
{
ImageFrame imageFrame = mQueue.PopFront();
- mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId );
+ mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId, this );
}
}
}
TextureSet textureSet;
ImageFrame imageFrame = mQueue.PopFront();
- mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId );
+ mTextureManager.Remove( mImageUrls[ imageFrame.mUrlIndex ].mTextureId, this );
mImageUrls[ imageFrame.mUrlIndex ].mTextureId = TextureManager::INVALID_TEXTURE_ID;
if( IsFrontReady() == true )
if( mMaskingData->mAlphaMaskId != TextureManager::INVALID_TEXTURE_ID )
{
TextureManager& textureManager = mFactoryCache.GetTextureManager();
- textureManager.Remove( mMaskingData->mAlphaMaskId );
+ textureManager.Remove( mMaskingData->mAlphaMaskId, this );
}
}
{
if( mTextureId != TextureManager::INVALID_TEXTURE_ID )
{
- mFactoryCache.GetTextureManager().Remove( mTextureId );
+ mFactoryCache.GetTextureManager().Remove( mTextureId, this );
mTextureId = TextureManager::INVALID_TEXTURE_ID;
}
else
// Svg loaded and ready to display
ResourceReady( Toolkit::Visual::ResourceStatus::READY );
}
+ else if( !mParsedImage )
+ {
+ ResourceReady( Toolkit::Visual::ResourceStatus::FAILED );
+ }
}
void SvgVisual::OnSetTransform()
}
}
+bool SvgVisual::IsResourceReady() const
+{
+ return ( mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::READY ||
+ mImpl->mResourceStatus == Toolkit::Visual::ResourceStatus::FAILED );
+}
+
} // namespace Internal
} // namespace Toolkit
*/
void OnSetTransform() override;
+ /**
+ * @copydoc Visual::Base::IsResourceReady
+ */
+ bool IsResourceReady() const override;
+
public:
/**
return textureId;
}
-void TextureManager::Remove( const TextureManager::TextureId textureId )
+void TextureManager::Remove( const TextureManager::TextureId textureId, TextureUploadObserver* observer )
{
int textureInfoIndex = GetCacheIndexFromId( textureId );
if( textureInfoIndex != INVALID_INDEX )
TextureInfo& textureInfo( mTextureInfoContainer[ textureInfoIndex ] );
DALI_LOG_INFO( gTextureManagerLogFilter, Debug::Concise,
- "TextureManager::Remove(%d) url:%s\n cacheIdx:%d loadState:%s\n",
+ "TextureManager::Remove(%d) url:%s\n cacheIdx:%d loadState:%s reference count = %d\n",
textureId, textureInfo.url.GetUrl().c_str(),
- textureInfoIndex, GET_LOAD_STATE_STRING( textureInfo.loadState ) );
+ textureInfoIndex, GET_LOAD_STATE_STRING( textureInfo.loadState ), textureInfo.referenceCount );
// Decrement the reference count and check if this is the last user of this Texture.
if( --textureInfo.referenceCount <= 0 )
mTextureInfoContainer.erase( mTextureInfoContainer.begin() + textureInfoIndex );
}
}
+
+ if( observer )
+ {
+ // Remove element from the LoadQueue
+ for( auto&& element : mLoadQueue )
+ {
+ if( element.mObserver == observer )
+ {
+ mLoadQueue.Erase( &element );
+ break;
+ }
+ }
+ }
}
}
}
else
{
- Remove( textureInfo.textureId );
+ Remove( textureInfo.textureId, nullptr );
}
}
}
* occurrence of a Texture will cause its removal internally.
*
* @param[in] textureId The ID of the Texture to remove.
+ * @param[in] textureObserver The texture observer.
*/
- void Remove( const TextureManager::TextureId textureId );
+ void Remove( const TextureManager::TextureId textureId, TextureUploadObserver* textureObserver );
/**
* @brief Get the visualUrl associated with the texture id.
const unsigned int TOOLKIT_MAJOR_VERSION = 1;
const unsigned int TOOLKIT_MINOR_VERSION = 4;
-const unsigned int TOOLKIT_MICRO_VERSION = 56;
+const unsigned int TOOLKIT_MICRO_VERSION = 57;
const char * const TOOLKIT_BUILD_DATE = __DATE__ " " __TIME__;
#ifdef DEBUG_ENABLED
Name: dali-toolkit
Summary: Dali 3D engine Toolkit
-Version: 1.4.56
+Version: 1.4.57
Release: 1
Group: System/Libraries
License: Apache-2.0 and BSD-3-Clause and MIT