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=bcac0251e54dac6953c5a59898f6d49d37e90b44;hp=6b1e31fabf0b4a807a5be21d826299edf7ec2aca;hb=458df75be7c937da0b64e84da7ca63c2dda3e7d4;hpb=933609809da8a14c306789bc01b461a5116180ed diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 6b1e31f..bcac025 100644 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -89,7 +89,6 @@ void Controller::SetText( const std::string& text ) { // If popup shown then hide it by switching to Editing state if( ( EventData::SELECTING == mImpl->mEventData->mState ) || - ( EventData::SELECTION_CHANGED == mImpl->mEventData->mState ) || ( EventData::EDITING_WITH_POPUP == mImpl->mEventData->mState ) || ( EventData::EDITING_WITH_GRAB_HANDLE == mImpl->mEventData->mState ) ) { @@ -725,7 +724,9 @@ bool Controller::Relayout( const Size& size ) return glyphsRemoved; } - if( size != mImpl->mVisualModel->mControlSize ) + const bool newSize = ( size != mImpl->mVisualModel->mControlSize ); + + if( newSize ) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "new size (previous size %f,%f)\n", mImpl->mVisualModel->mControlSize.width, mImpl->mVisualModel->mControlSize.height ); @@ -751,9 +752,9 @@ bool Controller::Relayout( const Size& size ) // Do not re-do any operation until something changes. mImpl->mOperationsPending = NO_OPERATION; - // Keep the current offset and alignment as it will be used to update the decorator's positions. + // Keep the current offset and alignment as it will be used to update the decorator's positions (if the size changes). Vector2 offset; - if( mImpl->mEventData ) + if( newSize && mImpl->mEventData ) { offset = mImpl->mAlignmentOffset + mImpl->mEventData->mScrollPosition; } @@ -763,11 +764,14 @@ bool Controller::Relayout( const Size& size ) if( mImpl->mEventData ) { - // If there is a nex size, the scroll position needs to be clamped. - mImpl->ClampHorizontalScroll( layoutSize ); + if( newSize ) + { + // If there is a new size, the scroll position needs to be clamped. + mImpl->ClampHorizontalScroll( layoutSize ); - // Update the decorator's positions. - mImpl->mEventData->mDecorator->UpdatePositions( mImpl->mAlignmentOffset + mImpl->mEventData->mScrollPosition - offset ); + // Update the decorator's positions is needed if there is a new size. + mImpl->mEventData->mDecorator->UpdatePositions( mImpl->mAlignmentOffset + mImpl->mEventData->mScrollPosition - offset ); + } // Move the cursor, grab handle etc. updated = mImpl->ProcessInputEvents() || updated; @@ -922,11 +926,8 @@ void Controller::TextDeletedEvent() REORDER ); // Queue a cursor reposition event; this must wait until after DoRelayout() - if( 0u == mImpl->mLogicalModel->mText.Count() ) - { - mImpl->mEventData->mUpdateCursorPosition = true; - } - else + mImpl->mEventData->mUpdateCursorPosition = true; + if( 0u != mImpl->mLogicalModel->mText.Count() ) { mImpl->mEventData->mScrollAfterDelete = true; } @@ -1179,8 +1180,7 @@ void Controller::CalculateTextAlignment( const Size& size ) } case LayoutEngine::HORIZONTAL_ALIGN_CENTER: { - const int intOffset = static_cast( 0.5f * ( size.width - actualSize.width ) ); // try to avoid pixel alignment. - mImpl->mAlignmentOffset.x = static_cast( intOffset ); + mImpl->mAlignmentOffset.x = floorf( 0.5f * ( size.width - actualSize.width ) ); // try to avoid pixel alignment. break; } case LayoutEngine::HORIZONTAL_ALIGN_END: @@ -1200,8 +1200,7 @@ void Controller::CalculateTextAlignment( const Size& size ) } case LayoutEngine::VERTICAL_ALIGN_CENTER: { - const int intOffset = static_cast( 0.5f * ( size.height - actualSize.height ) ); // try to avoid pixel alignment. - mImpl->mAlignmentOffset.y = static_cast( intOffset ); + mImpl->mAlignmentOffset.y = floorf( 0.5f * ( size.height - actualSize.height ) ); // try to avoid pixel alignment. break; } case LayoutEngine::VERTICAL_ALIGN_BOTTOM: @@ -1485,8 +1484,7 @@ bool Controller::RemoveSelectedText() { bool textRemoved( false ); - if ( EventData::SELECTING == mImpl->mEventData->mState || - EventData::SELECTION_CHANGED == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState ) { std::string removedString; mImpl->RetrieveSelection( removedString, true ); @@ -1623,14 +1621,7 @@ void Controller::SelectEvent( float x, float y, bool selectAll ) { if( mImpl->mEventData ) { - if ( mImpl->mEventData->mState == EventData::SELECTING ) - { - mImpl->ChangeState( EventData::SELECTION_CHANGED ); - } - else - { - mImpl->ChangeState( EventData::SELECTING ); - } + mImpl->ChangeState( EventData::SELECTING ); if( selectAll ) { @@ -1718,6 +1709,9 @@ void Controller::PasteText( const std::string& stringToPaste ) InsertText( stringToPaste, Text::Controller::COMMIT ); mImpl->ChangeState( EventData::EDITING ); mImpl->RequestRelayout(); + + // Do this last since it provides callbacks into application code + mImpl->mControlInterface.TextChanged(); } void Controller::PasteClipboardItemEvent() @@ -1898,8 +1892,7 @@ bool Controller::BackspaceKeyEvent() bool removed( false ); - if ( EventData::SELECTING == mImpl->mEventData->mState || - EventData::SELECTION_CHANGED == mImpl->mEventData->mState ) + if( EventData::SELECTING == mImpl->mEventData->mState ) { removed = RemoveSelectedText(); }