X-Git-Url: http://review.tizen.org/git/?p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git;a=blobdiff_plain;f=dali-toolkit%2Finternal%2Ftext%2Ftext-geometry.cpp;h=bde55178bc34fdbb74841cdd9ef030337dc025f2;hp=9fa5ad11a5c193611021158b7bfc7b73134dfa5d;hb=150668a2aa35d52ebc3f6a27f55f5cd3a22fcf16;hpb=9f41a0812c57d92f166e0ecbb8bf3c8801834b89 diff --git a/dali-toolkit/internal/text/text-geometry.cpp b/dali-toolkit/internal/text/text-geometry.cpp index 9fa5ad1..bde5517 100644 --- a/dali-toolkit/internal/text/text-geometry.cpp +++ b/dali-toolkit/internal/text/text-geometry.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2021 Samsung Electronics Co., Ltd. + * Copyright (c) 2022 Samsung Electronics Co., Ltd. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -32,13 +32,14 @@ namespace Toolkit { namespace Text { -bool GetNextLine(GlyphIndex index, LineIndex& lineIndex, LineRun*& lineRun, GlyphIndex& lastGlyphOfLine, Length numberOfLines) +bool GetNextLine(GlyphIndex index, LineIndex& lineIndex, LineRun*& lineRun, GlyphIndex& lastGlyphOfLine, Length numberOfLines, bool& isLastLine) { if(index == lastGlyphOfLine) { ++lineIndex; if(lineIndex < numberOfLines) { + isLastLine = (lineIndex + 1 == numberOfLines); ++lineRun; return true; } @@ -47,11 +48,11 @@ bool GetNextLine(GlyphIndex index, LineIndex& lineIndex, LineRun*& lineRun, Glyp return false; } -void UpdateLineInfo(const LineRun* lineRun, float& currentLineOffset, float& currentLineHeight, GlyphIndex& lastGlyphOfLine) +void UpdateLineInfo(const LineRun* lineRun, float& currentLineOffset, float& currentLineHeight, GlyphIndex& lastGlyphOfLine, bool isLastLine) { lastGlyphOfLine = lineRun->glyphRun.glyphIndex + lineRun->glyphRun.numberOfGlyphs - 1u; currentLineOffset = currentLineOffset + currentLineHeight; - currentLineHeight = GetLineHeight(*lineRun); + currentLineHeight = GetLineHeight(*lineRun, isLastLine); } void GetTextGeometry(ModelPtr textModel, CharacterIndex startIndex, CharacterIndex endIndex, Vector& sizesList, Vector& positionsList) @@ -100,6 +101,7 @@ void GetTextGeometry(ModelPtr textModel, CharacterIndex startIndex, CharacterInd GlyphIndex glyphEnd = *(charactersToGlyphBuffer + endIndex) + ((numberOfGlyphs > 0) ? numberOfGlyphs - 1u : 0u); LineIndex lineIndex = visualModel->GetLineOfCharacter(startIndex); Length numberOfLines = visualModel->GetTotalNumberOfLines(); + bool isLastLine = lineIndex + 1 == numberOfLines; LineIndex firstLineIndex = lineIndex; Size textInLineSize; @@ -109,7 +111,7 @@ void GetTextGeometry(ModelPtr textModel, CharacterIndex startIndex, CharacterInd //get the first line and its vertical offset float currentLineOffset = CalculateLineOffset(visualModel->mLines, firstLineIndex); - float currentLineHeight = GetLineHeight(*lineRun); + float currentLineHeight = GetLineHeight(*lineRun, isLastLine); GlyphIndex lastGlyphOfLine = lineRun->glyphRun.glyphIndex + lineRun->glyphRun.numberOfGlyphs - 1; // Check if the first/last glyph is a ligature that needs be splitted like English fi or Arabic ï»». @@ -148,9 +150,9 @@ void GetTextGeometry(ModelPtr textModel, CharacterIndex startIndex, CharacterInd positionsList.PushBack(blockPos); } - if(GetNextLine(index, lineIndex, lineRun, lastGlyphOfLine, numberOfLines)) + if(GetNextLine(index, lineIndex, lineRun, lastGlyphOfLine, numberOfLines, isLastLine)) { - UpdateLineInfo(lineRun, currentLineOffset, currentLineHeight, lastGlyphOfLine); + UpdateLineInfo(lineRun, currentLineOffset, currentLineHeight, lastGlyphOfLine, isLastLine); } // Ignore any glyph that was removed continue; @@ -165,9 +167,9 @@ void GetTextGeometry(ModelPtr textModel, CharacterIndex startIndex, CharacterInd } else if((ellipsisPosition == DevelText::EllipsisPosition::START) && (index <= startIndexOfGlyphs)) { - if(GetNextLine(index, lineIndex, lineRun, lastGlyphOfLine, numberOfLines)) + if(GetNextLine(index, lineIndex, lineRun, lastGlyphOfLine, numberOfLines, isLastLine)) { - UpdateLineInfo(lineRun, currentLineOffset, currentLineHeight, lastGlyphOfLine); + UpdateLineInfo(lineRun, currentLineOffset, currentLineHeight, lastGlyphOfLine, isLastLine); } continue; @@ -214,9 +216,9 @@ void GetTextGeometry(ModelPtr textModel, CharacterIndex startIndex, CharacterInd currentSize.y = currentLineHeight; // if there is next line to retrieve. - if(GetNextLine(index, lineIndex, lineRun, lastGlyphOfLine, numberOfLines)) + if(GetNextLine(index, lineIndex, lineRun, lastGlyphOfLine, numberOfLines, isLastLine)) { - UpdateLineInfo(lineRun, currentLineOffset, currentLineHeight, lastGlyphOfLine); + UpdateLineInfo(lineRun, currentLineOffset, currentLineHeight, lastGlyphOfLine, isLastLine); } }