+ struct ActorSizeSpec
+ {
+ ActorSizeSpec(Actor actor)
+ : actor( actor )
+ , widthSpec( actor.GetProperty<int>( Toolkit::LayoutItem::ChildProperty::WIDTH_SPECIFICATION ) )
+ , heightSpec( actor.GetProperty<int>( Toolkit::LayoutItem::ChildProperty::HEIGHT_SPECIFICATION ) )
+ {
+ }
+
+ WeakHandle<Actor> actor;
+ int widthSpec;
+ int heightSpec;
+ };
+ std::vector<ActorSizeSpec> mActorSizeSpecs;
+
+ void UpdateMeasureHierarchyForAnimation( LayoutData& layoutData );
+
+ void UpdateMeasureHierarchyForAnimation( Actor root, LayoutData& layoutData );
+
+ void RestoreActorsSpecs();
+
+ std::list< LayoutTransition > mLayoutTransitions;
+ struct AnimationFinishedFunctor
+ {
+ AnimationFinishedFunctor( LayoutController& layoutController, LayoutTransition& layoutTransition, LayoutPositionDataArray& array )
+ : layoutController( layoutController ),
+ layoutDataPositionArray(),
+ layoutItem( layoutTransition.layoutItem ),
+ layoutTransitionType( layoutTransition.layoutTransitionType )
+ {
+ layoutDataPositionArray.swap( array );
+ }
+
+ void operator()( Animation& animation )
+ {
+ layoutController.PerformLayoutPositioning( layoutDataPositionArray, true );
+ layoutController.mAnimationFinishedFunctors.pop_front();
+ if( layoutTransitionType != -1 )
+ {
+ LayoutTransitionDataPtr layoutTransitionDataPtr = layoutItem->GetTransitionData( layoutTransitionType );
+ layoutTransitionDataPtr->EmitSignalFinish( layoutTransitionType );
+ }
+ }
+
+ LayoutController& layoutController;
+ LayoutPositionDataArray layoutDataPositionArray;
+ LayoutItemPtr layoutItem;
+ int layoutTransitionType;
+ };
+