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=bf9fbaee650bec3b54fc26e4e312b4a73f6e7312;hp=5d0543c13b3e83e8ecad0d28c5835dad74722530;hb=13964d9df4ed6bb4784986c31fcb914d742df1dc;hpb=7c17cd67c31718258dc619565b07e8864f8eaea7 diff --git a/dali-toolkit/internal/text/text-controller.cpp b/dali-toolkit/internal/text/text-controller.cpp index 5d0543c..bf9fbae 100755 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Samsung Electronics Co., Ltd. + * Copyright (c) 2019 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -361,6 +361,9 @@ void Controller::SetMultiLineEnabled( bool enable ) mImpl->mTextUpdateInfo.mFullRelayoutNeeded = true; mImpl->mOperationsPending = static_cast( mImpl->mOperationsPending | layoutOperations ); + // Need to recalculate natural size + mImpl->mRecalculateNaturalSize = true; + mImpl->RequestRelayout(); } } @@ -2250,7 +2253,6 @@ Controller::UpdateTextType Controller::Relayout( const Size& size, Dali::LayoutD UpdateTextType updateTextType = NONE_UPDATED; - mImpl->mLayoutDirection = layoutDirection; if( ( size.width < Math::MACHINE_EPSILON_1000 ) || ( size.height < Math::MACHINE_EPSILON_1000 ) ) { if( 0u != mImpl->mModel->mVisualModel->mGlyphPositions.Count() ) @@ -2318,6 +2320,22 @@ Controller::UpdateTextType Controller::Relayout( const Size& size, Dali::LayoutD mImpl->mTextUpdateInfo.mCharacterIndex = 0u; } + if( mImpl->mModel->mMatchSystemLanguageDirection && mImpl->mLayoutDirection != layoutDirection ) + { + // Clear the update info. This info will be set the next time the text is updated. + mImpl->mTextUpdateInfo.mClearAll = true; + // Apply modifications to the model + // Shape the text again is needed because characters like '()[]{}' have to be mirrored and the glyphs generated again. + mImpl->mOperationsPending = static_cast( mImpl->mOperationsPending | + GET_GLYPH_METRICS | + SHAPE_TEXT | + UPDATE_DIRECTION | + LAYOUT | + BIDI_INFO | + REORDER ); + mImpl->mLayoutDirection = layoutDirection; + } + // Make sure the model is up-to-date before layouting. ProcessModifyEvents(); bool updated = mImpl->UpdateModel( mImpl->mOperationsPending ); @@ -2328,6 +2346,7 @@ Controller::UpdateTextType Controller::Relayout( const Size& size, Dali::LayoutD mImpl->mOperationsPending, layoutSize ) || updated; + if( updated ) { updateTextType = MODEL_UPDATED; @@ -2429,6 +2448,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->mEventData->mScrollAfterUpdatePosition = true; } mImpl->NotifyInputMethodContextMultiLineStatus(); if( mImpl->IsShowingPlaceholderText() ) @@ -2587,9 +2607,9 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) // This branch avoids calling the InsertText() method of the 'else' branch which can delete selected text. } - else if( Dali::DALI_KEY_SHIFT_LEFT == keyCode ) + else if( ( Dali::DALI_KEY_SHIFT_LEFT == keyCode ) || ( Dali::DALI_KEY_SHIFT_RIGHT == keyCode ) ) { - // DALI_KEY_SHIFT_LEFT is the key code for the Left Shift. It's sent (by the InputMethodContext?) when the predictive text is enabled + // DALI_KEY_SHIFT_LEFT or DALI_KEY_SHIFT_RIGHT is the key code for 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. @@ -2619,6 +2639,7 @@ bool Controller::KeyEvent( const Dali::KeyEvent& keyEvent ) ( mImpl->mEventData->mState != EventData::INACTIVE ) && ( !isNullKey ) && ( Dali::DALI_KEY_SHIFT_LEFT != keyCode ) && + ( Dali::DALI_KEY_SHIFT_RIGHT != keyCode ) && ( Dali::DALI_KEY_VOLUME_UP != keyCode ) && ( Dali::DALI_KEY_VOLUME_DOWN != keyCode ) ) { @@ -3600,12 +3621,15 @@ bool Controller::DoRelayout( const Size& size, } // Update the visual model. + bool isAutoScrollEnabled = mImpl->mIsAutoScrollEnabled; Size newLayoutSize; viewUpdated = mImpl->mLayoutEngine.LayoutText( layoutParameters, glyphPositions, mImpl->mModel->mVisualModel->mLines, newLayoutSize, - elideTextEnabled ); + elideTextEnabled, + isAutoScrollEnabled ); + mImpl->mIsAutoScrollEnabled = isAutoScrollEnabled; viewUpdated = viewUpdated || ( newLayoutSize != layoutSize );