[3.0] workaround to support APP_RESOURCE_PATH constants in stylesheet.
[platform/core/uifw/dali-adaptor.git] / adaptors / common / style-monitor-impl.cpp
index beafbe3..307a6c4 100644 (file)
 // CLASS HEADER
 #include "style-monitor-impl.h"
 
-// INTERNAL INCLUDES
+// 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>
 #include <singleton-service-impl.h>
 
@@ -35,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
 
@@ -62,34 +67,65 @@ 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;
 }
 
 StyleMonitor::StyleMonitor(Integration::PlatformAbstraction& platformAbstraction)
-: mPlatformAbstraction(platformAbstraction)
+: mPlatformAbstraction(platformAbstraction),
+  mDefaultFontSize(-1)
 {
+  mFontClient = TextAbstraction::FontClient::Get();
+  GetSystemDefaultFontFamily( mFontClient, mDefaultFontFamily );
+  DALI_LOG_INFO( gLogFilter, Debug::Verbose, "StyleMonitor::StyleMonitor::DefaultFontFamily(%s)\n", mDefaultFontFamily.c_str() );
+  mDefaultFontSize = mPlatformAbstraction.GetDefaultFontSize();
 }
 
 StyleMonitor::~StyleMonitor()
 {
 }
 
-void StyleMonitor::StyleChanged(StyleChange styleChange)
+void StyleMonitor::StyleChanged( StyleChange::Type styleChange )
 {
-  if (styleChange.defaultFontChange || styleChange.defaultFontSizeChange)
+  switch ( styleChange )
   {
-    //mPlatformAbstraction.UpdateDefaultsFromDevice();
+    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);
@@ -97,14 +133,17 @@ void StyleMonitor::StyleChanged(StyleChange styleChange)
 
 std::string StyleMonitor::GetDefaultFontFamily() const
 {
-  //return mPlatformAbstraction.GetDefaultFontFamily();
-  return std::string();
+  return mDefaultFontFamily;
 }
 
-float StyleMonitor::GetDefaultFontSize() const
+std::string StyleMonitor::GetDefaultFontStyle() const
 {
-  //return mPlatformAbstraction.GetDefaultFontSize();
-  return float();
+  return mDefaultFontStyle;
+}
+
+int StyleMonitor::GetDefaultFontSize() const
+{
+  return mDefaultFontSize;
 }
 
 const std::string& StyleMonitor::GetTheme() const
@@ -114,25 +153,46 @@ 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::StyleChangeSignalV2& StyleMonitor::StyleChangeSignal()
+Dali::StyleMonitor::StyleChangeSignalType& StyleMonitor::StyleChangeSignal()
 {
-  return mStyleChangeSignalV2;
+  return mStyleChangeSignal;
 }
 
-void StyleMonitor::EmitStyleChangeSignal(StyleChange styleChange)
+void StyleMonitor::EmitStyleChangeSignal( StyleChange::Type styleChange )
 {
-  if( !mStyleChangeSignalV2.Empty() )
+  if( !mStyleChangeSignal.Empty() )
   {
+    DALI_LOG_INFO( gLogFilter, Debug::Verbose, "StyleMonitor::EmitStyleChangeSignal\n" );
     Dali::StyleMonitor handle( this );
-    mStyleChangeSignalV2.Emit( handle, styleChange );
+    mStyleChangeSignal.Emit( handle, styleChange );
   }
 }