From d9a5a0e168ee7978fcea370cd3a3618e50f6b579 Mon Sep 17 00:00:00 2001 From: adun Date: Fri, 20 Oct 2017 22:25:09 +0800 Subject: [PATCH] Support Right-To-Left of padding/margin in control Change-Id: I5c0813c2b49645af61a78ca6b37afd90b7dabd17 --- .../src/dali-toolkit/utc-Dali-Control.cpp | 23 ++++++++++++++++++++-- dali-toolkit/public-api/controls/control-impl.cpp | 18 +++++++++++++---- 2 files changed, 35 insertions(+), 6 deletions(-) mode change 100644 => 100755 automated-tests/src/dali-toolkit/utc-Dali-Control.cpp mode change 100644 => 100755 dali-toolkit/public-api/controls/control-impl.cpp diff --git a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp old mode 100644 new mode 100755 index 53b3fbd..9869f21 --- a/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-Control.cpp @@ -922,14 +922,33 @@ int UtcDaliControlPaddingProperty(void) Control control = Control::New(); control.SetBackgroundColor( Color::BLUE ); - control.SetProperty( Control::Property::PADDING, Extents( 10, 10, 10, 10 ) ); + control.SetProperty( Control::Property::PADDING, Extents( 15, 10, 5, 10 ) ); Stage::GetCurrent().Add( control ); application.SendNotification(); application.Render(); - DALI_TEST_EQUALS( control.GetProperty( Control::Property::PADDING ), Extents( 10, 10, 10, 10 ), TEST_LOCATION ); + DALI_TEST_EQUALS( control.GetProperty( Control::Property::PADDING ), Extents( 15, 10, 5, 10 ), TEST_LOCATION ); + + Control child = Control::New(); + control.Add(child); + + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( child.GetProperty( Dali::Actor::Property::POSITION ), Vector3( 15, 5, 0 ), TEST_LOCATION ); + + control.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION, Dali::LayoutDirection::RIGHT_TO_LEFT); + application.SendNotification(); + application.Render(); + DALI_TEST_EQUALS( child.GetProperty( Dali::Actor::Property::POSITION ), Vector3( 10, 5, 0 ), TEST_LOCATION ); + + control.SetProperty( Dali::Actor::Property::LAYOUT_DIRECTION, Dali::LayoutDirection::LEFT_TO_RIGHT); + application.SendNotification(); + application.Render(); + + DALI_TEST_EQUALS( child.GetProperty( Dali::Actor::Property::POSITION ), Vector3( 15, 5, 0 ), TEST_LOCATION ); END_TEST; } diff --git a/dali-toolkit/public-api/controls/control-impl.cpp b/dali-toolkit/public-api/controls/control-impl.cpp old mode 100644 new mode 100755 index d7df20a..cba5308 --- a/dali-toolkit/public-api/controls/control-impl.cpp +++ b/dali-toolkit/public-api/controls/control-impl.cpp @@ -644,12 +644,22 @@ void Control::OnRelayout( const Vector2& size, RelayoutContainer& container ) if( ( mImpl->mPadding.start != 0 ) || ( mImpl->mPadding.end != 0 ) || ( mImpl->mPadding.top != 0 ) || ( mImpl->mPadding.bottom != 0 ) || ( mImpl->mMargin.start != 0 ) || ( mImpl->mMargin.end != 0 ) || ( mImpl->mMargin.top != 0 ) || ( mImpl->mMargin.bottom != 0 ) ) { - newChildSize.width = size.width - ( mImpl->mPadding.start + mImpl->mPadding.end ); - newChildSize.height = size.height - ( mImpl->mPadding.top + mImpl->mPadding.bottom ); + Extents padding = mImpl->mPadding; + + Dali::CustomActor ownerActor(GetOwner()); + Dali::LayoutDirection::Type layoutDirection = static_cast( ownerActor.GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get() ); + + if( Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection ) + { + std::swap( padding.start, padding.end ); + } + + newChildSize.width = size.width - ( padding.start + padding.end ); + newChildSize.height = size.height - ( padding.top + padding.bottom ); Vector3 childPosition = child.GetTargetSize(); - childPosition.x += ( mImpl->mMargin.start + mImpl->mPadding.start ); - childPosition.y += ( mImpl->mMargin.top + mImpl->mPadding.top ); + childPosition.x += ( mImpl->mMargin.start + padding.start ); + childPosition.y += ( mImpl->mMargin.top + padding.top ); child.SetPosition( childPosition ); } -- 2.7.4