[Tizen] Fixed an incorrect ellipsis 33/205633/2 accepted/tizen/5.0/unified/20190509.004735 submit/tizen_5.0/20190508.060744
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 05:59:44 +0000 (14:59 +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

dali-toolkit/internal/text/rendering/view-model.cpp

index 70b642f..2be6601 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 ) );
 
-            if( !firstPenSet )
+            if( !firstPenSet || glyphToRemove.advance == 0.f )
             {
               const Vector2& position = *( elidedPositionsBuffer + index );
 
@@ -332,6 +332,11 @@ void ViewModel::ElideGlyphs()
               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;