Support Right-To-Left mode of padding in TextField and TextEditor
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / controls / text-controls / text-field-impl.cpp
index 0961fa1..1417743 100644 (file)
@@ -1303,13 +1303,20 @@ void TextField::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::
 
 Vector3 TextField::GetNaturalSize()
 {
-  return mController->GetNaturalSize();
+  Extents padding;
+  padding = Self().GetProperty<Extents>( Toolkit::Control::Property::PADDING );
+
+  Vector3 naturalSize = mController->GetNaturalSize();
+  naturalSize.width += ( padding.start + padding.end );
+  naturalSize.height += ( padding.top + padding.bottom );
+
+  return naturalSize;
 }
 
 float TextField::GetHeightForWidth( float width )
 {
-  Padding padding;
-  Self().GetPadding( padding );
+  Extents padding;
+  padding = Self().GetProperty<Extents>( Toolkit::Control::Property::PADDING );
   return mController->GetHeightForWidth( width ) + padding.top + padding.bottom;
 }
 
@@ -1318,18 +1325,26 @@ void TextField::OnRelayout( const Vector2& size, RelayoutContainer& container )
   DALI_LOG_INFO( gLogFilter, Debug::Verbose, "TextField OnRelayout\n");
 
   Actor self = Self();
-  Padding padding;
 
-  self.GetPadding( padding );
-  Vector2 contentSize( size.x - ( padding.left + padding.right ), size.y - ( padding.top + padding.bottom ) );
+  Extents padding;
+  padding = self.GetProperty<Extents>( Toolkit::Control::Property::PADDING );
+
+  Vector2 contentSize( size.x - ( padding.start + padding.end ), size.y - ( padding.top + padding.bottom ) );
+
+  // Support Right-To-Left of padding
+  Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>( self.GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get<int>() );
+  if( Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection )
+  {
+    std::swap( padding.start, padding.end );
+  }
 
   if( mStencil )
   {
-    mStencil.SetPosition( padding.left , padding.top  );
+    mStencil.SetPosition( padding.start, padding.top );
   }
   if( mActiveLayer )
   {
-    mActiveLayer.SetPosition( padding.left , padding.top  );
+    mActiveLayer.SetPosition( padding.start, padding.top );
   }
 
   const Text::Controller::UpdateTextType updateTextType = mController->Relayout( contentSize );
@@ -1404,13 +1419,21 @@ void TextField::RenderText( Text::Controller::UpdateTextType updateTextType )
 
     if( mStencil )
     {
-       mRenderableActor.SetPosition( scrollOffset.x + mAlignmentOffset, scrollOffset.y );
+      mRenderableActor.SetPosition( scrollOffset.x + mAlignmentOffset, scrollOffset.y );
     }
     else
     {
-       Padding padding;
-       Self().GetPadding( padding );
-       mRenderableActor.SetPosition( scrollOffset.x + mAlignmentOffset + padding.left, scrollOffset.y + padding.top );
+      Extents padding;
+      padding = Self().GetProperty<Extents>( Toolkit::Control::Property::PADDING );
+
+      // Support Right-To-Left of padding
+      Dali::LayoutDirection::Type layoutDirection = static_cast<Dali::LayoutDirection::Type>( Self().GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get<int>() );
+      if( Dali::LayoutDirection::RIGHT_TO_LEFT == layoutDirection )
+      {
+        std::swap( padding.start, padding.end );
+      }
+
+      mRenderableActor.SetPosition( scrollOffset.x + mAlignmentOffset + padding.start, scrollOffset.y + padding.top );
     }
 
 
@@ -1491,9 +1514,9 @@ void TextField::OnTap( const TapGesture& gesture )
   mImfManager.Activate();
 
   // Deliver the tap before the focus event to controller; this allows us to detect when focus is gained due to tap-gestures
-  Padding padding;
-  Self().GetPadding( padding );
-  mController->TapEvent( gesture.numberOfTaps, gesture.localPoint.x - padding.left, gesture.localPoint.y - padding.top );
+  Extents padding;
+  padding = Self().GetProperty<Extents>( Toolkit::Control::Property::PADDING );
+  mController->TapEvent( gesture.numberOfTaps, gesture.localPoint.x - padding.start, gesture.localPoint.y - padding.top );
 
   SetKeyInputFocus();
 }
@@ -1507,9 +1530,9 @@ void TextField::OnLongPress( const LongPressGesture& gesture )
 {
   mImfManager.Activate();
 
-  Padding padding;
-  Self().GetPadding( padding );
-  mController->LongPressEvent( gesture.state, gesture.localPoint.x - padding.left, gesture.localPoint.y - padding.top );
+  Extents padding;
+  padding = Self().GetProperty<Extents>( Toolkit::Control::Property::PADDING );
+  mController->LongPressEvent( gesture.state, gesture.localPoint.x - padding.start, gesture.localPoint.y - padding.top );
 
   SetKeyInputFocus();
 }