X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fvisual-model-impl.cpp;h=a5fead41b76908694b64cdf17b7b6dce848cc33a;hb=refs%2Fchanges%2F42%2F37942%2F5;hp=0c056adf65d3ead19dc8ce33eb703d2fb45ab893;hpb=77af5d8a3230bf16729573df1866be763938ca40;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/visual-model-impl.cpp b/dali-toolkit/internal/text/visual-model-impl.cpp index 0c056ad..a5fead4 100644 --- a/dali-toolkit/internal/text/visual-model-impl.cpp +++ b/dali-toolkit/internal/text/visual-model-impl.cpp @@ -343,6 +343,46 @@ void VisualModel::GetLinesOfGlyphRange( LineRun* lines, memcpy( lines, mLines.Begin() + firstLine, numberOfLines * sizeof( LineRun ) ); } +LineIndex VisualModel::GetLineOfGlyph( GlyphIndex glyphIndex ) +{ + const CharacterIndex characterIndex = *( mGlyphsToCharacters.Begin() + glyphIndex ); + + return GetLineOfCharacter( characterIndex ); +} + +LineIndex VisualModel::GetLineOfCharacter( CharacterIndex characterIndex ) +{ + // 1) Check first in the cached line. + + const LineRun& lineRun = *( mLines.Begin() + mCachedLineIndex ); + + if( ( lineRun.characterRun.characterIndex <= characterIndex ) && + ( characterIndex < lineRun.characterRun.characterIndex + lineRun.characterRun.numberOfCharacters ) ) + { + return mCachedLineIndex; + } + + // 2) Is not in the cached line. Check in the other lines. + + LineIndex index = characterIndex < lineRun.characterRun.characterIndex ? 0u : mCachedLineIndex + 1u; + + for( Vector::ConstIterator it = mLines.Begin() + index, + endIt = mLines.End(); + it != endIt; + ++it, ++index ) + { + const LineRun& lineRun = *it; + + if( characterIndex < lineRun.characterRun.characterIndex + lineRun.characterRun.numberOfCharacters ) + { + mCachedLineIndex = index; + break; + } + } + + return index; +} + void VisualModel::ReplaceLines( GlyphIndex glyphIndex, Length numberOfGlyphsToRemove, const LineRun* const lines, @@ -370,6 +410,16 @@ const Vector2& VisualModel::GetActualSize() const return mActualSize; } +void VisualModel::SetTextColor( const Vector4& textColor ) +{ + mTextColor = textColor; + + if ( !mUnderlineColorSet ) + { + mUnderlineColor = textColor; + } +} + void VisualModel::SetShadowOffset( const Vector2& shadowOffset ) { mShadowOffset = shadowOffset; @@ -380,6 +430,27 @@ void VisualModel::SetShadowColor( const Vector4& shadowColor ) mShadowColor = shadowColor; } +void VisualModel::SetUnderlineColor( const Vector4& color ) +{ + mUnderlineColor = color; + mUnderlineColorSet = true; +} + +void VisualModel::SetUnderlineEnabled( bool enabled ) +{ + mUnderlineEnabled = enabled; +} + +void VisualModel::SetUnderlineHeight( float height ) +{ + mUnderlineHeight = height; +} + +const Vector4& VisualModel::GetTextColor() const +{ + return mTextColor; +} + const Vector2& VisualModel::GetShadowOffset() const { return mShadowOffset; @@ -390,12 +461,48 @@ const Vector4& VisualModel::GetShadowColor() const return mShadowColor; } +const Vector4& VisualModel::GetUnderlineColor() const +{ + return mUnderlineColor; +} + +bool VisualModel::IsUnderlineEnabled() const +{ + return mUnderlineEnabled; +} + +float VisualModel::GetUnderlineHeight() const +{ + return mUnderlineHeight; +} + +void VisualModel::ClearCaches() +{ + mCachedLineIndex = 0u; +} VisualModel::~VisualModel() { } VisualModel::VisualModel() +: mGlyphs(), + mGlyphsToCharacters(), + mCharactersToGlyph(), + mCharactersPerGlyph(), + mGlyphsPerCharacter(), + mGlyphPositions(), + mLines(), + mTextColor(), + mShadowColor(), + mUnderlineColor(), + mShadowOffset(), + mUnderlineHeight( 0.0f ), + mUnderlineEnabled( false ), + mUnderlineColorSet( false ), + mNaturalSize(), + mActualSize(), + mCachedLineIndex( 0u ) { }