X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-field-impl.cpp;h=737d507755445e70a544bf34e6c3e6428c0211aa;hb=14cbc07153dd2968bca80136e5b00bf47b32b98b;hp=0961fa1fd86d05e7594e2c3fb05853127009db8f;hpb=f2a6a134e4b939815b40f417f5aca61a6fccf92e;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp index 0961fa1..737d507 100644 --- a/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-field-impl.cpp @@ -35,6 +35,7 @@ #include #include #include +#include #include #include #include @@ -127,6 +128,7 @@ DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "pixelSize", DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "enableSelection", BOOLEAN, ENABLE_SELECTION ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "placeholder", MAP, PLACEHOLDER ) DALI_PROPERTY_REGISTRATION( Toolkit, TextField, "ellipsis", BOOLEAN, ELLIPSIS ) +DALI_DEVEL_PROPERTY_REGISTRATION( Toolkit, TextField, "enableShiftSelection", BOOLEAN, ENABLE_SHIFT_SELECTION ) DALI_SIGNAL_REGISTRATION( Toolkit, TextField, "textChanged", SIGNAL_TEXT_CHANGED ) DALI_SIGNAL_REGISTRATION( Toolkit, TextField, "maxLengthReached", SIGNAL_MAX_LENGTH_REACHED ) @@ -758,6 +760,17 @@ void TextField::SetProperty( BaseObject* object, Property::Index index, const Pr } break; } + case Toolkit::DevelTextField::Property::ENABLE_SHIFT_SELECTION: + { + if( impl.mController ) + { + const bool shiftSelection = value.Get(); + DALI_LOG_INFO( gLogFilter, Debug::General, "TextField %p ENABLE_SHIFT_SELECTION %d\n", impl.mController.Get(), shiftSelection ); + + impl.mController->SetShiftSelectionEnabled( shiftSelection ); + } + break; + } } // switch } // textfield } @@ -1157,6 +1170,14 @@ Property::Value TextField::GetProperty( BaseObject* object, Property::Index inde } break; } + case Toolkit::DevelTextField::Property::ENABLE_SHIFT_SELECTION: + { + if( impl.mController ) + { + value = impl.mController->IsShiftSelectionEnabled(); + } + break; + } } //switch } @@ -1303,13 +1324,20 @@ void TextField::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange:: Vector3 TextField::GetNaturalSize() { - return mController->GetNaturalSize(); + Extents padding; + padding = Self().GetProperty( 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( Toolkit::Control::Property::PADDING ); return mController->GetHeightForWidth( width ) + padding.top + padding.bottom; } @@ -1318,18 +1346,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( 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( self.GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get() ); + 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 +1440,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( Toolkit::Control::Property::PADDING ); + + // Support Right-To-Left of padding + Dali::LayoutDirection::Type layoutDirection = static_cast( Self().GetProperty( Dali::Actor::Property::LAYOUT_DIRECTION ).Get() ); + 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 +1535,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( Toolkit::Control::Property::PADDING ); + mController->TapEvent( gesture.numberOfTaps, gesture.localPoint.x - padding.start, gesture.localPoint.y - padding.top ); SetKeyInputFocus(); } @@ -1507,9 +1551,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( Toolkit::Control::Property::PADDING ); + mController->LongPressEvent( gesture.state, gesture.localPoint.x - padding.start, gesture.localPoint.y - padding.top ); SetKeyInputFocus(); }