Merge "Fixed typo in BorderRenderer causing the overwriting of the cache's quad geome...
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / image-view / image-view-impl.cpp
index 76493a6..2cb24bb 100644 (file)
@@ -97,16 +97,23 @@ void ImageView::SetImage( Image image )
 
 void ImageView::SetImage( Property::Map map )
 {
-  mImage.Reset();
-  mUrl.clear();
   mPropertyMap = map;
 
-  mRenderer = Toolkit::RendererFactory::Get().GetControlRenderer( mPropertyMap );
+  bool newRendererCreated = false;
+  if( mRenderer )
+  {
+    newRendererCreated = Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, mPropertyMap );
+  }
+  else
+  {
+    mRenderer = Toolkit::RendererFactory::Get().GetControlRenderer( mPropertyMap );
+    newRendererCreated = true;
+  }
 
   //we need to inform any newly created renderers if it is on stage
-  if( Self().OnStage() )
+  CustomActor self = Self();
+  if( newRendererCreated && self.OnStage() )
   {
-    CustomActor self = Self();
     mRenderer.SetOnStage( self );
   }
 
@@ -166,7 +173,7 @@ Vector3 ImageView::GetNaturalSize()
   size.y = mImageSize.GetHeight();
   size.z = std::min(size.x, size.y);
 
-  if( size.x > 0 && size.x > 0 )
+  if( size.x > 0 && size.y > 0 )
   {
     return size;
   }
@@ -208,6 +215,8 @@ float ImageView::GetWidthForHeight( float height )
 
 void ImageView::OnStageConnection( int depth )
 {
+  Control::OnStageConnection( depth );
+
   if( mRenderer )
   {
     CustomActor self = Self();
@@ -215,6 +224,18 @@ void ImageView::OnStageConnection( int depth )
   }
 }
 
+void ImageView::OnStageDisconnection()
+{
+  if( mRenderer )
+  {
+    CustomActor self = Self();
+    mRenderer.SetOffStage( self );
+  }
+
+  Control::OnStageDisconnection();
+}
+
+
 ///////////////////////////////////////////////////////////
 //
 // Properties