Support Right-To-Left of padding/margin in control 35/156835/18
authoradun <xiaohui.fang@samsung.com>
Fri, 20 Oct 2017 14:25:09 +0000 (22:25 +0800)
committerTaeyoon Lee <taeyoon0.lee@samsung.com>
Tue, 21 Nov 2017 06:58:09 +0000 (06:58 +0000)
Change-Id: I5c0813c2b49645af61a78ca6b37afd90b7dabd17

automated-tests/src/dali-toolkit/utc-Dali-Control.cpp [changed mode: 0644->0755]
dali-toolkit/public-api/controls/control-impl.cpp [changed mode: 0644->0755]

old mode 100644 (file)
new mode 100755 (executable)
index 53b3fbd..9869f21
@@ -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<Extents>( Control::Property::PADDING ), Extents( 10, 10, 10, 10 ), TEST_LOCATION );
+  DALI_TEST_EQUALS( control.GetProperty<Extents>( 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<Vector3>( 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<Vector3>( 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<Vector3>( Dali::Actor::Property::POSITION ), Vector3( 15, 5, 0 ), TEST_LOCATION );
 
   END_TEST;
 }
old mode 100644 (file)
new mode 100755 (executable)
index d7df20a..cba5308
@@ -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<Dali::LayoutDirection::Type>( ownerActor.GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get<int>() );
+
+      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 );
     }