X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;ds=sidebyside;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller.cpp;h=58dbbc6682d0907c0ab473219fab06a005f10ac0;hb=23b11d5e9e206a703616aeef9bea3f75647a54db;hp=6dfb99e6493a939c0382badf5447e3dee46d44d1;hpb=e3faf955838e44a054537497a8ecec9737356228;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 6dfb99e..58dbbc6 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -31,6 +31,7 @@ #include #include #include +#include namespace { @@ -100,11 +101,23 @@ FontDescriptionRun& UpdateSelectionFontStyleRun( EventData* eventData, // public : Constructor. -ControllerPtr Controller::New( ControlInterface& controlInterface ) +ControllerPtr Controller::New() +{ + return ControllerPtr( new Controller() ); +} + +ControllerPtr Controller::New( ControlInterface* controlInterface ) { return ControllerPtr( new Controller( controlInterface ) ); } +ControllerPtr Controller::New( ControlInterface* controlInterface, + EditableControlInterface* editableControlInterface ) +{ + return ControllerPtr( new Controller( controlInterface, + editableControlInterface ) ); +} + // public : Configure the text controller. void Controller::EnableTextInput( DecoratorPtr decorator ) @@ -460,8 +473,11 @@ void Controller::SetText( const std::string& text ) mImpl->mEventData->mEventQueue.clear(); } - // Do this last since it provides callbacks into application code - mImpl->mControlInterface.TextChanged(); + // Do this last since it provides callbacks into application code. + if( NULL != mImpl->mEditableControlInterface ) + { + mImpl->mEditableControlInterface->TextChanged(); + } } void Controller::GetText( std::string& text ) const @@ -1514,6 +1530,9 @@ Controller::UpdateTextType Controller::Relayout( const Size& size ) // Set the update info to relayout the whole text. mImpl->mTextUpdateInfo.mFullRelayoutNeeded = true; mImpl->mTextUpdateInfo.mCharacterIndex = 0u; + + // Store the size used to layout the text. + mImpl->mVisualModel->mControlSize = size; } // Whether there are modify events. @@ -1605,8 +1624,11 @@ void Controller::ProcessInputStyleChangedSignals() { const InputStyle::Mask mask = *it; - // Emit the input style changed signal. - mImpl->mControlInterface.InputStyleChanged( mask ); + if( NULL != mImpl->mEditableControlInterface ) + { + // Emit the input style changed signal. + mImpl->mEditableControlInterface->InputStyleChanged( mask ); + } } mImpl->mEventData->mInputStyleChangedQueue.Clear(); @@ -1625,6 +1647,7 @@ void Controller::KeyboardFocusGainEvent() { mImpl->ChangeState( EventData::EDITING ); mImpl->mEventData->mUpdateCursorPosition = true; //If editing started without tap event, cursor update must be triggered. + mImpl->mEventData->mUpdateInputStyle = true; } mImpl->NotifyImfMultiLineStatus(); if( mImpl->IsShowingPlaceholderText() ) @@ -1731,10 +1754,11 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) mImpl->RequestRelayout(); } - if( textChanged ) + if( textChanged && + ( NULL != mImpl->mEditableControlInterface ) ) { // Do this last since it provides callbacks into application code - mImpl->mControlInterface.TextChanged(); + mImpl->mEditableControlInterface->TextChanged(); } return true; @@ -1965,10 +1989,11 @@ ImfManager::ImfCallbackData Controller::OnImfEvent( ImfManager& imfManager, cons ImfManager::ImfCallbackData callbackData( ( retrieveText || retrieveCursor ), cursorPosition, text, false ); - if( requestRelayout ) + if( requestRelayout && + ( NULL != mImpl->mEditableControlInterface ) ) { // Do this last since it provides callbacks into application code - mImpl->mControlInterface.TextChanged(); + mImpl->mEditableControlInterface->TextChanged(); } return callbackData; @@ -2001,7 +2026,10 @@ void Controller::GetTargetSize( Vector2& targetSize ) void Controller::AddDecoration( Actor& actor, bool needsClipping ) { - mImpl->mControlInterface.AddDecoration( actor, needsClipping ); + if( NULL != mImpl->mEditableControlInterface ) + { + mImpl->mEditableControlInterface->AddDecoration( actor, needsClipping ); + } } void Controller::DecorationEvent( HandleType handleType, HandleState state, float x, float y ) @@ -2088,7 +2116,11 @@ void Controller::TextPopupButtonTouched( Dali::Toolkit::TextSelectionPopup::Butt mImpl->mEventData->mScrollAfterDelete = true; mImpl->RequestRelayout(); - mImpl->mControlInterface.TextChanged(); + + if( NULL != mImpl->mEditableControlInterface ) + { + mImpl->mEditableControlInterface->TextChanged(); + } break; } case Toolkit::TextSelectionPopup::COPY: @@ -2375,8 +2407,11 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ mImpl->ResetImfManager(); - // Do this last since it provides callbacks into application code - mImpl->mControlInterface.MaxLengthReached(); + if( NULL != mImpl->mEditableControlInterface ) + { + // Do this last since it provides callbacks into application code + mImpl->mEditableControlInterface->MaxLengthReached(); + } } } @@ -2386,8 +2421,11 @@ void Controller::PasteText( const std::string& stringToPaste ) mImpl->ChangeState( EventData::EDITING ); mImpl->RequestRelayout(); - // Do this last since it provides callbacks into application code - mImpl->mControlInterface.TextChanged(); + if( NULL != mImpl->mEditableControlInterface ) + { + // Do this last since it provides callbacks into application code + mImpl->mEditableControlInterface->TextChanged(); + } } bool Controller::RemoveText( int cursorOffset, @@ -2644,9 +2682,6 @@ bool Controller::DoRelayout( const Size& size, mImpl->mVisualModel->SetLayoutSize( layoutSize ); } } // view updated - - // Store the size used to layout the text. - mImpl->mVisualModel->mControlSize = size; } if( NO_OPERATION != ( ALIGN & operations ) ) @@ -2654,10 +2689,13 @@ bool Controller::DoRelayout( const Size& size, // The laid-out lines. Vector& lines = mImpl->mVisualModel->mLines; + // Need to align with the control's size as the text may contain lines + // starting either with left to right text or right to left. mImpl->mLayoutEngine.Align( size, startIndex, requestedNumberOfCharacters, - lines ); + lines, + mImpl->mAlignmentOffset ); viewUpdated = true; } @@ -3011,10 +3049,22 @@ void Controller::ResetScrollPosition() // private : Private contructors & copy operator. -Controller::Controller( ControlInterface& controlInterface ) +Controller::Controller() : mImpl( NULL ) { - mImpl = new Controller::Impl( controlInterface ); + mImpl = new Controller::Impl( NULL, NULL ); +} + +Controller::Controller( ControlInterface* controlInterface ) +{ + mImpl = new Controller::Impl( controlInterface, NULL ); +} + +Controller::Controller( ControlInterface* controlInterface, + EditableControlInterface* editableControlInterface ) +{ + mImpl = new Controller::Impl( controlInterface, + editableControlInterface ); } // The copy constructor and operator are left unimplemented.