fixed align problems when whitespaces are included
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / text / layouts / layout-engine.cpp
index d73ee6a..e91ebae 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2017 Samsung Electronics Co., Ltd.
+ * Copyright (c) 2020 Samsung Electronics Co., Ltd.
  *
  * Licensed under the Apache License, Version 2.0 (the "License");
  * you may not use this file except in compliance with the License.
@@ -376,7 +376,7 @@ struct Engine::Impl
           }
           else
           {
-            lineLayout.length = length;
+            lineLayout.length = std::max( length, lineLayout.length );
           }
         }
       }
@@ -551,7 +551,7 @@ struct Engine::Impl
         tmpLineLayout.penX += tmpLineLayout.previousAdvance + tmpLineLayout.whiteSpaceLengthEndOfLine;
         tmpLineLayout.previousAdvance = ( glyphMetrics.advance + parameters.interGlyphExtraAdvance );
 
-        tmpLineLayout.length = tmpLineLayout.penX + glyphMetrics.xBearing + glyphMetrics.width;
+        tmpLineLayout.length = std::max( tmpLineLayout.length, tmpLineLayout.penX + glyphMetrics.xBearing + glyphMetrics.width );
 
         // Clear the white space length at the end of the line.
         tmpLineLayout.whiteSpaceLengthEndOfLine = 0.f;
@@ -721,7 +721,7 @@ struct Engine::Impl
         // Convert the character in the visual order into the glyph in the visual order.
         const GlyphIndex glyphIndex = *( charactersToGlyphsBuffer + characterVisualIndex ) + index;
 
-        DALI_ASSERT_DEBUG( 0u <= glyphIndex && glyphIndex < layoutParameters.textModel->mVisualModel->mGlyphs.Count() );
+        DALI_ASSERT_DEBUG( glyphIndex < layoutParameters.textModel->mVisualModel->mGlyphs.Count() );
 
         const GlyphInfo& glyph = *( glyphsBuffer + glyphIndex );
         Vector2& position = *( glyphPositionsBuffer + glyphIndex - layoutParameters.startGlyphIndex );
@@ -923,24 +923,9 @@ struct Engine::Impl
     lineRun.characterRun.numberOfCharacters = layout.numberOfCharacters;
     lineRun.lineSpacing = mDefaultLineSpacing;
 
-    if( isLastLine && !layoutParameters.isLastNewParagraph )
-    {
-      lineRun.width = layout.length;
-      if( LTR == layout.direction )
-      {
-        lineRun.width += layout.whiteSpaceLengthEndOfLine;
-        lineRun.extraLength = 0.f;
-      }
-      else
-      {
-        lineRun.extraLength = layout.whiteSpaceLengthEndOfLine;
-      }
-    }
-    else
-    {
-      lineRun.width = layout.length;
-      lineRun.extraLength = std::ceil( layout.whiteSpaceLengthEndOfLine );
-    }
+    lineRun.width = layout.length;
+    lineRun.extraLength = std::ceil( layout.whiteSpaceLengthEndOfLine );
+
 
     // Rounds upward to avoid a non integer size.
     lineRun.width = std::ceil( lineRun.width );