Fixed an incorrect ellipsis 28/205328/5
authorJoogab Yun <joogab.yun@samsung.com>
Thu, 2 May 2019 07:35:30 +0000 (16:35 +0900)
committerJoogab Yun <joogab.yun@samsung.com>
Wed, 8 May 2019 04:41:05 +0000 (13:41 +0900)
ex)
1. An ellipsis may be displayed incorrectly when there are two or more new-line characters.
2. The ellipsis location is incorrectly displayed for RTL text.

    TextLabel textLabel1 = TextLabel::New(  "abcdef הגדרות מהירות ");
    textLabel1.SetSize( 150.f, 100.f );
    textLabel1.SetProperty( TextLabel::Property::POINT_SIZE, 20.f );
    textLabel1.SetProperty( TextLabel::Property::ELLIPSIS, true );
    textLabel1.SetPosition( 100.f, 50.f );
    textLabel1.SetParentOrigin( ParentOrigin::TOP_LEFT );
    textLabel1.SetAnchorPoint( AnchorPoint::TOP_LEFT );
    stage.Add( textLabel1 );

    TextLabel textLabel2 = TextLabel::New(  "הגדרות מהירות");
    textLabel2.SetSize( 150.f, 100.f );
    textLabel2.SetProperty( TextLabel::Property::POINT_SIZE, 20.f );
    textLabel2.SetProperty( TextLabel::Property::ELLIPSIS, true );
    textLabel2.SetPosition( 100.f, 125.f );
    textLabel2.SetParentOrigin( ParentOrigin::TOP_LEFT );
    textLabel2.SetAnchorPoint( AnchorPoint::TOP_LEFT );
    stage.Add( textLabel2 );

    TextLabel labe21 = TextLabel::New(  "yesterday all my troubles seemed so far away now it looks as though they`re here to stay oh i believe in yesterday" );
    labe21.SetSize( 450, 145 );
    labe21.SetParentOrigin(ParentOrigin::TOP_LEFT);
    labe21.SetAnchorPoint(AnchorPoint::TOP_LEFT);
    labe21.SetPosition( 100.f, 200.f);
    labe21.SetProperty(TextLabel::Property::POINT_SIZE, 17.6f);
    labe21.SetProperty(TextLabel::Property::ELLIPSIS, true);
    stage.Add( labe21 );

    TextLabel labe33 = TextLabel::New(  "yesterday all my troubles seemed so far away\nnow it looks\n as though they`re here to stay\n\n ohi believe in yesterday" );
    labe33.SetSize( 450, 145 );
    labe33.SetParentOrigin(ParentOrigin::TOP_LEFT);
    labe33.SetAnchorPoint(AnchorPoint::TOP_LEFT);
    labe33.SetPosition( 100.f, 250.f);
    labe33.SetProperty(TextLabel::Property::POINT_SIZE, 17.6f);
    labe33.SetProperty( TextLabel::Property::MULTI_LINE, true );
    labe33.SetProperty(TextLabel::Property::ELLIPSIS, true);
    stage.Add( labe33 );

    TextLabel labe34 = TextLabel::New(  "yesterday all my troubles seemed so\n\n\n\n far away now it looks" );
    labe34.SetSize( 450, 100 );
    labe34.SetParentOrigin(ParentOrigin::TOP_LEFT);
    labe34.SetAnchorPoint(AnchorPoint::TOP_LEFT);
    labe34.SetPosition( 100.f, 400.f);
    labe34.SetProperty(TextLabel::Property::POINT_SIZE, 17.6f);
    labe34.SetProperty( TextLabel::Property::MULTI_LINE, true );
    labe34.SetProperty(TextLabel::Property::ELLIPSIS, true);
    stage.Add( labe34 );

Change-Id: Ie856e38035b5ea6d179ec23ec04a1a9371486b73

automated-tests/src/dali-toolkit-internal/utc-Dali-Text-ViewModel.cpp
dali-toolkit/internal/text/rendering/view-model.cpp

index a7df603..ba72d93 100755 (executable)
@@ -586,10 +586,10 @@ int UtcDaliTextViewModelElideText02(void)
   float positions01[] = { 0.f, 8.f, 16.f, 26.f, 33.f, 41.f, 45.f, 54.f, 64.0f };
 
   Size textSize02( 80.f, 100.f );
   float positions01[] = { 0.f, 8.f, 16.f, 26.f, 33.f, 41.f, 45.f, 54.f, 64.0f };
 
   Size textSize02( 80.f, 100.f );
-  float positions02[] = { 75.f, 66.f, 57.f, 53.f, 46.f, 41.f, 33.f, 26.0f };
+  float positions02[] = { 75.f, 66.f, 57.f, 53.f, 46.f, 41.f, 33.f, 12.0f };
 
   Size textSize03( 80.f, 100.f );
 
   Size textSize03( 80.f, 100.f );
-  float positions03[] = { 79.f, 74.f, 71.f, 66.f, 58.f, 56.f, 52.f, 51.f, 46.f, 36.f, 33.f, 25.f, 22.f };
+  float positions03[] = { 79.f, 74.f, 71.f, 66.f, 58.f, 56.f, 52.f, 51.f, 46.f, 36.f, 33.f, 25.f, 8.f };
 
   Size textSize04( 80.f, 10.f );
   float positions04[] = { 2.f };
 
   Size textSize04( 80.f, 10.f );
   float positions04[] = { 2.f };
index 0a977f3..83a518b 100755 (executable)
@@ -297,7 +297,7 @@ void ViewModel::ElideGlyphs()
             // Need to reshape the glyph as the font may be different in size.
             const GlyphInfo& ellipsisGlyph = fontClient.GetEllipsisGlyph( fontClient.GetPointSize( glyphToRemove.fontId ) );
 
             // Need to reshape the glyph as the font may be different in size.
             const GlyphInfo& ellipsisGlyph = fontClient.GetEllipsisGlyph( fontClient.GetPointSize( glyphToRemove.fontId ) );
 
-            if( !firstPenSet )
+            if( !firstPenSet || glyphToRemove.advance == 0.f )
             {
               const Vector2& position = *( elidedPositionsBuffer + index );
 
             {
               const Vector2& position = *( elidedPositionsBuffer + index );
 
@@ -332,6 +332,11 @@ void ViewModel::ElideGlyphs()
               glyphInfo = ellipsisGlyph;
 
               // Change the 'x' and 'y' position of the ellipsis glyph.
               glyphInfo = ellipsisGlyph;
 
               // Change the 'x' and 'y' position of the ellipsis glyph.
+              if( position.x > firstPenX )
+              {
+                position.x = firstPenX + removedGlypsWidth - ellipsisGlyphWidth;
+              }
+
               position.x += ellipsisGlyph.xBearing;
               position.y = penY - ellipsisGlyph.yBearing;
 
               position.x += ellipsisGlyph.xBearing;
               position.y = penY - ellipsisGlyph.yBearing;