(ImageView) Restore erroneously removed APIs & Fix SetImage behaviour
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / image-view / image-view-impl.cpp
index 691f932..e47d1cd 100644 (file)
@@ -66,56 +66,31 @@ Toolkit::ImageView ImageView::New()
 
 void ImageView::SetImage( Image image )
 {
-  if( mImage != image )
+  if( ( mImage != image ) ||
+      ! mUrl.empty()      ||   // If we're changing from a URL type to an Image type
+      ! mPropertyMap.Empty() ) // If we're changing from a property map type to an Image type
   {
     mUrl.clear();
     mPropertyMap.Clear();
 
     mImage = image;
 
-    bool newRendererCreated = false;
-    if( mRenderer )
-    {
-      newRendererCreated = Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, image );
-    }
-    else
-    {
-      mRenderer = Toolkit::RendererFactory::Get().GetControlRenderer( image );
-      newRendererCreated = true;
-    }
-
-    //we need to inform any newly created renderers if it is on stage
-    if( newRendererCreated && Self().OnStage() )
-    {
-      CustomActor self = Self();
-      mRenderer.SetOnStage( self );
-    }
-
+    Actor self = Self();
+    Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, image );
     mImageSize = image ? ImageDimensions( image.GetWidth(), image.GetHeight() ) : ImageDimensions( 0, 0 );
+
+    RelayoutRequest();
   }
 }
 
 void ImageView::SetImage( Property::Map map )
 {
+  mUrl.clear();
+  mImage.Reset();
   mPropertyMap = map;
 
-  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
-  CustomActor self = Self();
-  if( newRendererCreated && self.OnStage() )
-  {
-    mRenderer.SetOnStage( self );
-  }
+  Actor self = Self();
+  Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mPropertyMap );
 
   int width = 0;
   Property::Value* widthValue = mPropertyMap.Find( "width" );
@@ -132,36 +107,34 @@ void ImageView::SetImage( Property::Map map )
   }
 
   mImageSize = ImageDimensions( width, height );
+
+  RelayoutRequest();
 }
 
-void ImageView::SetImage( const std::string& url )
+void ImageView::SetImage( const std::string& url, ImageDimensions size )
 {
-  if( mUrl != url )
+  if( ( mUrl != url ) ||
+      mImage          ||       // If we're changing from an Image type to a URL type
+      ! mPropertyMap.Empty() ) // If we're changing from a property map type to a URL type
   {
     mImage.Reset();
     mPropertyMap.Clear();
 
     mUrl = url;
 
-    bool newRendererCreated = false;
-    if( mRenderer )
+    if( size.GetWidth() == 0u && size.GetHeight() == 0u )
     {
-      newRendererCreated = Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, mUrl );
+      mImageSize = ResourceImage::GetImageSize( mUrl );
     }
     else
     {
-      mRenderer = Toolkit::RendererFactory::Get().GetControlRenderer( mUrl );
-      newRendererCreated = true;
+      mImageSize = size;
     }
 
-    //we need to inform any newly created renderers if it is on stage
-    if( newRendererCreated && Self().OnStage() )
-    {
-      CustomActor self = Self();
-      mRenderer.SetOnStage( self );
-    }
+    Actor self = Self();
+    Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mUrl, mImageSize );
 
-    mImageSize = ResourceImage::GetImageSize( mUrl );
+    RelayoutRequest();
   }
 }
 
@@ -173,7 +146,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;
   }
@@ -255,7 +228,7 @@ void ImageView::SetProperty( BaseObject* object, Property::Index index, const Pr
         if( value.Get( imageUrl ) )
         {
           ImageView& impl = GetImpl( imageView );
-          impl.SetImage( imageUrl );
+          impl.SetImage( imageUrl, ImageDimensions() );
         }
 
         // if its not a string then get a Property::Map from the property if possible.