struct LayoutTransition
{
- LayoutTransition( LayoutItem& layoutItem, int layoutTransitionType )
+ LayoutTransition( LayoutItem& layoutItem, int layoutTransitionType, Actor gainedChild, Actor lostChild )
: layoutItem( &layoutItem )
, layoutTransitionType( layoutTransitionType )
+ , gainedChild( gainedChild )
+ , lostChild( lostChild )
{
}
bool operator==( const LayoutTransition& rhs )
{
- return ( ( layoutItem.Get() == rhs.layoutItem.Get() ) && layoutTransitionType == rhs.layoutTransitionType );
+ return ( layoutItem.Get() == rhs.layoutItem.Get()
+ && layoutTransitionType == rhs.layoutTransitionType
+ && gainedChild == rhs.gainedChild
+ && lostChild == rhs.lostChild );
}
LayoutItemPtr layoutItem;
int layoutTransitionType;
+ Actor gainedChild;
+ Actor lostChild;
};
const float DEFAULT_TRANSITION_DURATION( 0.5f );
struct LayoutDataAnimator
{
- enum class AnimatorType
- {
- ANIMATE_TO,
- ANIMATE_BY,
- ANIMATE_BETWEEN,
- ANIMATE_PATH
- };
-
LayoutDataAnimator()
- : animatorType( AnimatorType::ANIMATE_TO ),
+ : animatorType( Toolkit::LayoutTransitionData::Animator::ANIMATE_TO ),
alphaFunction( AlphaFunction::LINEAR ),
timePeriod( 0.0f, DEFAULT_TRANSITION_DURATION ),
interpolation( Animation::Linear )
}
std::string name;
- AnimatorType animatorType;
+ Toolkit::LayoutTransitionData::Animator::Type animatorType;
AlphaFunction alphaFunction;
TimePeriod timePeriod;
struct LayoutPositionData
{
LayoutPositionData( Handle handle, float left, float top, float right, float bottom, bool animated ) :
- handle( handle ), left( left ), top( top ), right( right ), bottom( bottom ), animated( animated )
+ handle( handle ), left( left ), top( top ), right( right ), bottom( bottom ), animated( animated ), updateWithCurrentSize(false)
{
};
float right;
float bottom;
bool animated;
+ bool updateWithCurrentSize;
};
using LayoutPositionDataArray = std::vector< LayoutPositionData >;
struct LayoutDataElement
{
LayoutDataElement()
- : propertyIndex( Property::INVALID_KEY ), animatorIndex( -1 ), positionDataIndex(-1 )
- {
- };
-
- LayoutDataElement( Actor actor, Property::Index propertyIndex, Property::Value value )
- : handle( actor ),
- propertyIndex( propertyIndex ),
- targetValue( value ),
+ : propertyIndex( Property::INVALID_KEY ),
animatorIndex( -1 ),
- positionDataIndex( -1 )
+ positionDataIndex(-1 ),
+ condition( Dali::Toolkit::LayoutTransitionData::Condition::NONE ),
+ updateMeasuredSize( false )
{
};
+ bool AdjustMeasuredSize( float& width, float& height, Toolkit::LayoutTransitionData::Animator::Type animatorType );
+ void UpdatePropertyIndex();
+ void UpdateAnimatorIndex( const LayoutAnimatorArray& animators );
+ void UpdatePositionDataIndex( LayoutData& layoutData );
+
BaseHandle handle;
+ std::string propertyName;
Property::Index propertyIndex;
Property::Value initialValue;
Property::Value targetValue;
+ std::string animatorName;
int animatorIndex;
int positionDataIndex;
+ int condition;
+ bool updateMeasuredSize;
};
+using LayoutDataArray = std::vector< LayoutDataElement >;
+
class LayoutTransitionData;
using LayoutTransitionDataPtr = IntrusivePtr<LayoutTransitionData>;
Path path;
Vector3 forward;
};
-
using PropertyAnimatorArray = std::vector< PropertyAnimator >;
static LayoutTransitionDataPtr New();
LayoutTransitionData( const LayoutTransitionData& ) = delete;
LayoutTransitionData& operator=( const LayoutTransitionData& ) = delete;
+ /**
+ * @brief Add a property animator for an actor in the transition
+ * @param[in] actor The actor
+ * @param[in] map The map containing the transition animator keys
+ *
+ * This will parse the property animator map and add the layout data element to the array of layout data elements related to this transition
+ */
void AddPropertyAnimator( Actor actor, Property::Map map );
+
+ /**
+ * @brief Add a property animator for an actor in the transition
+ * @param[in] actor The actor
+ * @param[in] map The map containing the transition animator keys
+ * @param[in] keyFrames The key frames used by the property animator
+ * @param[in] interpolation The interpolation used by the property animator
+ *
+ * This will parse the property animator map and add the layout data element to the array of layout data elements related to this transition
+ */
void AddPropertyAnimator( Actor actor, Property::Map map, KeyFrames keyFrames, Animation::Interpolation interpolation );
+
+ /**
+ * @brief Add a property animator for an actor in the transition
+ * @param[in] actor The actor
+ * @param[in] map The map containing the transition animator keys
+ * @param[in] path The path for the property animator
+ * @param[in] forward The forward vector for the property animator
+ *
+ * This will parse the property animator map and add the layout data element to the array of layout data elements related to this transition
+ */
void AddPropertyAnimator( Actor actor, Property::Map map, Path path, Vector3 forward );
- void ConvertToLayoutDataElements( Actor, LayoutData& layoutData );
+ /**
+ * @brief Collect the transition layout data elements
+ * @param[in] actor The actor the transition property animators are applied to
+ * @param[in] layoutData The layout data containing layout data elements array for the layout update
+ *
+ * This will copy the transition layout data elements to the layout data elements array
+ */
+ void CollectLayoutDataElements( Actor, LayoutData& layoutData );
/**
- * @copydoc Dali::Animation::FinishedSignal()
+ * @brief Collect the transition children layout data elements
+ * @param[in] actor The actor the transition property animators are applied to
+ * @param[in] layoutData The layout data containing layout data elements array for the layout update
+ *
+ * This will copy the children transition layout data elements to the layout data elements array
+ */
+ static void CollectChildrenLayoutDataElements( Actor, LayoutData& layoutData );
+
+ /**
+ * @copydoc Dali::Toolkit::LayoutTransitionData::FinishedSignal()
*/
Dali::Toolkit::LayoutTransitionData::LayoutTransitionSignalType& FinishedSignal();
+ /**
+ * @brief Emit the transition finish signal
+ * @param[in] layoutTransitionType The transition type
+ */
void EmitSignalFinish( int layoutTransitionType );
+ /**
+ * @brief Check if one of the layout data elements has updateMeasuredSize flag set
+ */
+ bool HasUpdateMeasuredSize();
+
private:
+ /**
+ * @brief Convert the property animator data to the layout data animator
+ * @param[in] animatorData The animator data map
+ * @param[in] propertyAnimator The property animator
+ * @param[in] layoutAnimator The layout animator
+ *
+ * This will parse the property animator map and add the layout data element animator to the layout animators array
+ */
bool ConvertToLayoutAnimator( const Property::Map& animatorData, const PropertyAnimator& propertyAnimator, LayoutDataAnimator& layoutAnimator );
- bool ConvertToLayoutDataElement( const PropertyAnimator& propertyAnimator, LayoutDataElement& layoutDataElement, LayoutData& layoutData );
- PropertyAnimatorArray mPropertyAnimators;
+ /**
+ * @brief Convert the property animator to the layout data element
+ * @param[in] propertyAnimator The property animator
+ * @param[in] layoutDataElement The layout data element
+ * @param[in] layoutDataElement The layout data
+ *
+ * This will parse the property animator map and add the layout data element to the layout data elements array
+ */
+ bool ConvertToLayoutDataElement( const PropertyAnimator& propertyAnimator, LayoutDataElement& layoutDataElement );
+
+ void UpdateAnimatorsIndices();
+
+ bool mUpdateMeasuredSize;
+ LayoutAnimatorArray mLayoutAnimators;
+ LayoutDataArray mLayoutDataElements;
/**
* Ref counted object - Only allow construction via New().
struct LayoutData
{
- LayoutData( LayoutTransition& layoutTransition, LayoutPositionDataArray& layoutPositionDataArray, LayoutDataArray& layoutDataArray,
- LayoutAnimatorArray& layoutAnimatorArray, PropertyAnimatorArray& childrenPropertyAnimators )
+ LayoutData( LayoutTransition& layoutTransition, LayoutPositionDataArray& layoutPositionDataArray, LayoutAnimatorArray& layoutAnimatorArray,
+ LayoutDataArray& layoutDataArray, LayoutDataArray& childrenLayoutDataArray )
: speculativeLayout( false ),
+ updateMeasuredSize( false ),
layoutTransition( layoutTransition ),
layoutPositionDataArray( layoutPositionDataArray ),
- layoutDataArray( layoutDataArray),
layoutAnimatorArray( layoutAnimatorArray ),
- childrenPropertyAnimators( childrenPropertyAnimators )
+ layoutDataArray( layoutDataArray),
+ childrenLayoutDataArray( childrenLayoutDataArray )
{
};
bool speculativeLayout;
+ bool updateMeasuredSize;
LayoutTransition& layoutTransition;
LayoutPositionDataArray& layoutPositionDataArray;
- LayoutDataArray& layoutDataArray;
LayoutAnimatorArray& layoutAnimatorArray;
- PropertyAnimatorArray& childrenPropertyAnimators;
+ LayoutDataArray& layoutDataArray;
+ LayoutDataArray& childrenLayoutDataArray;
};
} //namespace Internal