/*
- * 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.
// 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 )
{
}
}
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 )
RelayoutRequest();
}
- Toolkit::DevelControl::RequestLayout( *this );
+ // Signal that a Relayout may be needed
}
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
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 );
+ }
}
}
{
// 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
}
///////////////////////////////////////////////////////////
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() )
Scripting::CreatePropertyMap( impl.mImage, map );
value = map;
}
- else if( !impl.mPropertyMap.Empty() )
+ else
{
- value = impl.mPropertyMap;
+ Property::Map map;
+ Toolkit::Visual::Base visual = DevelControl::GetVisual( impl, Toolkit::ImageView::Property::IMAGE );
+ if( visual )
+ {
+ visual.CreatePropertyMap( map );
+ }
+ value = map;
}
break;
}