Fix: The last line of the text overlaps with the text-editor's border/edge 78/265378/3
authorShrouq Sabah <s.sabah@samsung.com>
Sun, 17 Oct 2021 14:09:35 +0000 (17:09 +0300)
committerShrouq Sabah <s.sabah@samsung.com>
Thu, 21 Oct 2021 08:13:24 +0000 (11:13 +0300)
This issue appears when ellipsis with start position is used with a large font.

textEditor.SetProperty(TextEditor::Property::POINT_SIZE, 25);
textEditor.SetProperty(Dali::Toolkit::DevelTextEditor::Property::ELLIPSIS, true);
textEditor.SetProperty(Dali::Toolkit::DevelTextEditor::Property::ELLIPSIS_POSITION, Dali::Toolkit::DevelText::EllipsisPosition::START);

Solution: Fixed early exit of loop that shift lines to up if ellipsis and multi lines and set ellipses of first line to true.

Change-Id: Ib08ee17309058bc006c0bd3867c00a10745407bc

automated-tests/src/dali-toolkit-internal/utc-Dali-Text-Ellipsis.cpp
dali-toolkit/internal/text/layouts/layout-engine.cpp

index 872e85e..bab8800 100755 (executable)
@@ -118,6 +118,21 @@ namespace
     const GlyphIndex     firstMiddleIndexOfGlyphs  = model->GetFirstMiddleIndexOfElidedGlyphs();
 
 
+    //Test total height of lines is fit inside Controller's size
+    Length heightOfLines = 0;
+    for(Length lineIndex=0u; lineIndex < numberOfLines; lineIndex++)
+    {
+        const LineRun& tempLine         = *( model->GetLines() + lineIndex);
+        heightOfLines+= (tempLine.ascender - tempLine.descender);
+    }
+
+    if(heightOfLines > data.size.height)
+    {
+        std::cout << "The heightOfLines should be less than height of controller.";
+        std::cout << " The heightOfLines is "<< heightOfLines << "and the height of controller is "<< data.size.height <<std::endl;
+        return false;
+    }
+
     if( numberOfLines != 0u )
     {
       Length   elidedLineIndex    = 0u;
@@ -296,6 +311,21 @@ namespace
     const GlyphIndex firstMiddleIndexOfGlyphs  = textModel->GetFirstMiddleIndexOfElidedGlyphs();
     const GlyphIndex secondMiddleIndexOfGlyphs = textModel->GetSecondMiddleIndexOfElidedGlyphs();
 
+    //Test total height of lines is fit inside Controller's size
+    Length heightOfLines = 0;
+    for(Length lineIndex=0u; lineIndex < numberOfLines; lineIndex++)
+    {
+        const LineRun& tempLine         = *( textModel->GetLines() + lineIndex);
+        heightOfLines+= (tempLine.ascender - tempLine.descender);
+    }
+
+    if(heightOfLines > data.size.height)
+    {
+        std::cout << "The heightOfLines should be less than height of controller.";
+        std::cout << " The heightOfLines is "<< heightOfLines << "and the height of controller is "<< data.size.height <<std::endl;
+        return false;
+    }
+
     if( numberOfLines != 0u )
     {
       Length   elidedLineIndex    = 0u;
index 695d950..7610b67 100644 (file)
@@ -1867,7 +1867,6 @@ struct Engine::Impl
             linesBuffer[lineIndex].ellipsis = false;
           }
           numberOfLines--;
-          lineIndex++;
         }
         linesBuffer[0u].ellipsis = true;
       }