X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Fdevel-api%2Flayouting%2Flayout-item-impl.cpp;h=a41a13edd59a9e452f890d0b5e33701879f17096;hp=f6bd7f8ad1313bfcb2431a0885c3c40d936cade1;hb=b5b75a20279ee1671b8a78228583cf5114536fb0;hpb=20b42a9bcaba6b874f2271f03a56da6f884c4053 diff --git a/dali-toolkit/devel-api/layouting/layout-item-impl.cpp b/dali-toolkit/devel-api/layouting/layout-item-impl.cpp index f6bd7f8..a41a13e 100644 --- a/dali-toolkit/devel-api/layouting/layout-item-impl.cpp +++ b/dali-toolkit/devel-api/layouting/layout-item-impl.cpp @@ -19,19 +19,24 @@ #include #include #include +#include #include +#include +#include #include -#if defined(DEBUG_ENABLED) - Debug::Filter* gLayoutFilter = Debug::Filter::New( Debug::Verbose, false, "LOG_LAYOUT" ); -#endif +#include namespace { + +#if defined(DEBUG_ENABLED) +Debug::Filter* gLayoutFilter = Debug::Filter::New( Debug::NoLogging, false, "LOG_LAYOUT" ); +#endif + const char* WIDTH_SPECIFICATION_NAME( "widthSpecification" ); const char* HEIGHT_SPECIFICATION_NAME( "heightSpecification" ); -const float DEFAULT_TRANSITION_DURATION( 0.5f ); } namespace Dali @@ -61,15 +66,14 @@ LayoutItemPtr LayoutItem::New( Handle& owner ) void LayoutItem::Initialize( Handle& owner, const std::string& containerType ) { - mImpl->mOwner = &(owner.GetBaseObject()); + mImpl->mOwner = owner; RegisterChildProperties( containerType ); OnInitialize(); // Ensure direct deriving class gets initialized - RequestLayout(); } Handle LayoutItem::GetOwner() const { - return Handle::DownCast(BaseHandle(mImpl->mOwner)); + return mImpl->mOwner.GetHandle(); } void LayoutItem::Unparent() @@ -77,13 +81,60 @@ void LayoutItem::Unparent() // Enable directly derived types to first remove children OnUnparent(); + // Remove myself from parent + LayoutParent* parent = GetParent(); + if( parent ) + { + parent->Remove( *this ); + } + + // Remove parent reference + SetParent(nullptr); + // Last, clear owner - mImpl->mOwner = NULL; + mImpl->mOwner.Reset(); +} + +LayoutTransitionDataPtr LayoutItem::GetDefaultTransition() +{ + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::GetDefaultTransition\n" ); + if ( !mImpl->mDefaultTransitionData.Get() ) + { + auto owner = GetOwner(); + auto actor = Actor::DownCast( owner ); + + mImpl->mDefaultTransitionData = LayoutTransitionData::New(); + { + Property::Map map; + map[ Dali::Toolkit::LayoutTransitionData::AnimatorKey::PROPERTY ] = Actor::Property::POSITION; + map[ Dali::Toolkit::LayoutTransitionData::AnimatorKey::TARGET_VALUE ] = Property::Value(); // capture from layout update + map[ Dali::Toolkit::LayoutTransitionData::AnimatorKey::ANIMATOR ] = std::string(); // default animator with default duration + // Capture calculated position after layout, apply default linear animation + mImpl->mDefaultTransitionData->AddPropertyAnimator( actor, map ); + } + { + Property::Map map; + map[ Dali::Toolkit::LayoutTransitionData::AnimatorKey::PROPERTY ] = Actor::Property::SIZE; + map[ Dali::Toolkit::LayoutTransitionData::AnimatorKey::TARGET_VALUE ] = Property::Value(); // capture from layout update + map[ Dali::Toolkit::LayoutTransitionData::AnimatorKey::ANIMATOR ] = std::string(); // default animator with default duration + // Capture calculated size after layout, apply default linear animation + mImpl->mDefaultTransitionData->AddPropertyAnimator( actor, map ); + } + } + return mImpl->mDefaultTransitionData; } void LayoutItem::SetAnimateLayout( bool animateLayout ) { + auto owner = GetOwner(); + auto actor = Actor::DownCast(owner); + + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::SetAnimateLayout animateLayout(%s) owner(%s)\n", (animateLayout)?"true":"false", + ( ( Actor::DownCast( owner) ) ? Actor::DownCast(owner).GetName().c_str() : "Invalid Actor" ) ); + mImpl->mAnimated = animateLayout; + + OnAnimationStateChanged( animateLayout ); } bool LayoutItem::IsLayoutAnimated() const @@ -91,6 +142,49 @@ bool LayoutItem::IsLayoutAnimated() const return mImpl->mAnimated; } +void LayoutItem::SetTransitionData( int layoutTransitionType, Internal::LayoutTransitionDataPtr layoutTransitionDataPtr ) +{ + switch ( layoutTransitionType ) + { + case Dali::Toolkit::LayoutTransitionData::ON_CHILD_ADD: + mImpl->mOnChildAddTransitionData = layoutTransitionDataPtr; + break; + case Dali::Toolkit::LayoutTransitionData::ON_CHILD_REMOVE: + mImpl->mOnChildRemoveTransitionData = layoutTransitionDataPtr; + break; + case Dali::Toolkit::LayoutTransitionData::ON_CHILD_FOCUS: + mImpl->mOnChildFocusTransitionData = layoutTransitionDataPtr; + break; + case Dali::Toolkit::LayoutTransitionData::ON_OWNER_SET: + mImpl->mOnOwnerSetTransitionData = layoutTransitionDataPtr; + break; + case Dali::Toolkit::LayoutTransitionData::ON_LAYOUT_CHANGE: + mImpl->mOnLayoutChangeTransitionData = layoutTransitionDataPtr; + break; + default: + break; + } +} + +Internal::LayoutTransitionDataPtr LayoutItem::GetTransitionData( int layoutTransitionType ) const +{ + switch ( layoutTransitionType ) + { + case Dali::Toolkit::LayoutTransitionData::ON_CHILD_ADD: + return mImpl->mOnChildAddTransitionData.Get(); + case Dali::Toolkit::LayoutTransitionData::ON_CHILD_REMOVE: + return mImpl->mOnChildRemoveTransitionData.Get(); + case Dali::Toolkit::LayoutTransitionData::ON_CHILD_FOCUS: + return mImpl->mOnChildFocusTransitionData.Get(); + case Dali::Toolkit::LayoutTransitionData::ON_OWNER_SET: + return mImpl->mOnOwnerSetTransitionData.Get(); + case Dali::Toolkit::LayoutTransitionData::ON_LAYOUT_CHANGE: + return mImpl->mOnLayoutChangeTransitionData.Get(); + default: + return LayoutTransitionDataPtr(); + } +} + void LayoutItem::RegisterChildProperties( const std::string& containerType ) { // Call on derived types @@ -121,6 +215,8 @@ void LayoutItem::OnRegisterChildProperties( const std::string& containerType ) void LayoutItem::Measure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec ) { + DALI_LOG_TRACE_METHOD( gLayoutFilter ); + const bool forceLayout = mImpl->GetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); const bool specChanged = @@ -137,52 +233,62 @@ void LayoutItem::Measure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasur const bool needsLayout = specChanged && ( !isSpecExactly || !matchesSpecSize ); - if( forceLayout || needsLayout) + DALI_LOG_STREAM( gLayoutFilter, Debug::Verbose, "LayoutItem::Measure("<ClearPrivateFlag( Impl::PRIVATE_FLAG_MEASURED_DIMENSION_SET ); - //resolveRtlPropertiesIfNeeded(); - - int cacheIndex = -1; // = forceLayout ? -1 : mMeasureCache.indexOfKey(key); - if( cacheIndex < 0 ) //|| sIgnoreMeasureCache ) - { - // measure ourselves, this should set the measured dimension flag back - OnMeasure( widthMeasureSpec, heightMeasureSpec ); - mImpl->ClearPrivateFlag( Impl::PRIVATE_FLAG_MEASURE_NEEDED_BEFORE_LAYOUT ); - } - else - { - mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_MEASURE_NEEDED_BEFORE_LAYOUT ); - } + // measure ourselves, this should set the measured dimension flag back +#if defined(DEBUG_ENABLED) + std::ostringstream o; + o<ClearPrivateFlag( Impl::PRIVATE_FLAG_MEASURE_NEEDED_BEFORE_LAYOUT ); // flag not set, setMeasuredDimension() was not invoked, we raise an exception to warn the developer DALI_ASSERT_ALWAYS( mImpl->GetPrivateFlag( Impl::PRIVATE_FLAG_MEASURED_DIMENSION_SET ) && - "Layout's OnMeasure() did not set the measured dimension by calling setMeasuredDimension()" ); + "Layout's OnMeasure() Measured dimension flag not set" ); mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_LAYOUT_REQUIRED ); } mImpl->mOldWidthMeasureSpec = widthMeasureSpec; mImpl->mOldHeightMeasureSpec = heightMeasureSpec; - - //mMeasureCache.put(key, ((long) mMeasuredWidth) << 32 | (long) mMeasuredHeight & 0xffffffffL); // suppress sign extension } void LayoutItem::Layout( LayoutLength l, LayoutLength t, LayoutLength r, LayoutLength b ) { + DALI_LOG_TRACE_METHOD( gLayoutFilter ); + if( mImpl->GetPrivateFlag( Impl::PRIVATE_FLAG_MEASURE_NEEDED_BEFORE_LAYOUT ) ) { OnMeasure( mImpl->mOldWidthMeasureSpec, mImpl->mOldHeightMeasureSpec ); mImpl->ClearPrivateFlag( Impl::PRIVATE_FLAG_MEASURE_NEEDED_BEFORE_LAYOUT ); } + LayoutData& layoutData = *mImpl->sLayoutData; + size_t size = layoutData.childrenLayoutDataArray.size(); + bool changed = SetFrame( l, t, r, b ); if( changed || mImpl->GetPrivateFlag( Impl::PRIVATE_FLAG_LAYOUT_REQUIRED ) ) { + OnLayout( changed, l, t, r, b ); mImpl->ClearPrivateFlag( Impl::PRIVATE_FLAG_LAYOUT_REQUIRED ); } + if ( size != layoutData.childrenLayoutDataArray.size() ) + { + layoutData.childrenLayoutDataArray.resize( size ); + } + mImpl->ClearPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_IS_LAID_OUT ); } @@ -211,7 +317,34 @@ void LayoutItem::SetMinimumHeight( LayoutLength minimumHeight ) Extents LayoutItem::GetPadding() const { - return mImpl->mPadding; + Toolkit::Control control = Toolkit::Control::DownCast( GetOwner() ); + if( control ) + { + Extents padding = control.GetProperty( Toolkit::Control::Property::PADDING ); + + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::Padding for %s : (%d,%d,%d,%d) \n", + control.GetName().c_str(), + padding.start, padding.end, padding.top, padding.bottom + ); + return padding; + } + else + { + return Extents(); + } +} + +Extents LayoutItem::GetMargin() const +{ + Toolkit::Control control = Toolkit::Control::DownCast( GetOwner() ); + if ( control ) + { + return control.GetProperty( Toolkit::Control::Property::MARGIN ); + } + else + { + return Extents(); + } } LayoutLength LayoutItem::GetDefaultSize( LayoutLength size, MeasureSpec measureSpec ) @@ -220,6 +353,8 @@ LayoutLength LayoutItem::GetDefaultSize( LayoutLength size, MeasureSpec measureS auto specMode = measureSpec.GetMode(); auto specSize = measureSpec.GetSize(); + DALI_LOG_STREAM( gLayoutFilter, Debug::Verbose, "LayoutItem::GetDefaultSize MeasureSpec("< LayoutLength( 0 ) ) + { + result = size; + } + else + { + result = specSize; + } + break; + } case MeasureSpec::Mode::EXACTLY: { result = specSize; break; } } + DALI_LOG_STREAM( gLayoutFilter, Debug::General, "LayoutItem::GetDefaultSize setting default size:" << result << "\n" ); return result; } void LayoutItem::OnMeasure( MeasureSpec widthMeasureSpec, MeasureSpec heightMeasureSpec) { + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::OnMeasure\n"); + + // GetDefaultSize will limit the MeasureSpec to the suggested minimumWidth and minimumHeight SetMeasuredDimensions( GetDefaultSize( GetSuggestedMinimumWidth(), widthMeasureSpec ), GetDefaultSize( GetSuggestedMinimumHeight(), heightMeasureSpec ) ); } @@ -247,6 +402,12 @@ void LayoutItem::OnLayout( bool changed, LayoutLength left, LayoutLength top, La { } +void LayoutItem::SetParent( LayoutParent* parent ) +{ + mImpl->mLayoutParent = parent; + mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_SET_FRAME ); +} + LayoutParent* LayoutItem::GetParent() { return mImpl->mLayoutParent; @@ -254,10 +415,47 @@ LayoutParent* LayoutItem::GetParent() void LayoutItem::RequestLayout() { - // @todo Enforce failure if called in Measure/Layout passes. - mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); - Toolkit::LayoutController layoutController = Toolkit::LayoutController::Get(); - layoutController.RequestLayout( Toolkit::LayoutItem(this) ); + Toolkit::Control control = Toolkit::Control::DownCast( GetOwner() ); + if( control ) + { + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::RequestLayout control(%s)\n", + control.GetName().c_str() ); + + // @todo Enforce failure if called in Measure/Layout passes. + mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); + Toolkit::LayoutController layoutController = Toolkit::LayoutController::Get(); + layoutController.RequestLayout( Toolkit::LayoutItem( this ) ); + } +} + +void LayoutItem::RequestLayout( Dali::Toolkit::LayoutTransitionData::Type layoutAnimationType ) +{ + Toolkit::Control control = Toolkit::Control::DownCast( GetOwner() ); + if ( control ) + { + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::RequestLayout control(%s) layoutTranstionType(%d)\n", + control.GetName().c_str(), (int)layoutAnimationType ); + + // @todo Enforce failure if called in Measure/Layout passes. + mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); + Toolkit::LayoutController layoutController = Toolkit::LayoutController::Get(); + layoutController.RequestLayout( Toolkit::LayoutItem(this), layoutAnimationType ); + } +} + +void LayoutItem::RequestLayout( Dali::Toolkit::LayoutTransitionData::Type layoutAnimationType, Actor gainedChild, Actor lostChild ) +{ + Toolkit::Control control = Toolkit::Control::DownCast( GetOwner() ); + if ( control ) + { + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::RequestLayout control(%s) layoutTranstionType(%d)\n", + control.GetName().c_str(), (int)layoutAnimationType ); + + // @todo Enforce failure if called in Measure/Layout passes. + mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); + Toolkit::LayoutController layoutController = Toolkit::LayoutController::Get(); + layoutController.RequestLayout( Toolkit::LayoutItem(this), layoutAnimationType, gainedChild, lostChild ); + } } bool LayoutItem::IsLayoutRequested() const @@ -265,8 +463,34 @@ bool LayoutItem::IsLayoutRequested() const return mImpl->GetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); } +void LayoutItem::SetLayoutRequested() +{ + mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_LAYOUT ); +} + +bool LayoutItem::IsResizePolicyRequired() const +{ + return mImpl->GetPrivateFlag( Impl::PRIVATE_FLAG_USE_RESIZE_POLICY ); +} + +void LayoutItem::SetResizePolicyRequired( bool resizePolicyRequired ) +{ + if( resizePolicyRequired ) + { + mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_USE_RESIZE_POLICY ); + } + else + { + mImpl->ClearPrivateFlag( Impl::PRIVATE_FLAG_USE_RESIZE_POLICY ); + } +} + void LayoutItem::SetMeasuredDimensions( MeasuredSize measuredWidth, MeasuredSize measuredHeight ) { + + DALI_LOG_STREAM( gLayoutFilter, Debug::Verbose, "LayoutItem::SetMeasuredDimensions width(" << measuredWidth.GetSize() << ") height(" << measuredHeight.GetSize() << ") Control:" << + ( ( Actor::DownCast( GetOwner()) ) ? Actor::DownCast(GetOwner()).GetName().c_str() : "Invalid Actor" ) << "\n" ); + mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_MEASURED_DIMENSION_SET ); mImpl->mMeasuredWidth = measuredWidth; mImpl->mMeasuredHeight = measuredHeight; @@ -275,7 +499,7 @@ void LayoutItem::SetMeasuredDimensions( MeasuredSize measuredWidth, MeasuredSize LayoutLength LayoutItem::GetMeasuredWidth() const { // Get the size portion of the measured width - return mImpl->mMeasuredWidth.GetSize(); + return mImpl->mMeasuredWidth.GetSize(); } LayoutLength LayoutItem::GetMeasuredHeight() const @@ -296,19 +520,19 @@ MeasuredSize LayoutItem::GetMeasuredHeightAndState() const LayoutLength LayoutItem::GetSuggestedMinimumWidth() const { auto owner = GetOwner(); - auto actor = Actor::DownCast(owner); + auto actor = Actor::DownCast( owner ); auto naturalSize = actor ? actor.GetNaturalSize() : Vector3::ZERO; - return std::max( mImpl->mMinimumSize.GetWidth(), LayoutLength::IntType( naturalSize.width ) ); + return std::max( mImpl->mMinimumSize.GetWidth(), LayoutLength( naturalSize.width ) ); } LayoutLength LayoutItem::GetSuggestedMinimumHeight() const { auto owner = GetOwner(); - auto actor = Actor::DownCast(owner); + auto actor = Actor::DownCast( owner ); auto naturalSize = actor ? actor.GetNaturalSize() : Vector3::ZERO; - return std::max( mImpl->mMinimumSize.GetHeight(), LayoutLength::IntType(naturalSize.height) ); + return std::max( mImpl->mMinimumSize.GetHeight(), LayoutLength( naturalSize.height ) ); } MeasuredSize LayoutItem::ResolveSizeAndState( LayoutLength size, MeasureSpec measureSpec, MeasuredSize::State childMeasuredState ) @@ -355,54 +579,85 @@ bool LayoutItem::SetFrame( LayoutLength left, LayoutLength top, LayoutLength rig { bool changed = false; - DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::SetFrame(%d, %d, %d, %d)\n", left.mValue, top.mValue, right.mValue, bottom.mValue ); + DALI_LOG_STREAM( gLayoutFilter, Debug::Verbose, "LayoutItem::SetFrame enter(" << left << ", " << top << ", " << right << ", " << bottom << ")\n" ); - if( mImpl->mLeft != left || mImpl->mRight != right || mImpl->mTop != top || mImpl->mBottom != bottom ) + if( mImpl->mLeft != left || mImpl->mRight != right || mImpl->mTop != top || mImpl->mBottom != bottom || mImpl->GetPrivateFlag( Impl::PRIVATE_FLAG_FORCE_SET_FRAME ) ) { changed = true; + mImpl->ClearPrivateFlag( Impl::PRIVATE_FLAG_FORCE_SET_FRAME ); + } - auto oldWidth = mImpl->mRight - mImpl->mLeft; - auto oldHeight = mImpl->mBottom - mImpl->mTop; - auto newWidth = right - left; - auto newHeight = bottom - top; - bool sizeChanged = (newWidth != oldWidth) || (newHeight != oldHeight); + LayoutLength oldWidth = mImpl->mRight - mImpl->mLeft; + LayoutLength oldHeight = mImpl->mBottom - mImpl->mTop; + LayoutLength newWidth = right - left; + LayoutLength newHeight = bottom - top; + bool sizeChanged = ( newWidth != oldWidth ) || ( newHeight != oldHeight ); - mImpl->mLeft = left; - mImpl->mTop = top; - mImpl->mRight = right; - mImpl->mBottom = bottom; + mImpl->mLeft = left; + mImpl->mTop = top; + mImpl->mRight = right; + mImpl->mBottom = bottom; - mImpl->SetPrivateFlag( Impl::PRIVATE_FLAG_HAS_BOUNDS ); + // Reflect up to parent control + auto owner = GetOwner(); + auto actor = Actor::DownCast( owner ); + LayoutData& layoutData = *mImpl->sLayoutData; + if( actor ) + { + if( changed || mImpl->mAnimated ) + { + layoutData.layoutPositionDataArray.push_back( + LayoutPositionData( actor, left.AsDecimal(), top.AsDecimal(), right.AsDecimal(), bottom.AsDecimal(), mImpl->mAnimated ) ); + } - // Reflect up to parent control - auto owner = GetOwner(); - auto actor = Actor::DownCast(owner); - if( actor ) + if( mImpl->mAnimated && !layoutData.speculativeLayout ) { - if( mImpl->mAnimated ) + if( layoutData.layoutTransition.layoutTransitionType != -1 ) { - auto animation = Animation::New( 0.5f ); - animation.AnimateTo( Property( actor, Actor::Property::POSITION ), - Vector3( float(left.mValue), float(top.mValue), 0.0f ) ); - animation.AnimateTo( Property( actor, Actor::Property::SIZE ), - Vector3( right-left, bottom-top, 0.0f ) ); - animation.FinishedSignal().Connect( mSlotDelegate, &LayoutItem::OnLayoutAnimationFinished ); - animation.Play(); + LayoutItem* transitionOwner = layoutData.layoutTransition.layoutItem.Get(); + LayoutTransitionDataPtr layoutTransitionDataPtr = GetTransitionData( layoutData.layoutTransition.layoutTransitionType ); + + // Found transition owner + if( transitionOwner == this && layoutTransitionDataPtr.Get() ) + { + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::SetFrame apply transition to (%s), transition type (%d)\n", actor.GetName().c_str(), layoutData.layoutTransition.layoutTransitionType ); + layoutTransitionDataPtr->CollectLayoutDataElements( actor, layoutData ); + changed = true; + } + else + { + LayoutTransitionData::CollectChildrenLayoutDataElements( actor, layoutData ); + } } else { - // @todo Collate into list of Property & Property::Value pairs. - actor.SetPosition( Vector3( float(left.mValue), float(top.mValue), 0.0f ) ); - actor.SetSize( Vector3( right-left, bottom-top, 0.0f ) ); + if( changed ) + { + LayoutTransitionDataPtr layoutTransitionDataPtr = GetTransitionData( Dali::Toolkit::LayoutTransitionData::ON_LAYOUT_CHANGE ); + if( layoutTransitionDataPtr ) // has custom default animation and normal update + { + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::SetFrame apply custom default transition to (%s), transition type (%d)\n", actor.GetName().c_str(), Dali::Toolkit::LayoutTransitionData::ON_LAYOUT_CHANGE ); + layoutTransitionDataPtr->CollectLayoutDataElements( actor, layoutData ); + } + else + { + DALI_LOG_INFO( gLayoutFilter, Debug::Verbose, "LayoutItem::SetFrame apply default transition to (%s), transition type (%d)\n", actor.GetName().c_str(), layoutData.layoutTransition.layoutTransitionType ); + GetDefaultTransition()->CollectLayoutDataElements( actor, layoutData ); + } + } } } + } - if( sizeChanged ) - { - SizeChange( LayoutSize( newWidth, newHeight ), LayoutSize( oldWidth, oldHeight ) ); - } + // TODO: do we need it + if( sizeChanged ) + { + SizeChange( LayoutSize( newWidth, newHeight ), LayoutSize( oldWidth, oldHeight ) ); } + + DALI_LOG_STREAM( gLayoutFilter, Debug::Verbose, "LayoutItem::SetFrame exit(" << left << ", " << top << ", " << right << ", " << bottom << ")\n" ); + return changed; } @@ -412,7 +667,7 @@ void LayoutItem::OnLayoutAnimationFinished( Animation& animation ) auto actor = Actor::DownCast(owner); if( actor ) { - actor.SetSize( Vector3( mImpl->mRight-mImpl->mLeft, mImpl->mBottom-mImpl->mTop, 0.0f ) ); + actor.SetSize( Vector3( mImpl->mRight.AsInteger() - mImpl->mLeft.AsInteger(), mImpl->mBottom.AsInteger() - mImpl->mTop.AsInteger(), 0.0f ) ); } }