// EXTERNAL INCLUDES
#include <dali/public-api/object/property-input.h>
#include <dali/public-api/object/type-registry.h>
-
-// INTERNAL INCLUDES
+#include <dali/devel-api/object/type-registry-helper.h>
+#include <dali/public-api/size-negotiation/relayout-container.h>
namespace Dali
{
return Toolkit::Alignment::New();
}
-TypeRegistration mType( typeid(Toolkit::Alignment), typeid(Toolkit::Control), Create );
+DALI_TYPE_REGISTRATION_BEGIN( Toolkit::Alignment, Toolkit::Control, Create )
+DALI_TYPE_REGISTRATION_END()
struct ScaleToFillConstraint
{
// Create the implementation, temporarily owned on stack
IntrusivePtr< Alignment > internalAlignment = new Alignment( horizontal, vertical );
- // Pass ownership to Toolkit::View
+ // Pass ownership to Toolkit::Alignment
Toolkit::Alignment alignment( *internalAlignment );
// Second-phase init of the implementation
return mPadding;
}
-void Alignment::OnRelayout( const Vector2& size, ActorSizeContainer& container )
+void Alignment::OnRelayout( const Vector2& size, RelayoutContainer& container )
{
// lay out the actors
Vector3 anchorPointAndParentOrigin = Vector3::ZERO;
anchorPointAndParentOrigin.y = 1.0f;
}
- unsigned int childCount = Self().GetChildCount();
- for( unsigned int i=0; i<childCount; ++i )
+ for( unsigned int i = 0, childCount = Self().GetChildCount(); i < childCount; ++i )
{
- Actor actor = Self().GetChildAt(i);
+ Actor child = Self().GetChildAt(i);
- actor.SetAnchorPoint( anchorPointAndParentOrigin );
- actor.SetParentOrigin( anchorPointAndParentOrigin );
+ child.SetAnchorPoint( anchorPointAndParentOrigin );
+ child.SetParentOrigin( anchorPointAndParentOrigin );
- Vector3 actorSize ( actor.GetSize() );
- Toolkit::Control control( Toolkit::Control::DownCast( actor ) );
- if ( actorSize == Vector3::ZERO && control )
+ Vector3 currentChildSize( child.GetTargetSize() );
+ if( currentChildSize == Vector3::ZERO )
{
- actorSize = control.GetNaturalSize();
+ currentChildSize = child.GetNaturalSize();
}
- Vector3 childSize;
+ bool renegotiate = true;
+ Vector3 newChildSize;
switch( mScaling )
{
case Toolkit::Alignment::ScaleNone:
{
// Nothing to do but needed just to not to jump to the default.
- childSize = actorSize;
+ newChildSize = currentChildSize;
+ renegotiate = false;
break;
}
case Toolkit::Alignment::ScaleToFill:
{
ScaleToFillConstraint constraint( mPadding );
- childSize = constraint.GetSize( actorSize, Vector3(size) ) ;
+ newChildSize = constraint.GetSize( currentChildSize, Vector3(size) ) ;
break;
}
case Toolkit::Alignment::ScaleToFitKeepAspect:
{
ScaleToFitKeepAspectConstraint constraint( mPadding );
- childSize = constraint.GetSize( actorSize, Vector3(size) ) ;
+ newChildSize = constraint.GetSize( currentChildSize, Vector3(size) ) ;
break;
}
case Toolkit::Alignment::ScaleToFillKeepAspect:
{
ScaleToFillKeepAspectConstraint constraint( mPadding );
- childSize = constraint.GetSize( actorSize, Vector3(size) );
+ newChildSize = constraint.GetSize( currentChildSize, Vector3(size) );
break;
}
case Toolkit::Alignment::ShrinkToFit:
{
ShrinkToFitConstraint constraint( mPadding );
- childSize = constraint.GetSize( actorSize, Vector3(size) );
+ newChildSize = constraint.GetSize( currentChildSize, Vector3(size) );
break;
}
case Toolkit::Alignment::ShrinkToFitKeepAspect:
{
ShrinkToFitKeepAspectConstraint constraint( mPadding );
- childSize = constraint.GetSize( actorSize, Vector3(size) );
+ newChildSize = constraint.GetSize( currentChildSize, Vector3(size) );
break;
}
default:
}
PositionConstraint positionConstraint(mPadding, mHorizontal, mVertical);
- actor.SetPosition( positionConstraint.GetPosition(childSize, actorSize) );
+ child.SetPosition( positionConstraint.GetPosition(newChildSize, currentChildSize) );
- if( !control )
+ if( renegotiate )
{
- actor.SetScale(childSize / actorSize);
+ container.Add( child, Vector2(newChildSize) );
}
-
- Relayout( actor, Vector2(childSize), container );
}
}
Alignment::Alignment( Toolkit::Alignment::Type horizontal, Toolkit::Alignment::Type vertical )
-: Control( CONTROL_BEHAVIOUR_NONE ),
+: Control( ControlBehaviour( ACTOR_BEHAVIOUR_NONE ) ),
mHorizontal( horizontal ),
mVertical( vertical ),
mScaling( Toolkit::Alignment::ScaleNone ),