// 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 )
ImageView::ImageView()
: Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ),
- mImageSize()
+ mImageSize(),
+ mImageVisualPaddingSetByTransform( false )
{
}
}
}
+void ImageView::OnStageConnection( int depth )
+{
+ if( mImage )
+ {
+ mImage.UploadedSignal().Emit( mImage );
+ }
+
+ Dali::ResourceImage resourceImage = Dali::ResourceImage::DownCast( mImage );
+ if( resourceImage )
+ {
+ resourceImage.LoadingFinishedSignal().Emit( resourceImage );
+ }
+
+ Control::OnStageConnection( depth ); // Enabled visuals will be put on stage
+}
+
Vector3 ImageView::GetNaturalSize()
{
if( mVisual )
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>(
}
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 );
.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 );
+ }
}
}
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;
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() )