Merge "GetLineCount() after GetTextDirection() returns wrong value." into devel/master
authorjoogab yun <joogab.yun@samsung.com>
Mon, 2 Dec 2019 01:20:09 +0000 (01:20 +0000)
committerGerrit Code Review <gerrit@review.ap-northeast-2.compute.internal>
Mon, 2 Dec 2019 01:20:09 +0000 (01:20 +0000)
1  2 
dali-toolkit/internal/text/text-controller.cpp

@@@ -80,6 -80,7 +80,6 @@@ int ConvertPixelToPint( float pixel 
    return ( pixel * 72.f ) / static_cast< float >( horizontalDpi );
  }
  
 -
  } // namespace
  
  namespace Dali
@@@ -2044,6 -2045,7 +2044,6 @@@ Vector3 Controller::GetNaturalSize(
                                                                             GET_SCRIPTS       |
                                                                             VALIDATE_FONTS    |
                                                                             GET_LINE_BREAKS   |
 -                                                                           GET_WORD_BREAKS   |
                                                                             BIDI_INFO         |
                                                                             SHAPE_TEXT        |
                                                                             GET_GLYPH_METRICS );
@@@ -2115,6 -2117,7 +2115,6 @@@ bool Controller::CheckForTextFit( floa
                                                                                GET_SCRIPTS |
                                                                             VALIDATE_FONTS |
                                                                            GET_LINE_BREAKS |
 -                                                                          GET_WORD_BREAKS |
                                                                                  BIDI_INFO |
                                                                                  SHAPE_TEXT|
                                                                           GET_GLYPH_METRICS );
@@@ -2210,6 -2213,7 +2210,6 @@@ float Controller::GetHeightForWidth( fl
                                                                             GET_SCRIPTS       |
                                                                             VALIDATE_FONTS    |
                                                                             GET_LINE_BREAKS   |
 -                                                                           GET_WORD_BREAKS   |
                                                                             BIDI_INFO         |
                                                                             SHAPE_TEXT        |
                                                                             GET_GLYPH_METRICS );
@@@ -2431,6 -2435,7 +2431,6 @@@ Toolkit::DevelText::TextDirection::Typ
                                                                             GET_SCRIPTS       |
                                                                             VALIDATE_FONTS    |
                                                                             GET_LINE_BREAKS   |
 -                                                                           GET_WORD_BREAKS   |
                                                                             BIDI_INFO         |
                                                                             SHAPE_TEXT        |
                                                                             GET_GLYPH_METRICS );
      // Clear the update info. This info will be set the next time the text is updated.
      mImpl->mTextUpdateInfo.Clear();
  
+     // FullRelayoutNeeded should be true because DoRelayout is MAX_FLOAT, MAX_FLOAT.
+     mImpl->mTextUpdateInfo.mFullRelayoutNeeded = true;
      mImpl->mUpdateTextDirection = false;
    }
  
@@@ -3707,17 -3715,6 +3710,17 @@@ bool Controller::RemoveText( int cursor
          }
        }
  
 +      // If the number of current text and the number of characters to be deleted are same,
 +      // it means all texts should be removed and all Preedit variables should be initialized.
 +      if( ( currentText.Count() - numberOfCharacters == 0 ) && ( cursorIndex == 0 ) )
 +      {
 +        if( mImpl->mEventData )
 +        {
 +          mImpl->mEventData->mPreEditStartPosition = 0;
 +          mImpl->mEventData->mPreEditLength = 0;
 +        }
 +      }
 +
        // Updates the text style runs by removing characters. Runs with no characters are removed.
        mImpl->mModel->mLogicalModel->UpdateTextStyleRuns( cursorIndex, -numberOfCharacters );
  
@@@ -3824,16 -3821,38 +3827,16 @@@ bool Controller::DoRelayout( const Size
        return true;
      }
  
 -    const Vector<LineBreakInfo>& lineBreakInfo = mImpl->mModel->mLogicalModel->mLineBreakInfo;
 -    const Vector<WordBreakInfo>& wordBreakInfo = mImpl->mModel->mLogicalModel->mWordBreakInfo;
 -    const Vector<CharacterDirection>& characterDirection = mImpl->mModel->mLogicalModel->mCharacterDirections;
 -    const Vector<GlyphInfo>& glyphs = mImpl->mModel->mVisualModel->mGlyphs;
 -    const Vector<CharacterIndex>& glyphsToCharactersMap = mImpl->mModel->mVisualModel->mGlyphsToCharacters;
 -    const Vector<Length>& charactersPerGlyph = mImpl->mModel->mVisualModel->mCharactersPerGlyph;
 -    const Character* const textBuffer = mImpl->mModel->mLogicalModel->mText.Begin();
 -    const float outlineWidth = static_cast<float>( mImpl->mModel->GetOutlineWidth() );
 -
      // Set the layout parameters.
      Layout::Parameters layoutParameters( size,
 -                                         textBuffer,
 -                                         lineBreakInfo.Begin(),
 -                                         wordBreakInfo.Begin(),
 -                                         ( 0u != characterDirection.Count() ) ? characterDirection.Begin() : NULL,
 -                                         glyphs.Begin(),
 -                                         glyphsToCharactersMap.Begin(),
 -                                         charactersPerGlyph.Begin(),
 -                                         charactersToGlyphBuffer,
 -                                         glyphsPerCharacterBuffer,
 -                                         totalNumberOfGlyphs,
 -                                         mImpl->mModel->mHorizontalAlignment,
 -                                         mImpl->mModel->mLineWrapMode,
 -                                         outlineWidth,
 -                                         mImpl->mModel->mIgnoreSpacesAfterText,
 -                                         mImpl->mModel->mMatchSystemLanguageDirection );
 +                                         mImpl->mModel);
  
      // Resize the vector of positions to have the same size than the vector of glyphs.
      Vector<Vector2>& glyphPositions = mImpl->mModel->mVisualModel->mGlyphPositions;
      glyphPositions.Resize( totalNumberOfGlyphs );
  
      // Whether the last character is a new paragraph character.
 +    const Character* const textBuffer = mImpl->mModel->mLogicalModel->mText.Begin();
      mImpl->mTextUpdateInfo.mIsLastCharacterNewParagraph =  TextAbstraction::IsNewParagraph( *( textBuffer + ( mImpl->mModel->mLogicalModel->mText.Count() - 1u ) ) );
      layoutParameters.isLastNewParagraph = mImpl->mTextUpdateInfo.mIsLastCharacterNewParagraph;
  
      bool isAutoScrollEnabled = mImpl->mIsAutoScrollEnabled;
      Size newLayoutSize;
      viewUpdated = mImpl->mLayoutEngine.LayoutText( layoutParameters,
 -                                                   glyphPositions,
 -                                                   mImpl->mModel->mVisualModel->mLines,
                                                     newLayoutSize,
                                                     elideTextEnabled,
                                                     isAutoScrollEnabled );
          mImpl->mIsTextDirectionRTL = false;
        }
  
 -      // Reorder the lines
 -      if( NO_OPERATION != ( REORDER & operations ) )
 +      if ( ( NO_OPERATION != ( UPDATE_DIRECTION & operations ) ) && !mImpl->mModel->mVisualModel->mLines.Empty() )
        {
 -        Vector<BidirectionalParagraphInfoRun>& bidirectionalInfo = mImpl->mModel->mLogicalModel->mBidirectionalParagraphInfo;
 -        Vector<BidirectionalLineInfoRun>& bidirectionalLineInfo = mImpl->mModel->mLogicalModel->mBidirectionalLineInfo;
 -
 -        // Check first if there are paragraphs with bidirectional info.
 -        if( 0u != bidirectionalInfo.Count() )
 -        {
 -          // Get the lines
 -          const Length numberOfLines = mImpl->mModel->mVisualModel->mLines.Count();
 -
 -          // Reorder the lines.
 -          bidirectionalLineInfo.Reserve( numberOfLines ); // Reserve because is not known yet how many lines have right to left characters.
 -          ReorderLines( bidirectionalInfo,
 -                        startIndex,
 -                        requestedNumberOfCharacters,
 -                        mImpl->mModel->mVisualModel->mLines,
 -                        bidirectionalLineInfo );
 -
 -          // Set the bidirectional info per line into the layout parameters.
 -          layoutParameters.lineBidirectionalInfoRunsBuffer = bidirectionalLineInfo.Begin();
 -          layoutParameters.numberOfBidirectionalInfoRuns = bidirectionalLineInfo.Count();
 -
 -          // Re-layout the text. Reorder those lines with right to left characters.
 -          mImpl->mLayoutEngine.ReLayoutRightToLeftLines( layoutParameters,
 -                                                         startIndex,
 -                                                         requestedNumberOfCharacters,
 -                                                         glyphPositions );
 -
 -          if ( ( NO_OPERATION != ( UPDATE_DIRECTION & operations ) ) && ( numberOfLines > 0 ) )
 -          {
 -            const LineRun* const firstline = mImpl->mModel->mVisualModel->mLines.Begin();
 -            if ( firstline )
 -            {
 -              mImpl->mIsTextDirectionRTL = firstline->direction;
 -            }
 -          }
 -        }
 -      } // REORDER
 +        mImpl->mIsTextDirectionRTL = mImpl->mModel->mVisualModel->mLines[0u].direction;
 +      }
  
        // Sets the layout size.
        if( NO_OPERATION != ( UPDATE_LAYOUT_SIZE & operations ) )
@@@ -4297,11 -4354,6 +4300,11 @@@ bool Controller::ShouldClearFocusOnEsca
    return mImpl->mShouldClearFocusOnEscape;
  }
  
 +Actor Controller::CreateBackgroundActor()
 +{
 +  return mImpl->CreateBackgroundActor();
 +}
 +
  // private : Private contructors & copy operator.
  
  Controller::Controller()