X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Flayouts%2Flayout-engine-helper-functions.cpp;h=db2fddf92c8b52cdc09ff4116f12e4515685884b;hb=702cdc29b907688eef62afbc63f0edb9e2dfb7d2;hp=85676cf872647d8fde1f23bd4be9cf672c9ce5f2;hpb=e2d9cf42df969e809a572a5224d1ce5d19aaa1ca;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git diff --git a/dali-toolkit/internal/text/layouts/layout-engine-helper-functions.cpp b/dali-toolkit/internal/text/layouts/layout-engine-helper-functions.cpp index 85676cf..db2fddf 100644 --- a/dali-toolkit/internal/text/layouts/layout-engine-helper-functions.cpp +++ b/dali-toolkit/internal/text/layouts/layout-engine-helper-functions.cpp @@ -20,6 +20,7 @@ // INTERNAL INCLUDE #include +#include namespace Dali { @@ -38,13 +39,16 @@ void CalculateGlyphPositionsLTR(const VisualModelPtr& visualModel, Vector2* glyphPositionsBuffer, float& penX) { - const GlyphInfo* const glyphsBuffer = visualModel->mGlyphs.Begin(); - const float characterSpacing = visualModel->GetCharacterSpacing(); - const Character* const textBuffer = logicalModel->mText.Begin(); + const GlyphInfo* const glyphsBuffer = visualModel->mGlyphs.Begin(); + const float modelCharacterSpacing = visualModel->GetCharacterSpacing(); + const Character* const textBuffer = logicalModel->mText.Begin(); Vector& glyphToCharacterMap = visualModel->mGlyphsToCharacters; const CharacterIndex* glyphToCharacterMapBuffer = glyphToCharacterMap.Begin(); + // Get the character-spacing runs. + const Vector& characterSpacingGlyphRuns = visualModel->GetCharacterSpacingGlyphRuns(); + float calculatedAdvance = 0.f; for(GlyphIndex i = 0u; i < numberOfGlyphs; ++i) @@ -55,7 +59,8 @@ void CalculateGlyphPositionsLTR(const VisualModelPtr& visualModel, position.x = penX + glyph.xBearing; position.y = -glyph.yBearing; - calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + (startIndexForGlyph + i)))), characterSpacing, glyph.advance); + const float characterSpacing = GetGlyphCharacterSpacing((startIndexForGlyph + i), characterSpacingGlyphRuns, modelCharacterSpacing); + calculatedAdvance = GetCalculatedAdvance(*(textBuffer + (*(glyphToCharacterMapBuffer + (startIndexForGlyph + i)))), characterSpacing, glyph.advance); penX += (calculatedAdvance + interGlyphExtraAdvance); } } @@ -73,7 +78,10 @@ void CalculateGlyphPositionsRTL(const VisualModelPtr& visualModel, const BidirectionalLineInfoRun& bidiLine = logicalModel->mBidirectionalLineInfo[bidiLineIndex]; const GlyphInfo* const glyphsBuffer = visualModel->mGlyphs.Begin(); const GlyphIndex* const charactersToGlyphsBuffer = visualModel->mCharactersToGlyph.Begin(); - const float characterSpacing = visualModel->GetCharacterSpacing(); + const float modelCharacterSpacing = visualModel->GetCharacterSpacing(); + + // Get the character-spacing runs. + const Vector& characterSpacingGlyphRuns = visualModel->GetCharacterSpacingGlyphRuns(); float calculatedAdvance = 0.f; @@ -86,7 +94,8 @@ void CalculateGlyphPositionsRTL(const VisualModelPtr& visualModel, position.x = penX; position.y = -glyph.yBearing; - calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyph.advance); + const float characterSpacing = GetGlyphCharacterSpacing(glyphIndex, characterSpacingGlyphRuns, modelCharacterSpacing); + calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyph.advance); penX += calculatedAdvance; ++characterLogicalIndex; @@ -106,9 +115,12 @@ void TraversesCharactersForGlyphPositionsRTL(const VisualModelPtr& visualModel, { const GlyphInfo* const glyphsBuffer = visualModel->mGlyphs.Begin(); const GlyphIndex* const charactersToGlyphsBuffer = visualModel->mCharactersToGlyph.Begin(); - const float characterSpacing = visualModel->GetCharacterSpacing(); + const float modelCharacterSpacing = visualModel->GetCharacterSpacing(); const Length* const glyphsPerCharacterBuffer = visualModel->mGlyphsPerCharacter.Begin(); + // Get the character-spacing runs. + const Vector& characterSpacingGlyphRuns = visualModel->GetCharacterSpacingGlyphRuns(); + float calculatedAdvance = 0.f; for(; characterLogicalIndex < bidiLineCharacterRun.numberOfCharacters; @@ -133,7 +145,8 @@ void TraversesCharactersForGlyphPositionsRTL(const VisualModelPtr& visualModel, position.x = penX + glyph.xBearing; position.y = -glyph.yBearing; - calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyph.advance); + const float characterSpacing = GetGlyphCharacterSpacing(glyphIndex, characterSpacingGlyphRuns, modelCharacterSpacing); + calculatedAdvance = GetCalculatedAdvance(*(textBuffer + characterVisualIndex), characterSpacing, glyph.advance); penX += (calculatedAdvance + interGlyphExtraAdvance); } }