// EXTERNAL INCLUDES
#include <dali/public-api/object/type-registry.h>
+#include <fstream>
+#include <sstream>
+#include <dali/integration-api/debug.h>
// INTERNAL INCLUDES
#include <adaptor-impl.h>
namespace
{
-BaseHandle Create()
-{
- BaseHandle handle( StyleMonitor::Get() );
+#if defined(DEBUG_ENABLED)
+Dali::Integration::Log::Filter* gLogFilter = Dali::Integration::Log::Filter::New(Debug::NoLogging, false, "LOG_STYLE_MONITOR");
+#endif
- if ( !handle && Adaptor::IsAvailable() )
+/**
+ * Use font client to get the system default font family
+ * @param[in] fontClient handle to font client
+ * @param[out] fontFamily string representing font family
+ */
+void GetSystemDefaultFontFamily( TextAbstraction::FontClient& fontClient, std::string& fontFamily )
+{
+ TextAbstraction::FontDescription defaultFontDescription;
+ if ( fontClient )
{
- Dali::SingletonService service( SingletonService::Get() );
- if ( service )
- {
- Adaptor& adaptorImpl( Adaptor::GetImplementation( Adaptor::Get() ) );
- Dali::StyleMonitor styleMonitor = Dali::StyleMonitor( new StyleMonitor( adaptorImpl.GetPlatformAbstraction() ) );
- service.Register( typeid( styleMonitor ), styleMonitor );
- handle = styleMonitor;
- }
+ fontClient.GetDefaultPlatformFontDescription( defaultFontDescription );
+ fontFamily = defaultFontDescription.family;
}
-
- return handle;
}
-TypeRegistration STYLE_MONITOR_TYPE( typeid(Dali::StyleMonitor), typeid(Dali::BaseHandle), Create, true /* Create Instance At Startup */ );
} // unnamed namespace
Dali::StyleMonitor styleMonitor;
Dali::SingletonService service( SingletonService::Get() );
- if ( service )
+ if( service )
{
// Check whether the singleton is already created
Dali::BaseHandle handle = service.GetSingleton( typeid( Dali::StyleMonitor ) );
- if(handle)
+ if( handle )
{
// If so, downcast the handle
styleMonitor = Dali::StyleMonitor( dynamic_cast< StyleMonitor* >( handle.GetObjectPtr() ) );
}
+ else
+ {
+ styleMonitor = Dali::StyleMonitor( new StyleMonitor() );
+ service.Register( typeid( styleMonitor ), styleMonitor );
+ }
}
return styleMonitor;
}
-StyleMonitor::StyleMonitor(Integration::PlatformAbstraction& platformAbstraction)
-: mPlatformAbstraction(platformAbstraction),
- mDefaultFontSize(-1)
+StyleMonitor::StyleMonitor()
+: mDefaultFontSize(-1)
{
- mPlatformAbstraction.GetDefaultFontDescription( mDefaultFontFamily, mDefaultFontStyle );
- mDefaultFontSize = mPlatformAbstraction.GetDefaultFontSize();
+ mFontClient = TextAbstraction::FontClient::Get();
+ GetSystemDefaultFontFamily( mFontClient, mDefaultFontFamily );
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "StyleMonitor::StyleMonitor::DefaultFontFamily(%s)\n", mDefaultFontFamily.c_str() );
+ mDefaultFontSize = mFontClient.GetDefaultFontSize();
}
StyleMonitor::~StyleMonitor()
{
}
-void StyleMonitor::StyleChanged(StyleChange styleChange)
+void StyleMonitor::StyleChanged( StyleChange::Type styleChange )
{
- if ( styleChange.defaultFontChange )
+ switch ( styleChange )
{
- mPlatformAbstraction.GetDefaultFontDescription( mDefaultFontFamily, mDefaultFontStyle );
- }
- if ( styleChange.defaultFontSizeChange )
- {
- mDefaultFontSize = mPlatformAbstraction.GetDefaultFontSize();
+ case StyleChange::DEFAULT_FONT_CHANGE:
+ {
+ if ( mFontClient )
+ {
+ mFontClient.ResetSystemDefaults();
+ GetSystemDefaultFontFamily( mFontClient, mDefaultFontFamily );
+ }
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "StyleMonitor::StyleChanged::DefaultFontFamily(%s)\n", mDefaultFontFamily.c_str() );
+ break;
+ }
+
+ case StyleChange::DEFAULT_FONT_SIZE_CHANGE:
+ {
+ mDefaultFontSize = mFontClient.GetDefaultFontSize();
+ break;
+ }
+
+ case StyleChange::THEME_CHANGE:
+ {
+ break;
+ }
}
EmitStyleChangeSignal(styleChange);
void StyleMonitor::SetTheme(const std::string& path)
{
- StyleChange styleChange;
- styleChange.themeChange = true;
- styleChange.themeFilePath = path;
mUserDefinedThemeFilePath = path;
+ EmitStyleChangeSignal( StyleChange::THEME_CHANGE );
+}
- EmitStyleChangeSignal(styleChange);
+bool StyleMonitor::LoadThemeFile( const std::string& filename, std::string& output )
+{
+ bool retval( false );
+ std::ifstream in( filename.c_str(), std::ios::in );
+ if( in )
+ {
+ std::stringstream buffer;
+ buffer << in.rdbuf();
+
+ output = buffer.str();
+
+ in.close();
+ retval = true;
+ }
+ return retval;
}
Dali::StyleMonitor::StyleChangeSignalType& StyleMonitor::StyleChangeSignal()
return mStyleChangeSignal;
}
-void StyleMonitor::EmitStyleChangeSignal(StyleChange styleChange)
+void StyleMonitor::EmitStyleChangeSignal( StyleChange::Type styleChange )
{
if( !mStyleChangeSignal.Empty() )
{
+ DALI_LOG_INFO( gLogFilter, Debug::Verbose, "StyleMonitor::EmitStyleChangeSignal\n" );
Dali::StyleMonitor handle( this );
mStyleChangeSignal.Emit( handle, styleChange );
}