Ensure ImageView updates mVisual once ready/loaded 28/141828/4
authorAgnelo Vaz <agnelo.vaz@samsung.com>
Tue, 1 Aug 2017 13:35:38 +0000 (14:35 +0100)
committerAgnelo Vaz <agnelo.vaz@samsung.com>
Thu, 3 Aug 2017 16:07:18 +0000 (17:07 +0100)
Previously mVisual was only updated after OnRelayout but this is too late,
RelayoutRequest triggers GetNaturalSize before OnRelayout, GetNaturalSize needs mVisual to be the updated visual not the previous.

Change-Id: Ib0e46af88774d866a5f6074e43437f0b173bf0f6

dali-toolkit/internal/controls/image-view/image-view-impl.cpp

index 7934109..491e697 100644 (file)
@@ -117,6 +117,8 @@ void ImageView::SetImage( const Property::Map& map )
   mPropertyMap = map;
   mUrl.clear();
   mImage.Reset();
   mPropertyMap = map;
   mUrl.clear();
   mImage.Reset();
+  mRelayoutRequired = true;
+
   Toolkit::Visual::Base visual =  Toolkit::VisualFactory::Get().CreateVisual( mPropertyMap );
   // Don't set mVisual until it is ready and shown. Getters will still use current visual.
   if (!mVisual)
   Toolkit::Visual::Base visual =  Toolkit::VisualFactory::Get().CreateVisual( mPropertyMap );
   // Don't set mVisual until it is ready and shown. Getters will still use current visual.
   if (!mVisual)
@@ -133,6 +135,7 @@ void ImageView::SetImage( const std::string& url, ImageDimensions size )
   mUrl = url;
   mImage.Reset();
   mPropertyMap.Clear();
   mUrl = url;
   mImage.Reset();
   mPropertyMap.Clear();
+  mRelayoutRequired = true;
 
   // Don't set mVisual until it is ready and shown. Getters will still use current visual.
   Toolkit::Visual::Base visual =  Toolkit::VisualFactory::Get().CreateVisual( url, size );
 
   // Don't set mVisual until it is ready and shown. Getters will still use current visual.
   Toolkit::Visual::Base visual =  Toolkit::VisualFactory::Get().CreateVisual( url, size );
@@ -228,6 +231,9 @@ void ImageView::OnRelayout( const Vector2& size, RelayoutContainer& container )
 
 void ImageView::OnResourceReady( Toolkit::Control control )
 {
 
 void ImageView::OnResourceReady( Toolkit::Control control )
 {
+  // Visual ready so update visual attached to this ImageView, following call to RelayoutRequest will use this visual.
+  mVisual = DevelControl::GetVisual( *this, Toolkit::ImageView::Property::IMAGE );
+
   if( mRelayoutRequired)
   {
     mRelayoutRequired = false;
   if( mRelayoutRequired)
   {
     mRelayoutRequired = false;