[3.0] workaround to support APP_RESOURCE_PATH constants in stylesheet.
[platform/core/uifw/dali-adaptor.git] / adaptors / common / style-monitor-impl.cpp
index 756df14..307a6c4 100644 (file)
 #include "style-monitor-impl.h"
 
 // EXTERNAL INCLUDES
+#include <app.h>
 #include <dali/public-api/object/type-registry.h>
+#include <fstream>
+#include <sstream>
+#include <dali/integration-api/debug.h>
 
 // INTERNAL INCLUDES
 #include <adaptor-impl.h>
@@ -37,25 +41,24 @@ namespace Adaptor
 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
 
@@ -64,15 +67,21 @@ Dali::StyleMonitor StyleMonitor::Get()
   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
+    {
+      Adaptor& adaptorImpl( Adaptor::GetImplementation( Adaptor::Get() ) );
+      styleMonitor = Dali::StyleMonitor( new StyleMonitor( adaptorImpl.GetPlatformAbstraction() ) );
+      service.Register( typeid( styleMonitor ), styleMonitor );
+    }
   }
 
   return styleMonitor;
@@ -82,7 +91,9 @@ StyleMonitor::StyleMonitor(Integration::PlatformAbstraction& platformAbstraction
 : mPlatformAbstraction(platformAbstraction),
   mDefaultFontSize(-1)
 {
-  mPlatformAbstraction.GetDefaultFontDescription( mDefaultFontFamily, mDefaultFontStyle );
+  mFontClient = TextAbstraction::FontClient::Get();
+  GetSystemDefaultFontFamily( mFontClient, mDefaultFontFamily );
+  DALI_LOG_INFO( gLogFilter, Debug::Verbose, "StyleMonitor::StyleMonitor::DefaultFontFamily(%s)\n", mDefaultFontFamily.c_str() );
   mDefaultFontSize = mPlatformAbstraction.GetDefaultFontSize();
 }
 
@@ -90,15 +101,31 @@ 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 = mPlatformAbstraction.GetDefaultFontSize();
+      break;
+    }
+
+    case StyleChange::THEME_CHANGE:
+    {
+      break;
+    }
   }
 
   EmitStyleChangeSignal(styleChange);
@@ -126,12 +153,32 @@ const std::string& StyleMonitor::GetTheme() const
 
 void StyleMonitor::SetTheme(const std::string& path)
 {
-  StyleChange styleChange;
-  styleChange.themeChange = true;
-  styleChange.themeFilePath = path;
   mUserDefinedThemeFilePath = path;
+  EmitStyleChangeSignal( StyleChange::THEME_CHANGE );
+}
 
-  EmitStyleChangeSignal(styleChange);
+std::string StyleMonitor::GetAppResourcePath()
+{
+  std::string resourcePath = "";
+  resourcePath = app_get_resource_path();
+  return resourcePath;
+}
+
+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()
@@ -139,10 +186,11 @@ 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 );
   }