X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller.cpp;h=033433b690f806990f82084a2bbe87c3ec831c8c;hp=b18767b2f29509452782274855211821910b7a86;hb=0686e6d654472bffc56910890f39031ceac32d3b;hpb=9f742473929c8fafbf689ac7b8b23f3064c4b008 diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index b18767b..033433b 100755 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -138,7 +138,7 @@ ControllerPtr Controller::New( ControlInterface* controlInterface, // public : Configure the text controller. -void Controller::EnableTextInput( DecoratorPtr decorator ) +void Controller::EnableTextInput( DecoratorPtr decorator, InputMethodContext& inputMethodContext ) { if( !decorator ) { @@ -151,7 +151,7 @@ void Controller::EnableTextInput( DecoratorPtr decorator ) if( NULL == mImpl->mEventData ) { - mImpl->mEventData = new EventData( decorator ); + mImpl->mEventData = new EventData( decorator, inputMethodContext ); } } @@ -168,7 +168,14 @@ void Controller::SetGlyphType( TextAbstraction::GlyphType glyphType ) void Controller::SetMarkupProcessorEnabled( bool enable ) { - mImpl->mMarkupProcessorEnabled = enable; + if( enable != mImpl->mMarkupProcessorEnabled ) + { + //If Text was already set, call the SetText again for enabling or disabling markup + mImpl->mMarkupProcessorEnabled = enable; + std::string text; + GetText( text ); + SetText( text ); + } } bool Controller::IsMarkupProcessorEnabled() const @@ -400,6 +407,16 @@ VerticalAlignment::Type Controller::GetVerticalAlignment() const return mImpl->mModel->mVerticalAlignment; } +bool Controller::IsIgnoreSpacesAfterText() const +{ + return mImpl->mModel->mIgnoreSpacesAfterText; +} + +void Controller::SetIgnoreSpacesAfterText( bool ignore ) +{ + mImpl->mModel->mIgnoreSpacesAfterText = ignore; +} + void Controller::SetLineWrapMode( Text::LineWrap::Mode lineWrapMode ) { if( lineWrapMode != mImpl->mModel->mLineWrapMode ) @@ -493,7 +510,7 @@ void Controller::SetText( const std::string& text ) DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Controller::SetText\n" ); // Reset keyboard as text changed - mImpl->ResetImfManager(); + mImpl->ResetInputMethodContext(); // Remove the previously set text and style. ResetText(); @@ -1983,6 +2000,7 @@ float Controller::GetHeightForWidth( float width ) // Clear the update info. This info will be set the next time the text is updated. mImpl->mTextUpdateInfo.Clear(); + mImpl->mTextUpdateInfo.mClearAll = true; // Restore the actual control's width. mImpl->mModel->mVisualModel->mControlSize.width = actualControlWidth; @@ -2164,7 +2182,8 @@ Toolkit::DevelText::TextDirection::Type Controller::GetTextDirection() if ( mImpl->mUpdateTextDirection ) { // Operations that can be done only once until the text changes. - const OperationsMask onlyOnceOperations = static_cast( GET_SCRIPTS | + const OperationsMask onlyOnceOperations = static_cast( CONVERT_TO_UTF32 | + GET_SCRIPTS | VALIDATE_FONTS | GET_LINE_BREAKS | GET_WORD_BREAKS | @@ -2185,6 +2204,9 @@ Toolkit::DevelText::TextDirection::Type Controller::GetTextDirection() LAYOUT | REORDER | UPDATE_DIRECTION ), naturalSize.GetVectorXY() ); + // Do not do again the only once operations. + mImpl->mOperationsPending = static_cast( mImpl->mOperationsPending & ~onlyOnceOperations ); + // Clear the update info. This info will be set the next time the text is updated. mImpl->mTextUpdateInfo.Clear(); @@ -2391,7 +2413,7 @@ void Controller::KeyboardFocusGainEvent() mImpl->mEventData->mUpdateCursorPosition = true; //If editing started without tap event, cursor update must be triggered. mImpl->mEventData->mUpdateInputStyle = true; } - mImpl->NotifyImfMultiLineStatus(); + mImpl->NotifyInputMethodContextMultiLineStatus(); if( mImpl->IsShowingPlaceholderText() ) { // Show alternative placeholder-text when editing @@ -2550,7 +2572,7 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) } else if( Dali::DALI_KEY_SHIFT_LEFT == keyCode ) { - // DALI_KEY_SHIFT_LEFT is the key code for the Left Shift. It's sent (by the imf?) when the predictive text is enabled + // DALI_KEY_SHIFT_LEFT is the key code for the Left Shift. It's sent (by the InputMethodContext?) when the predictive text is enabled // and a character is typed after the type of a upper case latin character. // Do nothing. @@ -2566,7 +2588,7 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "Controller::KeyEvent %p keyString %s\n", this, keyString.c_str() ); - // IMF manager is no longer handling key-events + // InputMethodContext is no longer handling key-events mImpl->ClearPreEditFlag(); InsertText( keyString, COMMIT ); @@ -2583,9 +2605,9 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) ( Dali::DALI_KEY_VOLUME_UP != keyCode ) && ( Dali::DALI_KEY_VOLUME_DOWN != keyCode ) ) { - // Should not change the state if the key is the shift send by the imf manager. + // Should not change the state if the key is the shift send by the InputMethodContext. // Otherwise, when the state is SELECTING the text controller can't send the right - // surrounding info to the imf. + // surrounding info to the InputMethodContext. mImpl->ChangeState( EventData::EDITING ); // Will request for relayout. @@ -2682,7 +2704,7 @@ void Controller::TapEvent( unsigned int tapCount, float x, float y ) } // Reset keyboard as tap event has occurred. - mImpl->ResetImfManager(); + mImpl->ResetInputMethodContext(); } void Controller::PanEvent( Gesture::State state, const Vector2& displacement ) @@ -2732,8 +2754,8 @@ void Controller::LongPressEvent( Gesture::State state, float x, float y ) } else if( !mImpl->IsClipboardVisible() ) { - // Reset the imf manager to commit the pre-edit before selecting the text. - mImpl->ResetImfManager(); + // Reset the InputMethodContext to commit the pre-edit before selecting the text. + mImpl->ResetInputMethodContext(); Event event( Event::LONG_PRESS_EVENT ); event.p1.mInt = state; @@ -2748,35 +2770,35 @@ void Controller::LongPressEvent( Gesture::State state, float x, float y ) } } -ImfManager::ImfCallbackData Controller::OnImfEvent( ImfManager& imfManager, const ImfManager::ImfEventData& imfEvent ) +InputMethodContext::CallbackData Controller::OnInputMethodContextEvent( InputMethodContext& inputMethodContext, const InputMethodContext::EventData& inputMethodContextEvent ) { // Whether the text needs to be relaid-out. bool requestRelayout = false; - // Whether to retrieve the text and cursor position to be sent to the IMF manager. + // Whether to retrieve the text and cursor position to be sent to the InputMethodContext. bool retrieveText = false; bool retrieveCursor = false; - switch( imfEvent.eventName ) + switch( inputMethodContextEvent.eventName ) { - case ImfManager::COMMIT: + case InputMethodContext::COMMIT: { - InsertText( imfEvent.predictiveString, Text::Controller::COMMIT ); + InsertText( inputMethodContextEvent.predictiveString, Text::Controller::COMMIT ); requestRelayout = true; retrieveCursor = true; break; } - case ImfManager::PREEDIT: + case InputMethodContext::PRE_EDIT: { - InsertText( imfEvent.predictiveString, Text::Controller::PRE_EDIT ); + InsertText( inputMethodContextEvent.predictiveString, Text::Controller::PRE_EDIT ); requestRelayout = true; retrieveCursor = true; break; } - case ImfManager::DELETESURROUNDING: + case InputMethodContext::DELETE_SURROUNDING: { - const bool textDeleted = RemoveText( imfEvent.cursorOffset, - imfEvent.numberOfChars, + const bool textDeleted = RemoveText( inputMethodContextEvent.cursorOffset, + inputMethodContextEvent.numberOfChars, DONT_UPDATE_INPUT_STYLE ); if( textDeleted ) @@ -2797,20 +2819,20 @@ ImfManager::ImfCallbackData Controller::OnImfEvent( ImfManager& imfManager, cons } break; } - case ImfManager::GETSURROUNDING: + case InputMethodContext::GET_SURROUNDING: { retrieveText = true; retrieveCursor = true; break; } - case ImfManager::PRIVATECOMMAND: + case InputMethodContext::PRIVATE_COMMAND: { // PRIVATECOMMAND event is just for getting the private command message retrieveText = true; retrieveCursor = true; break; } - case ImfManager::VOID: + case InputMethodContext::VOID: { // do nothing break; @@ -2858,7 +2880,7 @@ ImfManager::ImfCallbackData Controller::OnImfEvent( ImfManager& imfManager, cons } } - ImfManager::ImfCallbackData callbackData( ( retrieveText || retrieveCursor ), cursorPosition, text, false ); + InputMethodContext::CallbackData callbackData( ( retrieveText || retrieveCursor ), cursorPosition, text, false ); if( requestRelayout && ( NULL != mImpl->mEditableControlInterface ) ) @@ -2877,7 +2899,7 @@ void Controller::PasteClipboardItemEvent() std::string stringToPaste( notifier.GetContent() ); // Commit the current pre-edit text; the contents of the clipboard should be appended - mImpl->ResetImfManager(); + mImpl->ResetInputMethodContext(); // Temporary disable hiding clipboard mImpl->SetClipboardHideEnable( false ); @@ -3069,7 +3091,7 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ // TODO: At the moment the underline runs are only for pre-edit. mImpl->mModel->mVisualModel->mUnderlineRuns.Clear(); - // Remove the previous IMF pre-edit. + // Remove the previous InputMethodContext pre-edit. if( mImpl->mEventData->mPreEditFlag && ( 0u != mImpl->mEventData->mPreEditLength ) ) { removedPrevious = RemoveText( -static_cast( mImpl->mEventData->mPrimaryCursorPosition - mImpl->mEventData->mPreEditStartPosition ), @@ -3116,10 +3138,10 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ mImpl->ChangeState( EventData::EDITING ); - // Handle the IMF (predicitive text) state changes + // Handle the InputMethodContext (predicitive text) state changes if( COMMIT == type ) { - // IMF manager is no longer handling key-events + // InputMethodContext is no longer handling key-events mImpl->ClearPreEditFlag(); } else // PRE_EDIT @@ -3293,7 +3315,7 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "MaxLengthReached (%d)\n", mImpl->mModel->mLogicalModel->mText.Count() ); - mImpl->ResetImfManager(); + mImpl->ResetInputMethodContext(); if( NULL != mImpl->mEditableControlInterface ) { @@ -3507,8 +3529,7 @@ bool Controller::DoRelayout( const Size& size, const float outlineWidth = static_cast( mImpl->mModel->GetOutlineWidth() ); // Set the layout parameters. - const Vector2 sizeOffset = Vector2(outlineWidth * 2.0f, outlineWidth * 2.0f); // The outline should be fit into the bounding box - Layout::Parameters layoutParameters( size - sizeOffset, + Layout::Parameters layoutParameters( size, textBuffer, lineBreakInfo.Begin(), wordBreakInfo.Begin(), @@ -3521,7 +3542,8 @@ bool Controller::DoRelayout( const Size& size, totalNumberOfGlyphs, mImpl->mModel->mHorizontalAlignment, mImpl->mModel->mLineWrapMode, - outlineWidth ); + outlineWidth, + mImpl->mModel->mIgnoreSpacesAfterText ); // Resize the vector of positions to have the same size than the vector of glyphs. Vector& glyphPositions = mImpl->mModel->mVisualModel->mGlyphPositions; @@ -3827,7 +3849,7 @@ bool Controller::DeleteEvent( int keyCode ) return removed; } - // IMF manager is no longer handling key-events + // InputMethodContext is no longer handling key-events mImpl->ClearPreEditFlag(); if( EventData::SELECTING == mImpl->mEventData->mState )