X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=dali-toolkit%2Finternal%2Fcontrols%2Ftext-controls%2Ftext-editor-impl.cpp;h=d0d08362ae582505bbdfc97b9cbe793d5736c867;hb=302d95105bb93ddbe505b2ecc29162ea5a504da7;hp=ddcb8d56fc8769b960dad97a637eeaf63cd22ead;hpb=5e89f618cfc0d6e8db7dbd47289e0a9ff3d73a7b;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 ddcb8d5..d0d0836 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,7 +1087,6 @@ 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 ) ) @@ -1091,39 +1109,19 @@ void TextEditor::RenderText( Text::Controller::UpdateTextType updateTextType ) mRenderableActor.SetPosition( scrollOffset.x, 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 +1233,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 +1244,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 +1303,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 +1351,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(); @@ -1436,7 +1406,7 @@ TextEditor::TextEditor() TextEditor::~TextEditor() { - mClipper.Reset(); + UnparentAndReset( mStencil ); if( ( NULL != mIdleCallback ) && Adaptor::IsAvailable() ) {