X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Falignment%2Falignment-impl.cpp;h=97b6f64d69d1cf28d4f9566a8ffa252f0f069283;hp=e887cb454391ebdc1ae6c27ae9d4e87830b817c7;hb=61cec43aa084293be7e3002db0a24de1cd9a2677;hpb=2ddfbb9e23a7c3fc30e604236c41e0ef6d2ed6a2 diff --git a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp index e887cb4..97b6f64 100644 --- a/dali-toolkit/internal/controls/alignment/alignment-impl.cpp +++ b/dali-toolkit/internal/controls/alignment/alignment-impl.cpp @@ -301,60 +301,65 @@ struct PositionConstraint const Vector3& currentSize( currentSizeProperty.GetVector3() ); const Vector3& parentSize( parentSizeProperty.GetVector3() ); + return GetPosition( currentSize, parentSize ); + } + + inline Vector3 GetPosition( const Vector3& currentSize, const Vector3& parentSize ) + { Vector3 position( 0.f, 0.f, 0.f ); switch( mHorizontalAlignment ) { - case Dali::Toolkit::Alignment::HorizontalLeft: - { - position.x += mPadding.left; - break; - } - case Dali::Toolkit::Alignment::HorizontalCenter: - { - if( currentSize.width + mPadding.left + mPadding.right >= parentSize.width ) - { - position.x += 0.5f * ( mPadding.left - mPadding.right ); - } - break; - } - case Dali::Toolkit::Alignment::HorizontalRight: - { - position.x -= mPadding.right; - break; - } - default: + case Dali::Toolkit::Alignment::HorizontalLeft: + { + position.x += mPadding.left; + break; + } + case Dali::Toolkit::Alignment::HorizontalCenter: + { + if( currentSize.width + mPadding.left + mPadding.right >= parentSize.width ) { - DALI_ASSERT_ALWAYS( !"Wrong horizontal alignment value" ); - break; + position.x += 0.5f * ( mPadding.left - mPadding.right ); } + break; + } + case Dali::Toolkit::Alignment::HorizontalRight: + { + position.x -= mPadding.right; + break; + } + default: + { + DALI_ASSERT_ALWAYS( !"Wrong horizontal alignment value" ); + break; + } } switch( mVerticalAlignment ) { - case Dali::Toolkit::Alignment::VerticalTop: - { - position.y += mPadding.top; - break; - } - case Dali::Toolkit::Alignment::VerticalCenter: - { - if( currentSize.height + mPadding.top + mPadding.bottom >= parentSize.height ) - { - position.y += 0.5f * ( mPadding.top - mPadding.bottom ); - } - break; - } - case Dali::Toolkit::Alignment::VerticalBottom: - { - position.y -= mPadding.bottom; - break; - } - default: + case Dali::Toolkit::Alignment::VerticalTop: + { + position.y += mPadding.top; + break; + } + case Dali::Toolkit::Alignment::VerticalCenter: + { + if( currentSize.height + mPadding.top + mPadding.bottom >= parentSize.height ) { - DALI_ASSERT_ALWAYS( !"Wrong vertical alignment value" ); - break; + position.y += 0.5f * ( mPadding.top - mPadding.bottom ); } + break; + } + case Dali::Toolkit::Alignment::VerticalBottom: + { + position.y -= mPadding.bottom; + break; + } + default: + { + DALI_ASSERT_ALWAYS( !"Wrong vertical alignment value" ); + break; + } } return position; @@ -364,15 +369,6 @@ struct PositionConstraint const Toolkit::Alignment::Type mHorizontalAlignment; const Toolkit::Alignment::Type mVerticalAlignment; }; - -void SetPositionConstraint( Actor actor, const Toolkit::Alignment::Padding& padding, Toolkit::Alignment::Type horizontal, Toolkit::Alignment::Type vertical ) -{ - Constraint constraint = Constraint::New( Actor::POSITION, - LocalSource( Actor::SIZE ), - ParentSource( Actor::SIZE ), - PositionConstraint( padding, horizontal, vertical ) ); - actor.ApplyConstraint( constraint ); -} } // namespace Toolkit::Alignment Alignment::New( Toolkit::Alignment::Type horizontal, Toolkit::Alignment::Type vertical ) @@ -486,61 +482,51 @@ void Alignment::OnRelayout( const Vector2& size, ActorSizeContainer& container ) actor.SetAnchorPoint( anchorPointAndParentOrigin ); actor.SetParentOrigin( anchorPointAndParentOrigin ); - if( Toolkit::Alignment::ScaleNone != mScaling ) - { - actor.RemoveConstraints(); - } - - Vector3 actorSize ( actor.GetCurrentSize() ); + Vector3 actorSize ( actor.GetSize() ); Toolkit::Control control( Toolkit::Control::DownCast( actor ) ); if ( actorSize == Vector3::ZERO && control ) { actorSize = control.GetNaturalSize(); } - Vector2 childSize; + Vector3 childSize; switch( mScaling ) { case Toolkit::Alignment::ScaleNone: { // Nothing to do but needed just to not to jump to the default. - childSize = size; + childSize = actorSize; break; } case Toolkit::Alignment::ScaleToFill: { ScaleToFillConstraint constraint( mPadding ); - childSize = Vector2( constraint.GetSize( actorSize, Vector3(size) ) ); - SetPositionConstraint( actor, mPadding, mHorizontal, mVertical ); + childSize = constraint.GetSize( actorSize, Vector3(size) ) ; break; } case Toolkit::Alignment::ScaleToFitKeepAspect: { ScaleToFitKeepAspectConstraint constraint( mPadding ); - childSize = Vector2( constraint.GetSize( actorSize, Vector3(size) ) ); - SetPositionConstraint( actor, mPadding, mHorizontal, mVertical ); + childSize = constraint.GetSize( actorSize, Vector3(size) ) ; break; } case Toolkit::Alignment::ScaleToFillKeepAspect: { ScaleToFillKeepAspectConstraint constraint( mPadding ); - childSize = Vector2( constraint.GetSize( actorSize, Vector3(size) ) ); - SetPositionConstraint( actor, mPadding, mHorizontal, mVertical ); + childSize = constraint.GetSize( actorSize, Vector3(size) ); break; } case Toolkit::Alignment::ShrinkToFit: { ShrinkToFitConstraint constraint( mPadding ); - childSize = Vector2( constraint.GetSize( actorSize, Vector3(size) ) ); - SetPositionConstraint( actor, mPadding, mHorizontal, mVertical ); + childSize = constraint.GetSize( actorSize, Vector3(size) ); break; } case Toolkit::Alignment::ShrinkToFitKeepAspect: { ShrinkToFitKeepAspectConstraint constraint( mPadding ); - childSize = Vector2( constraint.GetSize( actorSize, Vector3(size) ) ); - SetPositionConstraint( actor, mPadding, mHorizontal, mVertical ); + childSize = constraint.GetSize( actorSize, Vector3(size) ); break; } default: @@ -550,7 +536,15 @@ void Alignment::OnRelayout( const Vector2& size, ActorSizeContainer& container ) } } - Relayout( actor, childSize, container ); + PositionConstraint positionConstraint(mPadding, mHorizontal, mVertical); + actor.SetPosition( positionConstraint.GetPosition(childSize, actorSize) ); + + if( !control ) + { + actor.SetScale(childSize / actorSize); + } + + Relayout( actor, Vector2(childSize), container ); } }