X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-controller.cpp;h=c6dd4990baca73b3fc8ea5684d7532e4ede36b65;hb=98dd69949d4309074b45640953127ed6757909da;hp=033433b690f806990f82084a2bbe87c3ec831c8c;hpb=7098ad0a9a657b68b37d5fd759662a2d08b47433;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 033433b..c6dd499 100755 --- a/dali-toolkit/internal/text/text-controller.cpp +++ b/dali-toolkit/internal/text/text-controller.cpp @@ -417,6 +417,22 @@ void Controller::SetIgnoreSpacesAfterText( bool ignore ) mImpl->mModel->mIgnoreSpacesAfterText = ignore; } +bool Controller::IsMatchSystemLanguageDirection() const +{ + return mImpl->mModel->mMatchSystemLanguageDirection; +} + +void Controller::SetMatchSystemLanguageDirection( bool match ) +{ + mImpl->mModel->mMatchSystemLanguageDirection = match; +} + +void Controller::SetLayoutDirection( Dali::LayoutDirection::Type layoutDirection ) +{ + mImpl->mLayoutDirection = layoutDirection; +} + + void Controller::SetLineWrapMode( Text::LineWrap::Mode lineWrapMode ) { if( lineWrapMode != mImpl->mModel->mLineWrapMode ) @@ -557,6 +573,13 @@ void Controller::SetText( const std::string& text ) utf8 = reinterpret_cast( text.c_str() ); } + const Length maxTextLength = 32768u; // 1024 * 32; + if( textSize > maxTextLength ) + { + DALI_LOG_WARNING( "The text size is too large(%d), limit the length to 32,768u\n", textSize ); + textSize = maxTextLength; + } + // Convert text into UTF-32 Vector& utf32Characters = mImpl->mModel->mLogicalModel->mText; utf32Characters.Resize( textSize ); @@ -2228,12 +2251,13 @@ void Controller::SetVerticalLineAlignment( Toolkit::DevelText::VerticalLineAlign // public : Relayout. -Controller::UpdateTextType Controller::Relayout( const Size& size ) +Controller::UpdateTextType Controller::Relayout( const Size& size, Dali::LayoutDirection::Type layoutDirection ) { DALI_LOG_INFO( gLogFilter, Debug::Verbose, "-->Controller::Relayout %p size %f,%f, autoScroll[%s]\n", this, size.width, size.height, mImpl->mIsAutoScrollEnabled ?"true":"false" ); UpdateTextType updateTextType = NONE_UPDATED; + if( ( size.width < Math::MACHINE_EPSILON_1000 ) || ( size.height < Math::MACHINE_EPSILON_1000 ) ) { if( 0u != mImpl->mModel->mVisualModel->mGlyphPositions.Count() ) @@ -2301,6 +2325,21 @@ Controller::UpdateTextType Controller::Relayout( const Size& size ) 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 + 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 ); @@ -2412,6 +2451,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() ) @@ -2570,9 +2610,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 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. @@ -2602,6 +2642,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 ) ) { @@ -3183,14 +3224,14 @@ void Controller::InsertText( const std::string& text, Controller::InsertType typ mImpl->mModel->mLogicalModel->RetrieveStyle( styleIndex, style ); // Whether to add a new text color run. - const bool addColorRun = ( style.textColor != mImpl->mEventData->mInputStyle.textColor ); + const bool addColorRun = ( style.textColor != mImpl->mEventData->mInputStyle.textColor ) && !mImpl->mEventData->mInputStyle.isDefaultColor; // Whether to add a new font run. - const bool addFontNameRun = style.familyName != mImpl->mEventData->mInputStyle.familyName; - const bool addFontWeightRun = style.weight != mImpl->mEventData->mInputStyle.weight; - const bool addFontWidthRun = style.width != mImpl->mEventData->mInputStyle.width; - const bool addFontSlantRun = style.slant != mImpl->mEventData->mInputStyle.slant; - const bool addFontSizeRun = style.size != mImpl->mEventData->mInputStyle.size; + const bool addFontNameRun = ( style.familyName != mImpl->mEventData->mInputStyle.familyName ) && mImpl->mEventData->mInputStyle.isFamilyDefined; + const bool addFontWeightRun = ( style.weight != mImpl->mEventData->mInputStyle.weight ) && mImpl->mEventData->mInputStyle.isWeightDefined; + const bool addFontWidthRun = ( style.width != mImpl->mEventData->mInputStyle.width ) && mImpl->mEventData->mInputStyle.isWidthDefined; + const bool addFontSlantRun = ( style.slant != mImpl->mEventData->mInputStyle.slant ) && mImpl->mEventData->mInputStyle.isSlantDefined; + const bool addFontSizeRun = ( style.size != mImpl->mEventData->mInputStyle.size ) && mImpl->mEventData->mInputStyle.isSizeDefined ; // Add style runs. if( addColorRun ) @@ -3543,7 +3584,8 @@ bool Controller::DoRelayout( const Size& size, mImpl->mModel->mHorizontalAlignment, mImpl->mModel->mLineWrapMode, outlineWidth, - mImpl->mModel->mIgnoreSpacesAfterText ); + mImpl->mModel->mIgnoreSpacesAfterText, + mImpl->mModel->mMatchSystemLanguageDirection ); // Resize the vector of positions to have the same size than the vector of glyphs. Vector& glyphPositions = mImpl->mModel->mVisualModel->mGlyphPositions; @@ -3661,7 +3703,9 @@ bool Controller::DoRelayout( const Size& size, requestedNumberOfCharacters, mImpl->mModel->mHorizontalAlignment, lines, - mImpl->mModel->mAlignmentOffset ); + mImpl->mModel->mAlignmentOffset, + mImpl->mLayoutDirection, + mImpl->mModel->mMatchSystemLanguageDirection ); viewUpdated = true; }