From: minho.sun Date: Tue, 20 Feb 2018 01:23:42 +0000 (+0000) Subject: Merge "[4.0] clear cache when locale is changed" into tizen_4.0 X-Git-Tag: accepted/tizen/4.0/unified/20180223.062019~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=efe43119391e981bbf85bfa68a04b01a05ec45bd;hp=63ce54c4763f0970371348661855a50320504ed7;p=platform%2Fcore%2Fuifw%2Fdali-adaptor.git Merge "[4.0] clear cache when locale is changed" into tizen_4.0 --- diff --git a/text/dali/devel-api/text-abstraction/font-client.cpp b/text/dali/devel-api/text-abstraction/font-client.cpp index e08cf8b..c303512 100644 --- a/text/dali/devel-api/text-abstraction/font-client.cpp +++ b/text/dali/devel-api/text-abstraction/font-client.cpp @@ -65,6 +65,11 @@ FontClient& FontClient::operator=( const FontClient& handle ) return *this; } +void FontClient::ClearCache() +{ + GetImplementation(*this).ClearCache(); +} + void FontClient::SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi ) { GetImplementation(*this).SetDpi( horizontalDpi, verticalDpi ); diff --git a/text/dali/devel-api/text-abstraction/font-client.h b/text/dali/devel-api/text-abstraction/font-client.h index 951d4ae..0a9e417 100644 --- a/text/dali/devel-api/text-abstraction/font-client.h +++ b/text/dali/devel-api/text-abstraction/font-client.h @@ -128,6 +128,12 @@ public: //////////////////////////////////////// /** + * @brief Clear all caches in FontClient + * + */ + void ClearCache(); + + /** * @brief Set the DPI of the target window. * * @note Multiple windows are not currently supported. diff --git a/text/dali/internal/text-abstraction/font-client-impl.cpp b/text/dali/internal/text-abstraction/font-client-impl.cpp index 497c8f4..fe4f661 100644 --- a/text/dali/internal/text-abstraction/font-client-impl.cpp +++ b/text/dali/internal/text-abstraction/font-client-impl.cpp @@ -73,6 +73,15 @@ Dali::TextAbstraction::FontClient FontClient::Get() return fontClientHandle; } +void FontClient::ClearCache() +{ + if( mPlugin ) + { + mPlugin->ClearCache(); + } +} + + void FontClient::SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi ) { mDpiHorizontal = horizontalDpi; diff --git a/text/dali/internal/text-abstraction/font-client-impl.h b/text/dali/internal/text-abstraction/font-client-impl.h index 13d847b..725f0e0 100644 --- a/text/dali/internal/text-abstraction/font-client-impl.h +++ b/text/dali/internal/text-abstraction/font-client-impl.h @@ -56,6 +56,11 @@ public: static Dali::TextAbstraction::FontClient Get(); /** + * @copydoc Dali::TextAbstraction::FontClient::ClearCache() + */ + void ClearCache(); + + /** * @copydoc Dali::TextAbstraction::FontClient::SetDpi() */ void SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi ); diff --git a/text/dali/internal/text-abstraction/font-client-plugin-impl.cpp b/text/dali/internal/text-abstraction/font-client-plugin-impl.cpp index 5edf88d..5020d28 100644 --- a/text/dali/internal/text-abstraction/font-client-plugin-impl.cpp +++ b/text/dali/internal/text-abstraction/font-client-plugin-impl.cpp @@ -20,6 +20,7 @@ // INTERNAL INCLUDES #include + #include #include #include @@ -91,6 +92,8 @@ const unsigned int NUM_FONT_SLANT_TYPE = sizeof( FONT_SLANT_TYPE_TO_INT ) / size } // namespace + + using Dali::Vector; namespace Dali @@ -230,6 +233,7 @@ FontClient::Plugin::Plugin( unsigned int horizontalDpi, #ifdef ENABLE_VECTOR_BASED_TEXT_RENDERING mVectorFontCache = new VectorFontCache( mFreeTypeLibrary ); #endif + } FontClient::Plugin::~Plugin() @@ -256,6 +260,35 @@ FontClient::Plugin::~Plugin() FT_Done_FreeType( mFreeTypeLibrary ); } +void FontClient::Plugin::ClearCache() +{ + mFontCache.clear(); + mValidatedFontCache.clear(); + mFontDescriptionCache.clear(); + mFontDescriptionCache.resize( 1u ); + + mCharacterSetCache.Clear(); + mCharacterSetCache.Resize( 1u ); + + mFontIdCache.clear(); + mFallbackCache.clear(); + +#ifdef ENABLE_VECTOR_BASED_TEXT_RENDERING + if(mVectorFontCache) + { + mVectorFontCache.clear(); + mVectorFontCache = NULL; + } +#endif + + mEllipsisCache.Clear(); + mSystemFonts.clear(); + mDefaultFonts.clear(); + mDefaultFontDescriptionCached = false; + mDefaultFontCharacterSets.Clear(); + mDefaultFontDescription = FontDescription(); +} + void FontClient::Plugin::SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi ) { diff --git a/text/dali/internal/text-abstraction/font-client-plugin-impl.h b/text/dali/internal/text-abstraction/font-client-plugin-impl.h index a1ceb9a..5cc45d3 100644 --- a/text/dali/internal/text-abstraction/font-client-plugin-impl.h +++ b/text/dali/internal/text-abstraction/font-client-plugin-impl.h @@ -157,6 +157,11 @@ struct FontClient::Plugin ~Plugin(); /** + * @copydoc Dali::TextAbstraction::FontClient::ClearCache() + */ + void ClearCache(); + + /** * @copydoc Dali::TextAbstraction::FontClient::SetDpi() */ void SetDpi( unsigned int horizontalDpi, unsigned int verticalDpi ); diff --git a/text/dali/internal/text-abstraction/shaping-impl.cpp b/text/dali/internal/text-abstraction/shaping-impl.cpp index 24c542c..4d389c5 100644 --- a/text/dali/internal/text-abstraction/shaping-impl.cpp +++ b/text/dali/internal/text-abstraction/shaping-impl.cpp @@ -200,7 +200,7 @@ struct Shaping::Plugin std::istringstream stringStream( currentLocale ); std::string localeString; - std::getline(stringStream, localeString, '_'); + std::getline(stringStream, localeString, '.'); hb_buffer_set_language( harfBuzzBuffer, hb_language_from_string( localeString.c_str(), localeString.size() ) ); /* Layout the text */ @@ -213,6 +213,7 @@ struct Shaping::Plugin hb_glyph_info_t* glyphInfo = hb_buffer_get_glyph_infos( harfBuzzBuffer, &glyphCount ); hb_glyph_position_t *glyphPositions = hb_buffer_get_glyph_positions( harfBuzzBuffer, &glyphCount ); const GlyphIndex lastGlyphIndex = glyphCount - 1u; + for( GlyphIndex i = 0u; i < glyphCount; ) { if( rtlDirection )