Automatic image atlasing
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / image-view / image-view-impl.cpp
index 6f45e82..59a3b33 100644 (file)
@@ -103,7 +103,7 @@ void ImageView::SetImage( Property::Map map )
   mImageSize = ImageDimensions( width, height );
 }
 
-void ImageView::SetImage( const std::string& url )
+void ImageView::SetImage( const std::string& url, ImageDimensions size )
 {
   if( mUrl != url )
   {
@@ -112,10 +112,17 @@ void ImageView::SetImage( const std::string& url )
 
     mUrl = url;
 
-    Actor self = Self();
-    Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mUrl );
+    if( size.GetWidth() == 0u && size.GetHeight() == 0u )
+    {
+      mImageSize = ResourceImage::GetImageSize( mUrl );
+    }
+    else
+    {
+      mImageSize = size;
+    }
 
-    mImageSize = ResourceImage::GetImageSize( mUrl );
+    Actor self = Self();
+    Toolkit::RendererFactory::Get().ResetRenderer( mRenderer, self, mUrl, mImageSize );
   }
 }
 
@@ -127,7 +134,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;
   }
@@ -169,6 +176,8 @@ float ImageView::GetWidthForHeight( float height )
 
 void ImageView::OnStageConnection( int depth )
 {
+  Control::OnStageConnection( depth );
+
   if( mRenderer )
   {
     CustomActor self = Self();
@@ -183,6 +192,8 @@ void ImageView::OnStageDisconnection()
     CustomActor self = Self();
     mRenderer.SetOffStage( self );
   }
+
+  Control::OnStageDisconnection();
 }
 
 
@@ -205,7 +216,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.