From: Bowon Ryu Date: Thu, 20 Feb 2025 01:36:30 +0000 (+0900) Subject: Apply custom font directories to async text loader X-Git-Tag: dali_2.4.7~1^2 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=df97d60ef0e2e57528a7271b0166b22da3b79e99;p=platform%2Fcore%2Fuifw%2Fdali-toolkit.git Apply custom font directories to async text loader https://review.tizen.org/gerrit/c/platform/core/uifw/dali-adaptor/+/319912 Change-Id: I5b82be4ec53a9ad4b08b371e518e76ee8670382c Signed-off-by: Bowon Ryu --- diff --git a/automated-tests/src/dali-toolkit/utc-Dali-TextLabel-Async.cpp b/automated-tests/src/dali-toolkit/utc-Dali-TextLabel-Async.cpp index 4165dfb707..9e1c5eb268 100644 --- a/automated-tests/src/dali-toolkit/utc-Dali-TextLabel-Async.cpp +++ b/automated-tests/src/dali-toolkit/utc-Dali-TextLabel-Async.cpp @@ -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); diff --git a/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp b/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp index 5beeca2202..61bd61323f 100644 --- a/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp +++ b/dali-toolkit/internal/text/async-text/async-text-loader-impl.cpp @@ -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); diff --git a/dali-toolkit/internal/text/async-text/async-text-loader-impl.h b/dali-toolkit/internal/text/async-text/async-text-loader-impl.h index 988b878e76..11015a8ccc 100644 --- a/dali-toolkit/internal/text/async-text/async-text-loader-impl.h +++ b/dali-toolkit/internal/text/async-text/async-text-loader-impl.h @@ -62,6 +62,11 @@ public: */ void ClearModule(); + /** + * @copydoc Dali::AsyncTextLoader::SetCustomFontDirectories() + */ + void SetCustomFontDirectories(const TextAbstraction::FontPathList& customFontDirectories); + /** * @copydoc Dali::AsyncTextLoader::SetModuleClearNeeded() */ diff --git a/dali-toolkit/internal/text/async-text/async-text-loader.cpp b/dali-toolkit/internal/text/async-text/async-text-loader.cpp index 1aaeebbdf0..460dc62fb6 100644 --- a/dali-toolkit/internal/text/async-text/async-text-loader.cpp +++ b/dali-toolkit/internal/text/async-text/async-text-loader.cpp @@ -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); diff --git a/dali-toolkit/internal/text/async-text/async-text-loader.h b/dali-toolkit/internal/text/async-text/async-text-loader.h index 324979f716..79d3a9aea8 100644 --- a/dali-toolkit/internal/text/async-text/async-text-loader.h +++ b/dali-toolkit/internal/text/async-text/async-text-loader.h @@ -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. * diff --git a/dali-toolkit/internal/text/async-text/async-text-manager-impl.cpp b/dali-toolkit/internal/text/async-text/async-text-manager-impl.cpp index 6117da52ed..1ad6e66a43 100644 --- a/dali-toolkit/internal/text/async-text/async-text-manager-impl.cpp +++ b/dali-toolkit/internal/text/async-text/async-text-manager-impl.cpp @@ -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()