Merge "Update position & size of web view." into devel/master
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / rendering / view-model.cpp
index c79dbd4..0e8dc61 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 ) );
@@ -332,7 +335,8 @@ void ViewModel::ElideGlyphs()
             // Calculate the width of the ellipsis glyph and check if it fits.
             const float ellipsisGlyphWidth = ellipsisGlyph.width + ellipsisGlyph.xBearing;
 
-            if( ellipsisGlyphWidth < removedGlypsWidth )
+            // If it is the last glyph to remove, add the ellipsis glyph without checking its width.
+            if( ( ellipsisGlyphWidth < removedGlypsWidth ) || ( index == 0u ) )
             {
               GlyphInfo& glyphInfo = *( elidedGlyphsBuffer + index );
               Vector2& position = *( elidedPositionsBuffer + index );
@@ -344,7 +348,11 @@ void ViewModel::ElideGlyphs()
               // Change the 'x' and 'y' position of the ellipsis glyph.
               if( position.x > firstPenX )
               {
-                position.x = firstPenX + removedGlypsWidth - ellipsisGlyphWidth;
+                position.x = firstPenX;
+                if (ellipsisGlyphWidth < removedGlypsWidth)
+                {
+                  position.x += removedGlypsWidth - ellipsisGlyphWidth;
+                }
               }
 
               position.x += ellipsisGlyph.xBearing;