Apply custom font directories to async text loader 31/319931/2
authorBowon Ryu <bowon.ryu@samsung.com>
Thu, 20 Feb 2025 01:36:30 +0000 (10:36 +0900)
committerBowon Ryu <bowon.ryu@samsung.com>
Thu, 20 Feb 2025 03:02:30 +0000 (12:02 +0900)
https://review.tizen.org/gerrit/c/platform/core/uifw/dali-adaptor/+/319912

Change-Id: I5b82be4ec53a9ad4b08b371e518e76ee8670382c
Signed-off-by: Bowon Ryu <bowon.ryu@samsung.com>
automated-tests/src/dali-toolkit/utc-Dali-TextLabel-Async.cpp
dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp
dali-toolkit/internal/text/async-text/async-text-loader-impl.h
dali-toolkit/internal/text/async-text/async-text-loader.cpp
dali-toolkit/internal/text/async-text/async-text-loader.h
dali-toolkit/internal/text/async-text/async-text-manager-impl.cpp

index 4165dfb70721f11733e1a41388642f22a757c96a..9e1c5eb268904b66621aed01a9528d1caf6c3ffd 100644 (file)
@@ -49,6 +49,8 @@ void dali_textlabel_async_cleanup(void)
 
 namespace
 {
+const std::string DEFAULT_FONT_DIR("/resources/fonts");
+
 static int   ASYNC_TEXT_THREAD_TIMEOUT = 5;
 
 static bool  gAsyncTextRenderedCalled;
@@ -113,6 +115,16 @@ int UtcDaliToolkitTextLabelAsyncRender01(void)
   // Avoid a crash when core load gl resources.
   application.GetGlAbstraction().SetCheckFramebufferStatusResult(GL_FRAMEBUFFER_COMPLETE);
 
+  char*             pathNamePtr = get_current_dir_name();
+  const std::string pathName(pathNamePtr);
+  free(pathNamePtr);
+
+  TextAbstraction::FontDescription fontDescription;
+  std::string fontPath = pathName + DEFAULT_FONT_DIR + "/tizen/BreezeColorEmoji.ttf";
+
+  TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+  fontClient.AddCustomFontDirectory(fontPath);
+
   TextLabel label = TextLabel::New();
   DALI_TEST_CHECK(label);
 
index 5beeca220204b7986ed32f6f5edff9dc7edae03e..61bd61323f045f72f4541db11eedd4d6ef89c4c2 100644 (file)
@@ -88,6 +88,14 @@ void AsyncTextLoader::ClearModule()
   mModule.ClearCache();
 }
 
+void AsyncTextLoader::SetCustomFontDirectories(const TextAbstraction::FontPathList& customFontDirectories)
+{
+  for(auto &path: customFontDirectories)
+  {
+    mModule.GetFontClient().AddCustomFontDirectory(path);
+  }
+}
+
 void AsyncTextLoader::SetModuleClearNeeded(bool clear)
 {
   Dali::Mutex::ScopedLock lock(mMutex);
index 988b878e761ece7de2caac621f74480f3051811f..11015a8ccc441606e6352efacc139ea2f3813900 100644 (file)
@@ -62,6 +62,11 @@ public:
    */
   void ClearModule();
 
+  /**
+   * @copydoc Dali::AsyncTextLoader::SetCustomFontDirectories()
+   */
+  void SetCustomFontDirectories(const TextAbstraction::FontPathList& customFontDirectories);
+
   /**
    * @copydoc Dali::AsyncTextLoader::SetModuleClearNeeded()
    */
index 1aaeebbdf0f508e41984e01a0dd21a498e453a47..460dc62fb63a58333aaf137bf3ae1cb0706ef0f7 100644 (file)
@@ -45,6 +45,11 @@ void AsyncTextLoader::ClearModule()
   GetImplementation(*this).ClearModule();
 }
 
+void AsyncTextLoader::SetCustomFontDirectories(const TextAbstraction::FontPathList& customFontDirectories)
+{
+  GetImplementation(*this).SetCustomFontDirectories(customFontDirectories);
+}
+
 void AsyncTextLoader::SetModuleClearNeeded(bool clear)
 {
   GetImplementation(*this).SetModuleClearNeeded(clear);
index 324979f716c3df28253c9c6e4b29e667514364ea..79d3a9aea82b6c1cd8f47b0756ecc676074df2c1 100644 (file)
@@ -301,6 +301,13 @@ public:
    */
   void ClearModule();
 
+  /**
+   * @brief Sets custom fonts directories.
+   *
+   * @param[in] customFontDirectories List of the custom font paths.
+   */
+  void SetCustomFontDirectories(const TextAbstraction::FontPathList& customFontDirectories);
+
   /**
    * @brief Sets a flag indicating that module's cache clearing is needed.
    *
index 6117da52eda762431695d7c58fc0c055fefc6d97..1ad6e66a43bc2e48e8953bbf2268b3d529fea0eb 100644 (file)
@@ -64,9 +64,11 @@ AsyncTextManager::AsyncTextManager()
 
   mLocale = TextAbstraction::GetLocaleFull();
 
+  const TextAbstraction::FontPathList& customFonts = TextAbstraction::FontClient::Get().GetCustomFontDirectories();
   for(int i = 0; i < numberOfLoader; i++)
   {
     Text::AsyncTextLoader loader = Text::AsyncTextLoader::New();
+    loader.SetCustomFontDirectories(customFonts);
     mAvailableLoaders.push_back(loader);
   }
 
@@ -74,10 +76,6 @@ AsyncTextManager::AsyncTextManager()
   {
     Dali::Adaptor::Get().LocaleChangedSignal().Connect(this, &AsyncTextManager::OnLocaleChanged);
   }
-
-  // This function should be called after all AsyncTextModule(FontClient) are created.
-  TextAbstraction::FontClient::Get().ApplyCustomFontDirectories();
-  // TODO : In the near future, we may need to address potential thread-safety issues related to the FontConfig handle.
 }
 
 AsyncTextManager::~AsyncTextManager()