Fix a crash in ImageVisual in case of an invalid image and changed to render broken...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / visuals / image / image-visual.cpp
index 06a9601..d50cb91 100644 (file)
@@ -471,8 +471,19 @@ void ImageVisual::GetNaturalSize( Vector2& naturalSize )
   else if( mImageUrl.IsValid() && mImageUrl.GetLocation() == VisualUrl::LOCAL )
   {
     ImageDimensions dimensions = Dali::GetClosestImageSize( mImageUrl.GetUrl() );
-    naturalSize.x = dimensions.GetWidth();
-    naturalSize.y = dimensions.GetHeight();
+
+    if( dimensions != ImageDimensions( 0, 0 ) )
+    {
+      naturalSize.x = dimensions.GetWidth();
+      naturalSize.y = dimensions.GetHeight();
+    }
+    else
+    {
+      Image brokenImage = VisualFactoryCache::GetBrokenVisualImage();
+
+      naturalSize.x = brokenImage.GetWidth();
+      naturalSize.y = brokenImage.GetWidth();
+    }
     return;
   }
 
@@ -704,7 +715,6 @@ void ImageVisual::InitializeRenderer( const Image& image )
   // don't reuse CreateTextureSet
   TextureSet textures = TextureSet::New();
 
-  // Renderer can't be shared if mImage is NativeImage
   NativeImage nativeImage = NativeImage::DownCast( image );
   if( nativeImage )
   {
@@ -754,6 +764,9 @@ void ImageVisual::DoSetOnStage( Actor& actor )
   {
     actor.AddRenderer( mImpl->mRenderer );
     mPlacementActor.Reset();
+
+    // Image loaded and ready to display
+    ResourceReady();
   }
 }
 
@@ -923,8 +936,14 @@ void ImageVisual::UploadComplete( bool loadingSuccess, TextureSet textureSet, bo
       else
       {
         Image brokenImage = VisualFactoryCache::GetBrokenVisualImage();
+
+        textureSet = TextureSet::New();
+        mImpl->mRenderer.SetTextures( textureSet );
+
         ApplyImageToSampler( brokenImage );
       }
+      // Image loaded and ready to display
+      ResourceReady();
     }
   }
   mTextureLoading = false;