[Tizen] Restore behavior of Uploaded and LoadingFinished signal
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / image-view / image-view-impl.cpp
index eba1085..5a0aa91 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2018 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2019 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -52,7 +52,7 @@ BaseHandle Create()
 
 // Setup properties, signals and actions using the type-registry.
 DALI_TYPE_REGISTRATION_BEGIN( Toolkit::ImageView, Toolkit::Control, Create );
-DALI_PROPERTY_REGISTRATION( Toolkit, ImageView, "resourceUrl", STRING, RESOURCE_URL )
+DALI_PROPERTY_REGISTRATION( Toolkit, ImageView, "reservedProperty01", STRING, RESERVED_PROPERTY_01 )
 DALI_PROPERTY_REGISTRATION( Toolkit, ImageView, "image", MAP, IMAGE )
 DALI_PROPERTY_REGISTRATION( Toolkit, ImageView, "preMultipliedAlpha", BOOLEAN, PRE_MULTIPLIED_ALPHA )
 
@@ -65,7 +65,8 @@ using namespace Dali;
 
 ImageView::ImageView()
 : Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ),
-  mImageSize()
+  mImageSize(),
+  mImageVisualPaddingSetByTransform( false )
 {
 }
 
@@ -120,14 +121,14 @@ void ImageView::SetImage( Image image )
   }
   else
   {
-    // Unregister the exsiting visual
+    // Unregister the existing visual
     DevelControl::UnregisterVisual( *this, Toolkit::ImageView::Property::IMAGE );
 
     // Trigger a size negotiation request that may be needed when unregistering a visual.
     RelayoutRequest();
   }
 
-  Toolkit::DevelControl::RequestLayout( *this );
+  // Signal that a Relayout may be needed
 }
 
 void ImageView::SetImage( const Property::Map& map )
@@ -163,7 +164,7 @@ void ImageView::SetImage( const Property::Map& map )
     RelayoutRequest();
   }
 
-  Toolkit::DevelControl::RequestLayout( *this );
+  // Signal that a Relayout may be needed
 }
 
 void ImageView::SetImage( const std::string& url, ImageDimensions size )
@@ -200,7 +201,7 @@ void ImageView::SetImage( const std::string& url, ImageDimensions size )
     RelayoutRequest();
   }
 
-  Toolkit::DevelControl::RequestLayout( *this );
+  // Signal that a Relayout may be needed
 }
 
 Image ImageView::GetImage() const
@@ -309,7 +310,8 @@ void ImageView::OnRelayout( const Vector2& size, RelayoutContainer& container )
     Extents padding = Self().GetProperty<Extents>( Toolkit::Control::Property::PADDING );
     const Visual::FittingMode fittingMode = Toolkit::GetImplementation(mVisual).GetFittingMode();
 
-    if( ( padding != Extents() ) || // If padding is not zero
+    bool zeroPadding = ( padding == Extents() );
+    if( ( !zeroPadding ) || // If padding is not zero
         ( fittingMode == Visual::FittingMode::FIT_KEEP_ASPECT_RATIO ) )
     {
       Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>(
@@ -321,6 +323,7 @@ void ImageView::OnRelayout( const Vector2& size, RelayoutContainer& container )
       }
 
       auto finalOffset = Vector2( padding.start, padding.top );
+      mImageVisualPaddingSetByTransform = true;
 
       // remove padding from the size to know how much is left for the visual
       auto finalSize = size - Vector2( padding.start + padding.end, padding.top + padding.bottom );
@@ -351,8 +354,25 @@ void ImageView::OnRelayout( const Vector2& size, RelayoutContainer& container )
                   .Add( Toolkit::Visual::Transform::Property::SIZE_POLICY,
                       Vector2( Toolkit::Visual::Transform::Policy::ABSOLUTE, Toolkit::Visual::Transform::Policy::ABSOLUTE ) );
     }
+    else if ( mImageVisualPaddingSetByTransform && zeroPadding )  // Reset offset to zero only if padding applied previously
+    {
+      mImageVisualPaddingSetByTransform = false;
+      // Reset the transform map
+      transformMap.Add( Toolkit::Visual::Transform::Property::OFFSET, Vector2::ZERO )
+                  .Add( Toolkit::Visual::Transform::Property::OFFSET_POLICY,
+                        Vector2( Toolkit::Visual::Transform::Policy::RELATIVE, Toolkit::Visual::Transform::Policy::RELATIVE ) );
+    }
+
 
     mVisual.SetTransformAndSize( transformMap, size );
+
+    // mVisual is not updated util the resource is ready in the case of visual replacement.
+    // So apply the transform and size to the new visual.
+    Toolkit::Visual::Base visual = DevelControl::GetVisual( *this, Toolkit::ImageView::Property::IMAGE );
+    if( visual && visual != mVisual )
+    {
+      visual.SetTransformAndSize( transformMap, size );
+    }
   }
 }
 
@@ -360,7 +380,7 @@ 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 );
-  Toolkit::DevelControl::RequestLayout( *this );
+  // Signal that a Relayout may be needed
 }
 
 ///////////////////////////////////////////////////////////
@@ -377,16 +397,6 @@ void ImageView::SetProperty( BaseObject* object, Property::Index index, const Pr
     ImageView& impl = GetImpl( imageView );
     switch ( index )
     {
-      case Toolkit::ImageView::Property::RESOURCE_URL:
-      {
-        std::string imageUrl;
-        if( value.Get( imageUrl ) )
-        {
-          impl.SetImage( imageUrl, ImageDimensions() );
-        }
-        break;
-      }
-
       case Toolkit::ImageView::Property::IMAGE:
       {
         std::string imageUrl;
@@ -458,15 +468,6 @@ Property::Value ImageView::GetProperty( BaseObject* object, Property::Index prop
     ImageView& impl = GetImpl( imageview );
     switch ( propertyIndex )
     {
-      case Toolkit::ImageView::Property::RESOURCE_URL:
-      {
-        if ( !impl.mUrl.empty() )
-        {
-          value = impl.mUrl;
-        }
-        break;
-      }
-
       case Toolkit::ImageView::Property::IMAGE:
       {
         if ( !impl.mUrl.empty() )