Fix ellipsis cache issue 69/303469/3
authorBowon Ryu <bowon.ryu@samsung.com>
Thu, 28 Dec 2023 06:11:40 +0000 (15:11 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Mon, 8 Jan 2024 03:54:14 +0000 (12:54 +0900)
If an ellipsis cache is not found in the mEllipsisCache,
the ellipsisCacheIndex value will always be zero.

This zero value is then stored in the item.index,
which is used to access the mEllipsisCache.

As a result, even if an ellipsis cache exists,
only the cache at index 0 is always used,
so an ellipsis glyph with a different font size from the actual font size may be rendered.

Change-Id: Iee15f1e320fd3f8ba73e035477ed13d7e49ee0ef
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
dali/internal/text/text-abstraction/plugin/font-client-plugin-impl.cpp

index 99caffe..2d9ac73 100644 (file)
@@ -1004,7 +1004,6 @@ const GlyphInfo& FontClient::Plugin::GetEllipsisGlyph(PointSize26Dot6 requestedP
     EllipsisItem item;
 
     item.requestedPointSize = requestedPointSize;
-    item.index              = ellipsisCacheIndex;
 
     // Find a font for the ellipsis glyph.
     item.glyph.fontId = FindDefaultFont(ELLIPSIS_CHARACTER,
@@ -1020,7 +1019,12 @@ const GlyphInfo& FontClient::Plugin::GetEllipsisGlyph(PointSize26Dot6 requestedP
     DALI_LOG_INFO(gFontClientLogFilter, Debug::General, "  glyph id %d found in the cache.\n", item.glyph.index);
     DALI_LOG_INFO(gFontClientLogFilter, Debug::General, "      font %d.\n", item.glyph.fontId);
 
+    // EllipsisCacheIndex is stored in item.index.
     ellipsisCacheIndex = mCacheHandler->CacheEllipsis(std::move(item));
+    if(!mCacheHandler->mEllipsisCache.empty())
+    {
+      mCacheHandler->mEllipsisCache.back().index = ellipsisCacheIndex;
+    }
   }
   return mCacheHandler->mEllipsisCache[ellipsisCacheIndex].glyph;
 }