Ellipsis sometimes appears incorrect when mixed with RTL + LTR 52/222452/6
authorJoogab Yun <joogab.yun@samsung.com>
Wed, 15 Jan 2020 06:11:27 +0000 (15:11 +0900)
committerJoogab Yun <joogab.yun@samsung.com>
Thu, 16 Jan 2020 08:19:44 +0000 (17:19 +0900)
sample)
    textRTL = TextLabel::New("فصل 3 قسط  6 - Line of Duty");
    textRTL.SetAnchorPoint( AnchorPoint::TOP_LEFT );
    textRTL.SetSize( 320, 200.f);
    textRTL.SetProperty( TextLabel::Property::POINT_SIZE, 20.f);
    textRTL.SetPosition(  50.f, 300.f);
    stage.Add( textRTL );

Change-Id: Ice8186431b6914286a99366a8c3347529dbb0c1c

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

index 8d7c717..74be44b 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 positions02[] = { 72.f, 63.f, 54.f, 50.f, 43.f, 38.f, 30.f, 10.0f };
+  float positions02[] = { 72.f, 63.f, 54.f, 50.f, 43.f, 38.f, 30.f, 13.0f };
 
   Size textSize03( 80.f, 100.f );
-  float positions03[] = { 74.f, 69.f, 66.f, 61.f, 53.f, 51.f, 47.f, 46.f, 41.f, 31.f, 28.f, 20.f, 7.f };
+  float positions03[] = { 74.f, 69.f, 66.f, 61.f, 53.f, 51.f, 47.f, 46.f, 41.f, 31.f, 28.f, 14.f, 7.f };
 
   Size textSize04( 80.f, 10.f );
   float positions04[] = { 2.f };
@@ -625,7 +625,7 @@ int UtcDaliTextViewModelElideText02(void)
       "<font family='TizenSansArabic'>عل النفط ديسمبر الإمداد بال, بين وترك شعار هو. لمّ من المبرمة النفط بالسيطرة, أم يتم تحرّك وبغطاء, عدم في لإعادة وإقامة رجوعهم.</font>",
       textSize03,
       5u,
-      74u,
+      73u,
       positions03
     },
     {
index c79dbd4..3046f45 100755 (executable)
@@ -307,7 +307,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 || glyphToRemove.advance == 0.f )
+            if( !firstPenSet || EqualsZero( glyphToRemove.advance ) )
             {
               const Vector2& position = *( elidedPositionsBuffer + index );
 
@@ -324,7 +324,10 @@ void ViewModel::ElideGlyphs()
 
               removedGlypsWidth = -ellipsisGlyph.xBearing;
 
-              firstPenSet = true;
+              if( !EqualsZero( firstPenX ) )
+              {
+                firstPenSet = true;
+              }
             }
 
             removedGlypsWidth += std::min( glyphToRemove.advance, ( glyphToRemove.xBearing + glyphToRemove.width ) );