X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-editor-impl.cpp;h=af428838283c723291d9f55df4ee03b31f4e47af;hb=23b11d5e9e206a703616aeef9bea3f75647a54db;hp=2f333d4d6830f4bb1abb728841ef94d0403e15f9;hpb=b37e6b5903fdb34007b3493cceab42f73db8f74b;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp index 2f333d4..af42883 100644 --- a/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp +++ b/dali-toolkit/internal/controls/text-controls/text-editor-impl.cpp @@ -31,7 +31,9 @@ // INTERNAL INCLUDES #include +#include #include +#include #include #include #include @@ -933,7 +935,7 @@ void TextEditor::OnInitialize() { Actor self = Self(); - mController = Text::Controller::New( *this ); + mController = Text::Controller::New( this, this ); mDecorator = Text::Decorator::New( *mController, *mController ); @@ -980,6 +982,24 @@ void TextEditor::OnInitialize() self.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::WIDTH ); self.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::HEIGHT ); self.OnStageSignal().Connect( this, &TextEditor::OnStageConnect ); + + // Creates an extra control to be used as stencil buffer. + mStencil = Control::New(); + mStencil.SetAnchorPoint( AnchorPoint::CENTER ); + mStencil.SetParentOrigin( ParentOrigin::CENTER ); + + // Creates a background visual. Even if the color is transparent it updates the stencil. + Property::Map backGroundMap; + backGroundMap[Toolkit::Visual::Property::TYPE] = Visual::COLOR; + backGroundMap[ColorVisual::Property::MIX_COLOR] = Color::TRANSPARENT; + + mStencil.SetProperty( Toolkit::Control::Property::BACKGROUND, backGroundMap ); + + // Enable the clipping property. + mStencil.SetProperty( Actor::Property::CLIPPING_MODE, ClippingMode::CLIP_CHILDREN ); + mStencil.SetResizePolicy( ResizePolicy::FILL_TO_PARENT, Dimension::ALL_DIMENSIONS ); + + self.Add( mStencil ); } void TextEditor::OnStyleChange( Toolkit::StyleManager styleManager, StyleChange::Type change ) @@ -1042,7 +1062,6 @@ void TextEditor::OnRelayout( const Vector2& size, RelayoutContainer& container ) mRenderer = Backend::Get().NewRenderer( mRenderingBackend ); } - EnableClipping( true, size ); RenderText( updateTextType ); } @@ -1068,14 +1087,15 @@ void TextEditor::OnRelayout( const Vector2& size, RelayoutContainer& container ) void TextEditor::RenderText( Text::Controller::UpdateTextType updateTextType ) { - Actor self = Self(); Actor renderableActor; if( Text::Controller::NONE_UPDATED != ( Text::Controller::MODEL_UPDATED & updateTextType ) ) { if( mRenderer ) { - renderableActor = mRenderer->Render( mController->GetView(), DepthIndex::TEXT ); + renderableActor = mRenderer->Render( mController->GetView(), + mAlignmentOffset, + DepthIndex::TEXT ); } if( renderableActor != mRenderableActor ) @@ -1089,41 +1109,21 @@ void TextEditor::RenderText( Text::Controller::UpdateTextType updateTextType ) { const Vector2& scrollOffset = mController->GetScrollPosition(); - mRenderableActor.SetPosition( scrollOffset.x, scrollOffset.y ); + mRenderableActor.SetPosition( scrollOffset.x + mAlignmentOffset, scrollOffset.y ); - Actor clipRootActor; - if( mClipper ) - { - clipRootActor = mClipper->GetRootActor(); - } + // Make sure the actors are parented correctly with/without clipping + Actor self = mStencil ? mStencil : Self(); for( std::vector::const_iterator it = mClippingDecorationActors.begin(), endIt = mClippingDecorationActors.end(); it != endIt; ++it ) { - Actor actor = *it; - - if( clipRootActor ) - { - clipRootActor.Add( actor ); - } - else - { - self.Add( actor ); - } + self.Add( *it ); } mClippingDecorationActors.clear(); - // Make sure the actor is parented correctly with/without clipping - if( clipRootActor ) - { - clipRootActor.Add( mRenderableActor ); - } - else - { - self.Add( mRenderableActor ); - } + self.Add( mRenderableActor ); } } @@ -1235,21 +1235,6 @@ bool TextEditor::OnKeyEvent( const KeyEvent& event ) return mController->KeyEvent( event ); } -void TextEditor::AddDecoration( Actor& actor, bool needsClipping ) -{ - if( actor ) - { - if( needsClipping ) - { - mClippingDecorationActors.push_back( actor ); - } - else - { - Self().Add( actor ); - } - } -} - void TextEditor::RequestTextRelayout() { RelayoutRequest(); @@ -1261,6 +1246,11 @@ void TextEditor::TextChanged() mTextChangedSignal.Emit( handle ); } +void TextEditor::MaxLengthReached() +{ + // Nothing to do as TextEditor doesn't emit a max length reached signal. +} + void TextEditor::InputStyleChanged( Text::InputStyle::Mask inputStyleMask ) { Dali::Toolkit::TextEditor handle( GetOwner() ); @@ -1315,9 +1305,19 @@ void TextEditor::InputStyleChanged( Text::InputStyle::Mask inputStyleMask ) mInputStyleChangedSignal.Emit( handle, editorInputStyleMask ); } -void TextEditor::MaxLengthReached() +void TextEditor::AddDecoration( Actor& actor, bool needsClipping ) { - // Nothing to do as TextEditor doesn't emit a max length reached signal. + if( actor ) + { + if( needsClipping ) + { + mClippingDecorationActors.push_back( actor ); + } + else + { + Self().Add( actor ); + } + } } void TextEditor::OnStageConnect( Dali::Actor actor ) @@ -1353,34 +1353,6 @@ void TextEditor::GetHandleImagePropertyValue( Property::Value& value, Text::Han } } -void TextEditor::EnableClipping( bool clipping, const Vector2& size ) -{ - if( clipping ) - { - // Not worth to created clip actor if width or height is equal to zero. - if( size.width > Math::MACHINE_EPSILON_1000 && size.height > Math::MACHINE_EPSILON_1000 ) - { - if( !mClipper ) - { - Actor self = Self(); - - mClipper = Clipper::New( size ); - self.Add( mClipper->GetRootActor() ); - self.Add( mClipper->GetImageView() ); - } - else if ( mClipper ) - { - mClipper->Refresh( size ); - } - } - } - else - { - // Note - this will automatically remove the root actor & the image view - mClipper.Reset(); - } -} - void TextEditor::OnClipboardTextSelected( ClipboardEventNotifier& clipboard ) { mController->PasteClipboardItemEvent(); @@ -1427,8 +1399,9 @@ void TextEditor::OnIdleSignal() } TextEditor::TextEditor() -: Control( ControlBehaviour( REQUIRES_STYLE_CHANGE_SIGNALS ) ), +: Control( ControlBehaviour( CONTROL_BEHAVIOUR_DEFAULT ) ), mIdleCallback( NULL ), + mAlignmentOffset( 0.f ), mRenderingBackend( DEFAULT_RENDERING_BACKEND ), mHasBeenStaged( false ) { @@ -1436,7 +1409,7 @@ TextEditor::TextEditor() TextEditor::~TextEditor() { - mClipper.Reset(); + UnparentAndReset( mStencil ); if( ( NULL != mIdleCallback ) && Adaptor::IsAvailable() ) {