X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Fvisual-model-impl.cpp;h=bb7cdde42f9953f1d6cd08e8991a8fa9d52d93fa;hp=0c056adf65d3ead19dc8ce33eb703d2fb45ab893;hb=5b3cf0e6742934674bdf62bbe15af00e39eae566;hpb=77af5d8a3230bf16729573df1866be763938ca40 diff --git a/dali-toolkit/internal/text/visual-model-impl.cpp b/dali-toolkit/internal/text/visual-model-impl.cpp index 0c056ad..bb7cdde 100644 --- a/dali-toolkit/internal/text/visual-model-impl.cpp +++ b/dali-toolkit/internal/text/visual-model-impl.cpp @@ -20,7 +20,6 @@ // EXTERNAL INCLUDES #include -#include namespace Dali { @@ -36,47 +35,6 @@ VisualModelPtr VisualModel::New() return VisualModelPtr( new VisualModel() ); } -void VisualModel::SetGlyphs( const GlyphInfo* glyphs, - const CharacterIndex* characterIndices, - const Length* charactersPerGlyph, - Length numberOfGlyphs ) -{ - if( 0u == numberOfGlyphs ) - { - mGlyphs.Clear(); - mGlyphsToCharacters.Clear(); - mCharactersToGlyph.Clear(); - mCharactersPerGlyph.Clear(); - mGlyphsPerCharacter.Clear(); - } - else - { - if( NULL != glyphs ) - { - mGlyphs.Resize( numberOfGlyphs ); - memcpy( mGlyphs.Begin(), glyphs, numberOfGlyphs * sizeof( GlyphInfo ) ); - } - - if( NULL != characterIndices ) - { - mGlyphsToCharacters.Resize( numberOfGlyphs ); - memcpy( mGlyphsToCharacters.Begin(), characterIndices, numberOfGlyphs * sizeof( CharacterIndex ) ); - } - - if( NULL != charactersPerGlyph ) - { - mCharactersPerGlyph.Resize( numberOfGlyphs ); - memcpy( mCharactersPerGlyph.Begin(), charactersPerGlyph, numberOfGlyphs * sizeof( Length ) ); - - // Build the glyphs per character table. - CreateGlyphsPerCharacterTable(); - - // Build the characters to glyph conversion table. - CreateCharacterToGlyphTable(); - } - } -} - void VisualModel::CreateCharacterToGlyphTable( Length numberOfCharacters ) { // 1) Reserve some space for the characters to avoid reallocations. @@ -157,11 +115,6 @@ void VisualModel::CreateGlyphsPerCharacterTable( Length numberOfCharacters ) } } -Length VisualModel::GetNumberOfGlyphs() const -{ - return mGlyphs.Count(); -} - void VisualModel::GetGlyphs( GlyphInfo* glyphs, GlyphIndex glyphIndex, Length numberOfGlyphs ) const @@ -169,81 +122,6 @@ void VisualModel::GetGlyphs( GlyphInfo* glyphs, memcpy( glyphs, mGlyphs.Begin() + glyphIndex, numberOfGlyphs * sizeof( GlyphInfo ) ); } -const GlyphInfo& VisualModel::GetGlyphInfo( GlyphIndex glyphIndex ) const -{ - return mGlyphs[glyphIndex]; -} - -void VisualModel::ReplaceGlyphs( GlyphIndex glyphIndex, - Length numberOfGlyphsToRemove, - const GlyphInfo* const glyphs, - const Length* const numberOfCharacters, - Length numberOfGlyphsToInsert ) -{ -} - -CharacterIndex VisualModel::GetCharacterIndex( GlyphIndex glyphIndex ) const -{ - return mGlyphsToCharacters[glyphIndex]; -} - -Length VisualModel::GetCharactersPerGlyph( GlyphIndex glyphIndex ) const -{ - return mCharactersPerGlyph[glyphIndex]; -} - -GlyphIndex VisualModel::GetGlyphIndex( CharacterIndex characterIndex ) const -{ - return mCharactersToGlyph[characterIndex]; -} - -void VisualModel::GetCharacterToGlyphMap( GlyphIndex* characterToGlyphMap, - CharacterIndex characterIndex, - Length numberOfCharacters ) const -{ - memcpy( characterToGlyphMap, mCharactersToGlyph.Begin() + characterIndex, numberOfCharacters * sizeof( GlyphIndex ) ); -} - -void VisualModel::GetGlyphToCharacterMap( CharacterIndex* glyphToCharacter, - GlyphIndex glyphIndex, - Length numberOfGlyphs ) const -{ - memcpy( glyphToCharacter, mGlyphsToCharacters.Begin() + glyphIndex, numberOfGlyphs * sizeof( CharacterIndex ) ); -} - -void VisualModel::GetCharactersPerGlyphMap( Length* charactersPerGlyph, - GlyphIndex glyphIndex, - Length numberOfGlyphs ) const -{ - memcpy( charactersPerGlyph, mCharactersPerGlyph.Begin() + glyphIndex, numberOfGlyphs * sizeof( Length ) ); -} - -void VisualModel::GetGlyphsPerCharacterMap( Length* glyphsPerCharacter, - CharacterIndex characterIndex, - Length numberOfCharacters ) const -{ - memcpy( glyphsPerCharacter, mGlyphsPerCharacter.Begin() + characterIndex, numberOfCharacters * sizeof( Length ) ); -} - -void VisualModel::SetGlyphPositions( const Vector2* glyphPositions, - Length numberOfGlyphs ) -{ - if( 0u == numberOfGlyphs ) - { - mGlyphPositions.Clear(); - } - else - { - mGlyphPositions.Resize( numberOfGlyphs ); - memcpy( mGlyphPositions.Begin(), glyphPositions, numberOfGlyphs * sizeof( Vector2 ) ); - } -} - -Length VisualModel::GetNumberOfGlyphPositions() const -{ - return mGlyphPositions.Count(); -} - void VisualModel::GetGlyphPositions( Vector2* glyphPositions, GlyphIndex glyphIndex, Length numberOfGlyphs ) const @@ -251,44 +129,6 @@ void VisualModel::GetGlyphPositions( Vector2* glyphPositions, memcpy( glyphPositions, mGlyphPositions.Begin() + glyphIndex, numberOfGlyphs * sizeof( Vector2 ) ); } -const Vector2& VisualModel::GetGlyphPosition( GlyphIndex glyphIndex ) const -{ - return *( mGlyphPositions.Begin() + glyphIndex ); -} - -void VisualModel::ReplaceGlyphPositions( GlyphIndex glyphIndex, - Length numberOfGlyphsToRemove, - const Vector2* const positions, - Length numberOfGlyphsToInsert ) -{ -} - -void VisualModel::SetLines( const LineRun* const lines, - Length numberOfLines ) -{ - if( 0u == numberOfLines ) - { - mLines.Clear(); - } - else - { - mLines.Resize( numberOfLines ); - memcpy( mLines.Begin(), lines, numberOfLines * sizeof( LineRun ) ); - } -} - -Length VisualModel::GetNumberOfLines() const -{ - return mLines.Count(); -} - -void VisualModel::GetLines( LineRun* lines, - LineIndex lineIndex, - Length numberOfLines ) const -{ - memcpy( lines, mLines.Begin() + lineIndex, numberOfLines * sizeof( LineRun ) ); -} - void VisualModel::GetNumberOfLines( GlyphIndex glyphIndex, Length numberOfGlyphs, LineIndex& firstLine, @@ -343,11 +183,37 @@ void VisualModel::GetLinesOfGlyphRange( LineRun* lines, memcpy( lines, mLines.Begin() + firstLine, numberOfLines * sizeof( LineRun ) ); } -void VisualModel::ReplaceLines( GlyphIndex glyphIndex, - Length numberOfGlyphsToRemove, - const LineRun* const lines, - Length numberOfGlyphsToInsert ) +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::SetNaturalSize( const Vector2& size ) @@ -370,6 +236,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 +256,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 +287,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( Color::BLACK ), + mShadowColor( Color::BLACK ), + mUnderlineColor( Color::BLACK ), + mShadowOffset( Vector2::ZERO ), + mUnderlineHeight( 0.0f ), + mNaturalSize(), + mActualSize(), + mCachedLineIndex( 0u ), + mUnderlineEnabled( false ), + mUnderlineColorSet( false ) { }