LocaleChangedSignal is a signal that works when the system locale is changed.
To solve the problem that the default font does not change when changing the system language, clear the cache of fontClient and emit LocaleChangedSignal.
Change-Id: Ic543b9fc250ccf88cd460fe08da6b5fd2c008987
GetImplementation(*this).ClearCache();
}
+void FontClient::ClearCacheOnLocaleChanged()
+{
+ GetImplementation(*this).ClearCacheOnLocaleChanged();
+}
+
void FontClient::SetDpi(unsigned int horizontalDpi, unsigned int verticalDpi)
{
GetImplementation(*this).SetDpi(horizontalDpi, verticalDpi);
void ClearCache();
/**
+ * @brief Clear caches in FontClient when Locale Changed
+ *
+ * @note This function only clears caches that needs to be cleared.
+ */
+ void ClearCacheOnLocaleChanged();
+
+ /**
* @brief Set the DPI of the target window.
*
* @note Multiple windows are not currently supported.
public:
typedef Signal<void(Adaptor&)> AdaptorSignalType; ///< Generic Type for adaptor signals
typedef Signal<void(Dali::Integration::SceneHolder&)> WindowCreatedSignalType; ///< SceneHolder created signal type
+ typedef Signal<void(std::string)> LocaleChangedSignalType; ///< Locale changed signal type
using SurfaceSize = Uint16Pair; ///< Surface size type
*/
WindowCreatedSignalType& WindowCreatedSignal();
+ /**
+ * @brief This signal is emitted when the system locale is changed
+ *
+ * @return The signal to connect to
+ */
+ LocaleChangedSignalType& LocaleChangedSignal();
+
private:
// Undefined
Adaptor(const Adaptor&);
public:
using AdaptorSignalType = Dali::Adaptor::AdaptorSignalType;
using WindowCreatedSignalType = Dali::Adaptor::WindowCreatedSignalType;
+ using LocaleChangedSignalType = Dali::Adaptor::LocaleChangedSignalType;
using SurfaceSize = Uint16Pair; ///< Surface size type
return mWindowCreatedSignal;
}
+ /**
+ * @copydoc Dali::Adaptor::LocaleChangedSignal
+ */
+ LocaleChangedSignalType& LocaleChangedSignal()
+ {
+ return mLocaleChangedSignal;
+ }
+
public: // From Dali::Internal::Adaptor::CoreEventInterface
/**
* @copydoc Dali::Internal::Adaptor::CoreEventInterface:::FlushUpdateMessages()
AdaptorSignalType mResizedSignal; ///< Resized signal.
AdaptorSignalType mLanguageChangedSignal; ///< Language changed signal.
WindowCreatedSignalType mWindowCreatedSignal; ///< Window created signal.
+ LocaleChangedSignalType mLocaleChangedSignal; ///< Locale changed signal.
Dali::Adaptor& mAdaptor; ///< Reference to public adaptor instance.
State mState; ///< Current state of the adaptor
return mImpl->WindowCreatedSignal();
}
+Adaptor::LocaleChangedSignalType& Adaptor::LocaleChangedSignal()
+{
+ return mImpl->LocaleChangedSignal();
+}
+
Dali::RenderSurfaceInterface& Adaptor::GetSurface()
{
return mImpl->GetSurface();
#include <aul.h>
#include <unistd.h>
+// INTERNAL INCLUDES
+#include <dali/devel-api/text-abstraction/font-client.h>
+
namespace Dali
{
namespace Internal
Adaptor* adaptor = static_cast<Adaptor*>(data);
if(adaptor != NULL)
{
+ TextAbstraction::FontClient fontClient = TextAbstraction::FontClient::Get();
+ fontClient.ClearCacheOnLocaleChanged();
+ fontClient.InitDefaultFontDescription();
+
adaptor->SetRootLayoutDirection(locale);
+ adaptor->LocaleChangedSignal().Emit(locale);
}
free(locale);
}
}
+void FontClient::ClearCacheOnLocaleChanged()
+{
+ if(mPlugin)
+ {
+ mPlugin->ClearCacheOnLocaleChanged();
+ }
+}
+
void FontClient::SetDpi(unsigned int horizontalDpi, unsigned int verticalDpi)
{
mDpiHorizontal = horizontalDpi;
void ClearCache();
/**
+ * @copydoc Dali::TextAbstraction::FontClient::ClearCacheOnLocaleChanged()
+ */
+ void ClearCacheOnLocaleChanged();
+
+ /**
* @copydoc Dali::TextAbstraction::FontClient::SetDpi()
*/
void SetDpi(unsigned int horizontalDpi, unsigned int verticalDpi);
mDefaultFontDescriptionCached = false;
}
+void FontClient::Plugin::CacheHandler::ClearCacheOnLocaleChanged()
+{
+ // delete cached glyph informations before clear mFontFaceCache.
+ mGlyphCacheManager->ClearCache();
+
+ mDefaultFontDescription = FontDescription();
+
+ mSystemFonts.clear();
+ mDefaultFonts.clear();
+
+ DestroyCharacterSets(mDefaultFontCharacterSets);
+ mDefaultFontCharacterSets.Clear();
+
+ ClearFallbackCache();
+ mFallbackCache.clear();
+
+ mFontIdCache.clear();
+
+ ClearCharacterSetFromFontFaceCache();
+ mFontFaceCache.clear();
+
+ mValidatedFontCache.clear();
+ mFontDescriptionCache.clear();
+
+ DestroyCharacterSets(mCharacterSetCache);
+ mCharacterSetCache.Clear();
+
+ mFontDescriptionSizeCache.clear();
+ mFontDescriptionSizeCache.rehash(0); // Note : unordered_map.clear() didn't deallocate memory
+
+ mEllipsisCache.clear();
+ mPixelBufferCache.clear();
+ mEmbeddedItemCache.clear();
+ mBitmapFontCache.clear();
+
+ mLatestFoundFontDescription.family.clear();
+ mLatestFoundCacheKey = FontDescriptionSizeCacheKey(0, 0);
+
+ mDefaultFontDescriptionCached = false;
+}
+
void FontClient::Plugin::CacheHandler::ResetSystemDefaults()
{
mDefaultFontDescriptionCached = false;
void ClearCache();
/**
+ * @copydoc Dali::TextAbstraction::FontClient::Plugin::ClearCacheOnLocaleChanged()
+ */
+ void ClearCacheOnLocaleChanged();
+
+ /**
* @copydoc Dali::TextAbstraction::FontClient::Plugin::ResetSystemDefaults()
*/
void ResetSystemDefaults();
mCacheHandler->ClearCache();
}
+void FontClient::Plugin::ClearCacheOnLocaleChanged() const
+{
+ mCacheHandler->ClearCacheOnLocaleChanged();
+}
+
void FontClient::Plugin::SetDpi(unsigned int horizontalDpi,
unsigned int verticalDpi)
{
void ClearCache() const;
/**
+ * @copydoc Dali::TextAbstraction::FontClient::ClearCacheOnLocaleChanged()
+ */
+ void ClearCacheOnLocaleChanged() const;
+
+ /**
* @copydoc Dali::TextAbstraction::FontClient::SetDpi()
*/
void SetDpi(unsigned int horizontalDpi, unsigned int verticalDpi);